This tutorial is available for all users. Start with a 7 Day Free Trial today and get access.
Hey there stranger!
Let's not be strangers any more. Start a FREE TRIAL today to view this tutorial, right now.
Basic CRM - Add a Powerful Script To Move Row Based on Status
About this Tutorial
00:13 This is pretty cool. It automatically does it. So what you might have here is a name of contacts. First name, email, any kind of information, and you have a status column and you wanted click and say, we closed this deal.
00:29 Yay. We want this row to cut and paste over to a different tab. Now you might be doing this by a conditional formatting, maybe coloring it as it goes through different phases, or goes through a pipeline.
00:45 You might be using cut and paste, uh, with your cursor and mouse, but we're going to be doing it automatically.
00:52 I'm going to show you, I'm going to pause the video, come back and I'm going to show you the end result.
00:58 And then I'm going to walk through. Step-by-step how we do it. You can also skip this entire video and go get the script yourself and get the sheet and get the script.
01:10 And I'll show you how to do that after I show you what we're doing. Okay. I just want to show you that here's the list of contacts.
01:19 Here's a tab called closed and which we want all of the closed, uh, contacts to come over to right now it's blank.
01:28 And without positive video, without doing anything, I'm going to go over to contacts. I'm going to go, let's say this first one, Elijah changed to closed.
01:38 Let's see work there. It deleted it from there. Where did it go? Let's look at closed. And there is a ledger with all the information and a script takes care of all of that.
01:52 And that's what we're going to do today. This is one of the most powerful, uh, scripts I've ever written. It took me the first time I ever wrote it two weeks to write, and it ended up making me a lot of money later, because this is also the introduction, how I got introduced to Google script and how powerful it is.
02:11 So I'm excited to get going and showing you how to do this. So as we go, step-by-step through this, I want to set up just for a moment, few things.
02:21 One, we have three tabs here. One is called contacts. A, you want to call it sales or pipeline? There's also closed, which now is blank, except for the header.
02:33 The years lost as well. Sometimes we lose deals, right? We don't, we don't close them. We don't win them. And we, but we want to put them somewhere.
02:42 We want to save them somewhere. So, uh, that's what we have. I just want to point out again that the header, not again.
02:49 I want to point out for the first time, the header is the same. All of the rows and call. Sorry, not rows.
02:56 All of the columns are exactly the same on all of the sheets. So that is our baseline table stakes. Now I will show you where we're going to write.
03:07 We haven't done it on this sheet. So we're going to walk step-by-step through this. We're going to go uptake, extensions, app script.
03:14 This is going to open a new tab and it'll be our script and where we're going to, right? So this is what apps script and Google script looks like when you first open it you'll have an untitled project.
03:28 You'll have function. My function. We're going to command a, we're going to select all that. We're going to delete it.
03:34 It's in this code file here. We're going to write our own, but we're not going to start with nothing. We are going to use utilize Google scripts on edit functions.
03:46 So we don't have to name this function. Other than we write function on capital E edit, we put two parentheses and then two curly brackets and open and close.
03:57 So we have parentheses and curly brackets. We're going to hit enter. And we're going to do all of our work here inside of this on edit.
04:04 And if you see this orange button, um, dot here, that means we haven't saved. So I'm going to hit command S and save for the first time nothing's going to happen.
04:14 We can go back to our sheet and we can see that nothing's going to happen when we hit close. When you hit, when we change this to in progress, still, nothing's going on, but let's go back to our project.
04:27 I want to do one thing first. I do want to name this, uh, just because it's sort of easier to see.
04:34 I just don't like seeing untitled project. Um, I'll just call it CRM code. All right. Now, what are we going to do?
04:43 Well, what happens with this on that? Annette, it's a pretty powerful function. That's built inside of Google script. We can use this for lots of different things.
04:52 In this case, we're going to use it to move the row over to the other tab. We need one thing before we write code and we need an event.
05:01 This is sort of a fill in a blank that carries with it, all the information we need. And we have to grab all that information from it as the event happens.
05:13 And what's an event, an event you can literally call this anything you want. I actually usually usually call it E to, um, decrease the number of, uh, characters I'm typing, but easy doesn't make much sense.
05:26 Event is better. We can get things like we're going to do, uh, event dot, um, range. What does that do?
05:38 Well, that gets us, uh, the row and the column, but it's together. So we're going to call this a variable and we're going to call it edit range.
05:54 Now, any time that an event occurs, which is a change in edit a change in inside the sheet, we can grab the range of what that edit is, and we'll do things like variable, edit row equals, uh, edit range dot get row.
06:18 And we can also do variable edit call. I'm gonna just do col, but for the column, edit range dot get column.
06:29 Now, why do we need this? Well, we're going to need this at the end. When we delete the row, we're also going to need it.
06:36 When we copy the row, we're going to copy it over. We're going to do a little bit of breakdown of all of the steps would needed, um, in code.
06:46 So let's look at this. So say you're doing this for the first time, and you've never done any coding or scripting before.
06:52 And you want to like, see what is going on in the code? Well, we're going to use logger dot log and we can write like, Hey, here.
07:02 And anytime there's an edit, it'll say, Hey, in our log, where do we find that go over here? There's some, uh, executions.
07:09 So we're in the editor now, but we're going to actually open this on a different tab. So we don't have to get away from our script too much.
07:22 I'm also going to change the, uh, layout of what we're looking at. So then we can look at the sheet and the code at the exact same time.
07:30 All right. So check this out on our left. We have our sheet open and on the right, we have our code.
07:37 We also have our code executions going on here. So anytime we edit, anytime we edit. So let's say we change this from in progress to follow it up, we'll be able to see this execution.
07:54 See right there. It showed us what that on edit is doing. It's telling us our function is on edit. It's a simple trigger.
08:01 It executed in 0.1, four seconds. If we click on it, this is going to be important. We want to refresh.
08:08 We've going to be able to see, Hey right there. See that log. This is the logger so we can write anything we want here in our logger dot log.
08:17 Hey there, we can write other ones. Logger dot log. Hello there. We can also write logger dot log. This is actually the useless we want to use it for is we want, uh, edit RO texts.
08:40 Then we're going to do plus sign, edit row. We want to know what is that? What is it getting? We're going to do that for column as well.
08:50 Edit call Plus sign, edit call. There we go. So now what this should show us is we're going to hit command.
09:02 So it saves it. See that orange button goes away. It's going to show us every time we edit these four things.
09:08 So let's go edit something. Let's go in progress. And we're hoping to get column one row 1, 2, 3, 4, 5 row five. So we want to see that if that's, if this is successful, we'll see if it's successful.
09:25 So there we go. We have, Hey there. Hello? There. Edit row five. Perfect. And now where's our edit column. Okay.
09:32 Our edit column comes in one. This is perfect. This is how we act. This is how we know. What role are we on?
09:38 What cell is it? What column is it? Where are we located? We have now successfully accomplished knowing where we are when we're editing.
09:47 Cool. So how can we then get sheet names? What we're going to do is we're going to do variable S S equals spread sheet app.
09:59 When you do get active spreadsheet, then we're going to do variable active sheet equals S S dot get active sheet parentheses.
10:15 Now we need to get name. So anytime that we edit something, we know we're on a sheet where the user is actively on the sheet.
10:26 This is how we get it. We get active sheet. Now we want to say, let's get rid of this. Hello there.
10:31 And Hey, there's and say, logger dot log, a sheet, which we want the active sheet. Now we're going to right here plus active sheet.
10:47 So we know what is our variable there. Now, if we have it correct, if we're doing correctly, it should say contacts.
10:54 So we see it follow up in progress. Now let's go back to our code. This is a bit slow getting started, just to share with you.
11:03 What's going on in this on edit. We're going to go faster. We're going to get some real cool stuff. There it is.
11:08 Active sheet contact, thumbs up. Great confetti, go with the confetti. We are cracking and rolling. All right. I might've celebrated a little too early and a little too hard.
11:22 I just spilled water all over my computer and we are going to see how this goes. All right. Next step is probably the most important step.
11:31 Basically, our theory is anytime there's edits, could, the edits could be anywhere in the sheet. And we only want to deal with edits, which come under a few situations.
11:49 It's on the contact sheet. We only want to move a rose when they're on the contacts. We only want to edit rows when they are closed or lost in this particular case.
12:03 So how do we do that? We use an if function, so let's enter let's type in. If we're going to use a similar syntax that we did up here with this function, we're going to do.
12:15 If two parentheses and then two curly brackets within these curly brackets is what we're going to have done. But the <inaudible> is going to be either true or false.
12:27 And if it's false, it's not going to do anything in the brackets. If it's true, it's going to continue going in the code.
12:33 Now, the, if we want is to make sure that first that the sheet is correct. So active sheet, uh, we use two equals, signed to say, is, is equal.
12:46 Is if one equals sign assigns value to equal sign says, does it do these things match? And we're going to say contacts con if I can smell context correctly, there we go.
12:59 If active sheet is equal to the two equal sinus is equal to contacts, then execute anything. That's in those curly brackets.
13:09 That's not all, what if we're just updating the name of the person or the email address or their phone number.
13:15 We don't want to move there. We don't want to move the entire row over to closed. So we're going to do two and percents for, and we're going to also write, edit call.
13:27 That's our variable up here, edit column. And we need that. Two is equal to one. We have one more thing to do, which is we want to make sure that it's only executing the move.
13:46 If it's either closed or lost. If the status over here, we have some statuses we have like in progress, contacted, followed up when we're changing those, we don't want this to move.
13:58 We want it to stay in the contacts tab. So based on closed or lost, we need to say what one of those two.
14:06 So we go and we're going to put in parentheses, edit value is equal to closed. Then we do two, uh, bars.
14:22 And that's the, or, um, this is the bar that on a Mac is above the return key on the right side and shift.
14:32 We also do edit value is equal to lost. So now what this allows us to do is say, in either case, if we've changed anything on the contacts page, that is in the first column and the edit value is close your loss.
14:50 But wait a second, I skipped something big. What is this edit value? Oh my God, I've skipped this. Let's go back a little bit and get it.
14:59 So we know in this event, what is being edited? What, what happened, and that is edit value Equals event dot edit value.
15:17 Actually, that's not right dot value. It's just not value that this is event value, just like event dot range, event dot value.
15:26 So let's look at what that is. Logger dot log let's do edit value plus edit value. Okay. So now the log is going to tell us, what is this value?
15:44 Let's command S we don't actually care right now in this. If I'm over here on, if nothing's going to happen, even if we're editing this, but we want to know what is this edit value.
15:57 Okay, let's go. We've saved it. Let's look up. Let's change this to in progress. Let's do a few edits. Let's change this to closed so we can see if that works.
16:08 Let's go back to our executions and see we've completed some, see our log and it row 13 active sheet contacts, edit value in progress.
16:20 Perfect. We're now able to see what was edited. What here it is closed, what actually changed, what ended up being the value of that edit.
16:31 This is perfect. Now let's look at, um, if we changed this person's name, we did two edits there. Let's see what happens.
16:50 There we go. So we now know what's the end result of every edit, right? There's that Olson here's. This should be glass.
17:00 If it was correct. Perfect glass. It knows what we typed in. Wow. That's powerful now for those who are wondering what happens once these, if things become true and we execute something within these brackets, let's do something to show you that.
17:17 So instead of having the lager log, leave, added value there and, and log literally every text we're typing. And we only want to do that in here.
17:26 So let's look at that. I'm going to move it, copy and paste, cut and paste over to here. So let's add a little tab at the beginning just to clean this up.
17:35 So we know we can tell what's going on. This line tells us where inside these two brackets, okay. Command S.
17:43 Now I'm going to do two edits. I'm going to change this, followed up to closed. I'm going to change this in progress to contacted.
17:53 Now of those two, we should only, we should have two events, but we should only have one that shows us the edit value.
18:00 Let's double check that let's see those two events. This active sheet says contacts. Whereas the edit value might take a moment for it to register, but see, the edit column has one that's perfect.
18:21 The active sheet is context. That's good. Oh, I had a little error. So we found out in this CRM code in this, um, executions that it was not actually executing on clothes, but it is looking at this edit value is lost.
18:43 So once I change it to last, it was getting the edit value. So what happened was I had an extra space bar in my edit value is equal to close here.
18:53 So change that click S to, uh, command as to save it. Now, let's go back here and edit this again to last.
19:04 And then we're going to edit this one to closed. Now, upon that, we should have two things that both show us the edit value.
19:16 There's two here's edit value, last edit value, close. Perfect. So we figured out about just by going back and forth, you can pick out bugs and make sure that actually things are executing properly with this lager not long.
19:30 Alright, next thing we're going to need is we need to actually copy the row and how we do that. We need to know how long the row is or what the range is.
19:45 And in Google sheets, and with scripts, you need to know the range, right? And you might know it by like, it's a one notation, which is in this case, we'll look, we just changed row 14, but it's row 14, column B 14 to I 14.
20:03 We may know only know that First thing, which is a pretty boring thing we need to do is variable context sheet, which is, um, S S which is this spreadsheet app dot get sheet by name.
20:24 And in here we do contacts. We use the phrase context, cause that's the context sheet that we're on. We're going to do, what are we going to do?
20:34 Well, our end result is going to be using a code, which goes like this, which essentially she Iran. We're going to rename this dot copy to Actually that's even wrong.
20:58 The sheet or range you're on and copy to the destination range, which is also going to be on it, which is going to be on a sheet.
21:09 And it's going to be this copy too. We're going to add some, uh, options, which will be just to take the contents.
21:16 We don't want any formatting or anything. We can deal with that later. So how do we get this sheet that we're on?
21:23 We have variable context sheet. We know we're on the contact sheet because active sheet is equal to context. The name of it.
21:29 So we know, okay, once we've gotten through this, if we want to just copy the row, the row, well, what is that row?
21:37 It's going to be this edit row. So we're going to say variable contacts range is what is it? We're going to be contacts, sheet dot, get range.
22:05 We have edit row. Oh, in this case, we need a few items. We need to know what is a starting row.
22:13 We need to know how long that row is. So we go, sorry. It shows it here. Row column, which is one.
22:23 We add a comma and we say, number of rows, we only want one row comma now, number of columns. Well, we can actually count.
22:31 So we need the, a column B column. We want one too. We can count. Or we can go up here and do equals column.
22:41 And it's nine. The answer is nine I as nine columns. There we go. So we put in nine. Now here comes a little tricky part.
22:59 We need to know where are we going to go to? So we go, go to range. And what is that going to be?
23:06 It's going to be S S dot get sheet by name, but instead of an actual name. Cause we don't know if we're going to go to the closed or lost.
23:24 We're going to do edit value here. So any time it gets into this, if we know it's going to be closed or lost.
23:32 So we know the name of the sheet is going to be closed or lost. Okay? So as we're writing this, let's start filling in what this sheet, uh, this code is going to be.
23:45 First is it's contacts range, right? This variable that says we're on the contact sheet and we have this range. We know the row.
23:55 We know the number of rows, a number of columns. Then we want a copy to where do we want to copy that to go to range?
24:08 Now here's a weird thing. We need to get a range here. Actually, this should be sheet, but make this a little easier to read, go to sheet.
24:18 And we're going to call this go-to sheet. And now we have to figure out the range and what's the range.
24:24 Well, the row that we need to go to is going to be the last row, but the one under it.
24:31 So let's right last row here. And we know we're going to have to plus one, but how do we get last row?
24:38 Let's go back up a little bit and go, go to sheet dot, get last row. That's pretty simple. And our variable is going to be last row equals.
24:55 There we go. So now we can get the last row and we're going to just add one. We also need to put in this range, a column, which we want to know.
25:08 Number one column. We want to put it into now, here's our options. This is going to be something you can Google for if you forget it.
25:17 But, um, I always have to go for it. I'm going to put in brackets, capital contents only CA uh, contents, capital only colon.
25:28 True. Why do we do this? Well, if we have some kind of formatting that we've already created on our sheets, we've created one sheet and we've duplicated.
25:39 We have the formatting already there. We don't need to copy, uh, copy any of the formatting. One thing I ran into when I used to do this and I created this script and I didn't do contents only is that it grabbed the conditional formatting as well.
25:51 If you ever add conditional formatting and you cut and paste that row, the conditional formatting carries over, but it makes the sheet run so much slower.
26:01 So incredibly slow. It really slowed down our sheets. Once we did this, hundreds of times, it slowed down our sheets.
26:07 Incredibly, we're going to hit save, and let's check our work. Now let's take this moment to check our work. What should be happening is if we move Adeline king to closed, you notice nothing happened here, but on closed, we have ad linking.
26:31 So this copy too, we did all of this work to make sure that any time we change that to close it, copies it over.
26:39 There's a couple things left to do now, right? We need to delete the row that we just moved it from.
26:44 So it, there is a, um, code that you can move to. But I don't necessarily like to use that in this case.
26:51 I like to separate it a little bit. All right, this is an easy code to write. We're going to, where are we going to do it?
26:59 We're going to do it on the contacts page, which from here, variable contact sheet. There we go. Variable contact sheet dot delete row.
27:10 And we need a number here. We need to put in these parentheses a number. What number are we going to?
27:15 Are we going to delete? We're going to delete the edit row. We already have it. We already have that variable.
27:21 So we're going to just type in edit row. They're going to command S save. So now let's go back. Let me delete from closed.
27:30 Actually, we won't even delete that. Let's just look it'll it'll copy it again. Contacts. Let's move this back to contacted, but then closed.
27:44 What happens now? Did you see that? Did you see Adelaide disappear and unclosed? We have Adeline king, two of them, right?
27:53 This is great. Let's look at the last page. We have nothing here. Let's go back to our contacts. Let's move.
28:10 Let's go down to our sheet. Maybe we lost them on the bottom. Nope. We just moved to Rouge. Let's move Roxanna.
28:24 Did you see that? Why didn't this move? Let's go to last. There's Roxanna and there's Hirsch. So there we go.
28:41 Let's do this again. This is so much fun. Once this works, you're like, oh, I'm addicted to moving stuff. Now.
28:47 Um, one thing I will say right now, and I might mention it again later is that you can not do multiple rows.
28:54 So let's just do, like, if we just typed last, it doesn't really execute multiple rows very well or at all, but without changing the code, we can go to like Danielle do last, let it run.
29:23 And it works perfectly one at a time. This is not meant for bulk. Uh, we haven't written code. That's good for bulk entries.
29:29 Just one at a time. You might be needing to do this many times. Just take your time slowly. Go through lost.
29:47 Okay. One thing I will mention, let's put this back to in progress. If you have on the closed list, let's say we've tried to clean this up and we've deleted all of the rows now.
30:10 How is it going to copy it to this page without there being a row? Well, probably won't let's go see what happens if we move, let's go to the top.
30:21 Let's change. Let's say Carl closed. Now we have nowhere to move it to closed. Okay. We'll hit closed. Let's look at our executions that runs.
30:53 So this Karl one right here, it took a moment, but we got a failed status. Let's see what that failed looks like.
31:00 Cause you might get these as you're writing code and you're trying to use this and you're trying to do some edge cases.
31:04 You might get these codes and be like, oh my God, I failed. If this failed, I failed. All right, but it's not that bad.
31:11 It'll tell us exactly what happened. It says exception, the coordinates of the target range or outside the dimensions of the sheet.
31:18 Let me actually translate this for you. We have nowhere to go. The row that you're trying to move to. Doesn't exist in our code.
31:30 We have that. We find the last row and then we add one. We don't check to see if there is a, um, row to move to.
31:39 We just say last row, plus one. How can we make sure we have one? Well, one is we can just be, can fix this, right?
31:49 Let's do it manually without writing any code first, go to CLO closed. We're going to add one row. Now let's try to do this.
32:00 Let's try to move Carl again. So we move Carl and it moves and we'd go back to our CRM execution code and we see that it moved no fail, or we can lo lower this.
32:24 It was Carl. We closed bam. Everything's fine. Right. But what if we want to make sure let's look at that again?
32:32 Let's go back to closed. Now. Now we're in the exact same that we were before. Sure. We can go and add a row every time.
32:45 Or we can go into the code and say, if we delete a row, let's add a row. So we're going to do S S dot actually go to sheet dot append row and we need something.
33:13 So one weird thing about a pen row is we need something to UPenn. So we're going to do bracket and then two quotes going to hit space.
33:24 Save, sorry. Now when we delete this row, actually one second. All right. We need to do this before we, uh, get the last row.
33:41 There we go. So we moved it up a little bit. We did go to sheet dot UPenn row. Now we go to our closed.
33:48 Let's delete this RO and let's see, let's save our code first. Come S we have that orange.here. I get rid of that orange.by saving the project.
34:01 Then we go back and let's go to Kelsey, go up to Kelsey, change them to closed. Let's see if Kelsey goes away, Kelsey goes away, but we didn't have any rows there.
34:14 That was cool. Wow. There we go. Kelsey's there. We have no rows, but now what we're doing is we're appending a row before we need to move them.
34:24 Let's see. Amelia closed. Yay. Fire off the gr graffiti. The confetti we've closed the deal. There's Amelia. Bam. Awesome. So we're amending that row before appending that row before we have something, even if we have some rows, let's look at this.
34:50 We have five rows here. Let's see what happens. Finley. Do you move to closed? There we go. Finley moved to closed.
35:05 Does it still work? It's still gonna work. Even if we have no rose left, did Blaine move. Let's see if Blaine moved to close.
35:16 So now we don't have to add any rows. It does it automatically. Speaking of rose, what happens if you have a contacts list and your contacts let's continually get shorter?
35:31 Well, you might want to add more context. If your lead lists are coming in day by day or week by week, and you're adding leads, sales calls, potential sales to your sheet.
35:44 Why do we have to continually delete the row and not add something? So we can actually add another row to the end, but we don't want to do a pen row on this, on this particular sheet.
36:00 If we, for some reason, have a blank somewhere, a pen row is going to find the first area and then add it to it'll add it in the middle.
36:09 Um, our close is going to be pretty similar because it's all of our code stuff. So let's look at this.
36:13 Let's do this variable. Uh, we had last row. Okay. We want to create a last for contacts. Last row is going to be equal to, uh, contacts Sheet.
36:44 This is the contact sheet dot get last row. You have the add those parentheses. Now on the bottom we can, after that we can do SS dot insert row after.
37:01 And where do we want to add it? You want to add it after the context last row and how many do we want to do?
37:16 So we have two options here. We can do insert rows after we can do insert row after we only want to do one, but if you want to have more control, you can say insert rows after, and you can do a comma.
37:27 And in this case, we only want one, how many, but you can maybe add two for everyone that you finished.
37:33 Maybe you want to add two rows. It depends on your situation. So what this is going to do, and hopefully let's watch it.
37:42 Do what we think it's going to do is that after we delete a row that has been closed or lost on the contacts page, we're going to add another row and it's going to go on the bottom.
37:55 So let's look at that. Let's go to the top, let's lose that one. It deleted it and let's go to the bottom and we have a row let's Say last Iris, Boom, deleted it from the top and added a row on the bottom.
38:14 And this feels like magic, right? So when you're adding this kind of script, we can add these little extra so that we don't have to do extra work, right?
38:21 Where this is going to decrease the amount of work that we have to do to manage where all of our sheets have rows available for more contacts for more leads, um, cleans it up, right?
38:32 It deletes the row. After, after it copied it, we don't have any holes in R and R sheet anymore. Sometimes you might be looking at setting.
38:42 Something is in progress and you might do something like select the whole row, command X copy, or cut it or copy it, then paste it, then come back and delete it.
38:52 And it causes all sorts of holes in your sheet. This will clean up your sheet as it goes. So for this whole video, this code was scrunched up to the right, so we can see what we're doing on the left and the right.
39:04 But I want to add some notes here, just so that those who have, um, access on better sheets, you can go in the description, get the sheet and you can get this code immediately.
39:15 You don't have to watch, you could have watched this whole sheet, whole video to see what, how does she just built how the code is, what the thinking behind it is.
39:22 But if you're ready to go and use this, I want to make sure that you have a few notes in here so that you know what you might have to change.
39:31 So I'll come back after the past. Okay. So I added some notes here to make sure that you're editing things for your use case as you're using this script.
39:43 So the first thing is you must edit the context name here and here. If you do have something different than context, maybe sales leads, main sheet one, edit this in the, um, quotes.
39:58 You will also have to edit this close and loss based on what the actual thing you're doing is, uh, move to, I have made life a little easier for myself because closed and lost is both the name of the status that you're changing.
40:16 And the name of the tab. If however, um, you have different, like a status moves, if it's closed or lost moves to a different page, then, um, you're going to have to edit this here, that go-to sheet code.
40:32 And it, this, if name of sheet is different, uh, it's slightly different code that you're going to have to edit.
40:39 If, if the status and the sheets are differently named, uh, then they are probably one of the most important things.
40:48 Cause you might not care about the name of your sheets, but you do care about how much data you have.
40:52 This nine here, uh, needs to be changed for your use case. Edit this, uh, right now it's online 25, uh, 24.
41:03 So edit this nine to be however many columns you need to move or copy. This is probably the most important edit in the entire sheet or in the entire script.
41:14 Um, it's pretty easy to see contacts. You have to change that close. It's easy to see the other edits, but this nine on now row 24 is the most important, uh, thing, because you are going to have a different number of columns.
41:29 Um, if you don't want to add any rows to the sheet that you're going, this might be deletable. If you're like, oh, we're going to have a thousand rows on our sheet and we only have a hundred contacts.
41:44 You can probably delete this row. If you care, I'm just pointing out that this is the row that actually does the copying and that this is the row, the CA code that does the deleting, just in case you have to edit that in.
41:58 Um, and if you do not want to add a row on the main page, then delete this, uh, line 41.
42:07 At this time. You can also, if you ever want to have code knots run, but you don't want to delete it, add two slashes at the beginning of the line, and that will then save and that will make it, so the code doesn't run in this case, the code's running.
42:26 So you can do either one of those delete or add the two slashes, make it a common. And that is the entire row.
42:32 That's a seventy-five thousand dollar code. And what I meant by the $75,000, if you didn't see the intro, um, this is the first code I re wrote that I got a job that ultimately pay me $75,000 a year to make Google sheets all the time.
42:53 And it took me two weeks to write this code. When I first wrote it. Now it took me about 45 minutes to write it and explain it.
43:02 Um, and each step and go through some of the edge cases you might have educators. And that is probably gonna last years.
43:10 Uh, also, if you have any questions, comments, ask below, I'm happy to answer them. Hopefully you can use this and make your life better by.
Basic CRM - Add a Powerful Script To Move Row Based on Status
Escape Spreadsheet Hell A Mini Game
Basic Keyboard Shortcuts To Speed Up Your Productivity
How to Make a Quick CRM w/ Dashboard
Make a Quick Pipeline (For Sales and More)
Sheet Stories / Video Notes + ADDED: Email Notifications
ChatGPT Clone in Google Sheets Part 2
Why Different Cell References in AI Integration in Sheets?
Show Sheet Tabs Based on Edit
Add Title Case to Google Sheets
How to Power Testimonials with Google Forms and Sheets
Getting Started Coding in Apps Script
Seek Errors When Coding Apps Script
Think Like a Programmer: Develop The Mindset of an Apps Script Coder
ChatGPT Clone in Google Sheets Part 1
Embed a Number in a Website from a Google Sheet
Create Navigation Like A Book or Presentation
Add Click Tracking To Your Google Sheets | Bitly in a Google Sheet
Hold a Giveaway Raffle in a Google Sheet
Embed a Headline in a Website from Google Sheets
Capture Emails from Website Form to a Google Sheet (Without Zapier)
Quickstart Tutorial OpenAI API in Google Sheets
Create a new Spreadsheet from just a Name in a Sheet.
Bjarne Asks: Can I show the Last Time of the Last Edit in a sheet?
Email Yourself a Cell from a Google Sheet, Every Day
OpenSea Data Inside Sheets
Create an Email Campaign Stats Calculator
Twitter App Clone in a Google Sheet
Dylan Asks: How to Automatically Delete Rows If Cell Contains Value
Highlight Row as You Move Your Cell Selection
Create a Timer with Apps Script
LinkTree in a Google Sheet
Password Protecting Data In a Google Sheet
Automatic Weekly Backup of Google Sheets
Create a CPM Custom Function (Create Better Calculators!)
Move Entire Row when a Cell is changed to "Yes" - The $75,000 Google Script
What Can You Automate in Google Sheets? Every single trigger available to Google Sheet users
Sync Two Tabs Without ImportRange()
Google Sheets Stories? No! But we'll add timestamped video notes to your google sheets.
Password Protecting Data In a Google Sheet Part 2 The Basics
Benoit Asks: How to Convert Case
Learn to Code in Google Sheets, For Programmers
Add a Checkbox to Turn on Dark Mode
Write Your First Script
Find Keywords in Any Column. Create quick search dropdown to find keywords
Basic CRM - Add a Powerful Script To Move Row Based on Status
How To Improve: 1,000 Business ideas: Business Idea Generator
Let's Make a Bookmarklet!
Troubleshooting Bitly in a Google Sheet Script
Unique Features - Design a Better Dashboard Part 2
How To Set Up Stripe Webhook to Google Sheets with Google Script
How to Edit a Macro
Sheet Stories / Video Notes + Clear 24 Hour Old Videos
Add A Timestamp to Task Lists (without Now Formula)
Make your Custom Functions Like Native Functions | Custom Function Autocomplete
Create a Changelog Between 2 Cells Custom Function | To learn Double For Loop
New Syntax for WhatChanged Formula in Google Script
How to Record Macros
2 Ways to Delete Lines Quickly (CAREFUL, it's a script!)
Deep Inside Dark Habits Google Script
How to Trigger Macros Daily
5 Ways to Create Coupon Codes | Create UUIDs
Create a Radio Button From Checkboxes Using Google Apps Script