Macros & VBA Training Series Part 1:
Writing Your First Macro & The Excel Object Model
Double-click video to view in Full Screen HD.
Download the file used in this video:
Macros & VBA Training Series
Enroll for FREE
The video above is the first in a 3-part training series. Can I send you the next two videos?
Please click the link below to enroll in the free training. I will send you video #2 in just a few days.
Please click the big green button above to register for the free training series.
About Me
Welcome to Excel Campus! I am excited you are here!
My name is Jon Acampora and my goal is to help you learn Excel to save time with your job and advance in your career. I've been an avid Excel user and VBA developer for 10+ years. I am also a Microsoft MVP. When I'm not looking at spreadsheets, I get outdoors and surf. 🙂
What Process Do You Want To Automate in Excel?
Please leave a comment below with your answer, and any questions. Thanks!



Hello Jon,
I really value your tutorials and the ‘plain approach’ in your explanations. I would like to know about the ‘F8’ short cut to run the commands individually. For some reason my keyboard is having an ‘F key’ issue. What is the mouse click or tool bar icon to run each line one by one (instead of the ‘run all’ icon).
Thank you
Kurt
Thank you Kurt! I appreciate the nice feedback. Great question!
The command for F8 is called “Step Into” and it is located on the Debug menu in the VB Editor. Here is a screenshot.
An alternate shortcut to F8 is Alt,D,I. That will press the accelerator keys (underlined letters) on the menus.
If you are using a laptop keyboard, your function (Fn) key might be the issue. You might have to press Fn+F8 to press F8. Some laptops have a function lock that allows you to use the function keys by default without having to press Fn.
Here is an article I wrote on finding a good keyboard for Excel & VBA.
I hope that helps. Thanks again! 🙂
Hi Jon. Don’t know if you’re going to see this post but I’ll give it a go. I think I understand what’s the problem is with your F8 key. First is it a laptop? I’ll bet it’s a laptop!
If I’m right then you will also find a Fn key (often near the Ctrl key). If I’m right with all this then you need to hold the Fn key while you hit the keys F1 to F12.
On most laptops the function keys are primarily used the screen and sound volume (and other things). So holding Fn + F1 to F12 will make it work.
Hope this is useful.
Hi Daniel,
Thanks for your comment. I’m not sure if you saw it, but I had the same response to Kurt. The Fn key on laptops can be annoying. Most Lenovo laptops have a Fn lock option, which I really like. Other manufactures have this feature and I recommend finding a laptop with Fn lock, if possible.
Thanks Jon for the video.
It was very easy to start with..
I learnt a lot from video #1, looking forward to video#2 & 3.
I am an Inventory Analyst and currently facing challenges of matching received item to the correct purchase orders as there can be same parts to multipe POs and vice versa. We are currently concatenating and running VLookUps. I’m reaching out for possibilities of doing this in VBA.
Any ideas will be greatly appreciated.
Camille
Thank you Camille! This is definitely possible with VBA. There are a lot of ways to go about it, and the method you use depends on the setup of the data and what you are trying to achieve.
We can even use the worksheet functions in VBA.
This can be used in VBA to perform vlookups. Often times we can avoid this though and find a solution that might avoid the concatenation. It’s hard to make recommendations without seeing the setup, but definitely possible with VBA. I hope that helps. Thanks!
Hi, I have been looking for a VBA course online for some time to study at my own pace. The introductory video was great!
Thank you Aognhus! I’m happy to hear you enjoyed it.
very nice presentation and understandable to everone..
Thank you Hameed!
Your tutorial is excellent. One of the better ones I’ve come across. Thank you for re-generating my enthusiasm to learn more.
Thank you Terry! I really appreciate that, and happy to hear you are excited to learn VBA. 🙂
Thank you Jon for this video.
That’s a great way to learn VBA. Looking forward to your next video.
br,
Habib.
Thank you Habib!
Just dipping my toe, to understand capabilities of macros, as I have had no previous experience.
Thanks for well presented 1st video.
Thank you Gordon! I’m excited to see you are learning macros. 🙂
Hello, John – thank you for enlightening many of us who are interested in learning VBA. I had enrolled for many courses before but none of them kept me inspired to continue the program. I just watched your video 1 and cannot wait to see the rest. I also created a couple of macros on my own, and it worked flawlessly. I cannot believe it was this simple – at least, the basics. I already feel progressed with just the beginning video. I think the analogy that you have used to explain the fundamentals makes it easier to grasp and apply them in practice. I am keenly waiting for the webinar. I would be more than happy to pay for this training as an appreciation for your hard work. Thank you for making this available.
Hi Krish,
Thank you so much for the nice comment! I’m really excited to hear that you are enjoying the videos and writing your own macros. This is AWESOME! I think you are on your way to automating a lot of boring Excel tasks and saving you and your employer a lot of time. I do have a full in-depth course called The VBA Pro Course. This course is my step-by-step training system for learning macros & VBA. I will be sending you more info on it in the coming days.
Please let me know if you have any questions. Thanks again Krish! 🙂
Joe,
I am new to VB and trying to learn it fast as I have a few specific things I want to automate. Your videos are the best I have found and have taught me a lot so I signed up for more. Thank you. I have researched each specific function but am not able to get them all to play together.
I have a task tracking spreadsheet with a list of tasks for subordinates in the left column with the next few columns in each row depicting how long those tasks should take and who they have been assigned to. Row 1 contains “=IF(H$8<=$B$4, "Overdue", " ")" where "$B$4" contains the Today() function. This keeps the formula relative to the column it resides in and compares with todays date and mark if overdue if appropriate. Rows 2 through 6 contain the formulas that will look down each column (1 column per day) and total up the time spent by each individual on that day with rows 7 and 8 depicting the day of the week and the date respectively.
Starting with column G, rows 9 through last used (and to the right column used) I need the "Due" macro to place "Due" in the active cell and then offset 1 column and paste the value in row 1 of the offset column to the right of the active cell ("Due") and then the same for all columns in the rest of that active row. This allows conditional formatting to compare the date in cell 8 of that column to todays date and place the word "Overdue" and highlight it red if that day has passed.
I have placed buttons on the sheet that allow me to activate the macro in the selected cell. The "Due" button needs to perform as described above so the formula in the top 8 rows work. This is the one I am having trouble with as I have syntax that will perform the task but is fixed to the cells I recorded and is not dynamic and moveable with the selected cell.
Here is that syntax I recorded:
ActiveCell.FormulaR1C1 = "Due"
range("I1").Select ' change to select cell 1 in active column instead of fixed
Selection.Copy
range("I102:IT102").Select ' change this to current row to paste to instead of fixed
ActiveSheet.Paste
The other button I have works and places "Completed" in the active cell (conditional formatting highlights it green) and erases all formulas to the end of the row so the conditional formatting no longer highlights the cells in the row after comparing to the date in cell 8 of that column. I am toying with the possibility of doing the conditional formatting with a macro as well but for now I need to learn one issue at a time. Here is the syntax for "Completed":
ActiveCell.FormulaR1C1 = "Completed"
ActiveCell.Offset(, 1).Resize(1, 250).ClearContents
I know this is a lot of info without getting to see it but I hope I explained it well enough.
Thanks,
Jerry
Hi Jerry,
Thanks for the nice feedback. For this dynamic referencing we can use the ActiveCell.Row and ActiveCell.Column properties to return the row and column number of the active cell.
In the code below I used this in the Cells property to reference row 1 and the same column as the active cell. The Cells property has two parameters for Row and Column number. Cells(RowIndex, ColumnIndex)
Cells(1, ActiveCell.Column).Copy Range("I" & ActiveCell.Row & ":IT" & ActiveCell.Row).PasteSpecialWe can also use this notation in the Range property to reference a range. In the second line above I joined together the string of text to reference the range from column I to IT in the row of the active cell. We can use the ampersand symbol (&) to join the text and numbers together to create the range reference.
I’m not sure if this will solve your exact need, but it should help get you started.
Thanks again!
Hi, I am a total VBA novice and this video really helped me to understand where to start from. thanks a lot!
Thanks DBD! 🙂
Lovely way to teach. I am also very new to VBA coding. Normally I would record a macro but this is the real deal. I would like to learn more.
Thanks,
Thank you Vivek! I’m excited to hear you are going beyond the macro recorder. VBA has an amazing amount of power to help automate processes and create applications.
Hi, i have a question on Excel
How can i SUM() multiple IF(A1>5,”10″,””) formulas ?? I get only zero !!!
Can you help me with this ?
Hi Andres,
That formula is returning text for the 10 instead of a number. When numbers are wrapped in quotation marks, Excel will interpret them as text instead of numbers. To return a number, just remove the quotation marks.
IF(A1>5,10,””)
The Sum formula will then see the results as numbers and return a result if all values in the range are numbers or blanks.
I hope that helps.
Just simple and easy to understand for a new person
Thanks Dipankar!
Hi,
First i have to say that i am very impressed with all of your videos.
I watched the pivot videos and now i want to focus on VBA. i am trying to download the second and the third video but with no success.
Hi Shiran,
Thanks for the nice feedback. I’m happy to hear you are learning so much about Excel. It looks like you are now receiving the emails with the links to the other videos. They are not available for download, but you can watch them online as much as you’d like.
Thanks again!
Urs videos are great, thanks man! Really helpful.
The only thing I would recommend is get rid off using .select in vBA code.. (ofc with exception of few case where it is necessary) in my point of view it is “old fashioned” way of vba coding – you do not have to “call” the objects by selecting them.
Hi Jakub,
Thanks for your comment! You are absolutely right. I use Select in the training because it is something you are familiar with if you have used the macro recorder. In some of my other videos I explain that you do not have to use Select, and it can be inefficient. I will consider adding that to this video as well. Here is an article I wrote about avoiding the Select method. Thanks again!
Jon
Excellent presentation. Happy to enrolled.
Thank you Loannis! Happy to have you here. 🙂
Nice work Jon! Wish I watched your Video earlier, never the less waiting eagerly for the second video of yours. Mean while, can you please help me on this query if possible – Every week I get a new set of data, I have a macro which I use to get a list of unique values from Range B:B and paste it in to a different sheet. And then I use that list to filter for each value one by one, copy the relevant data for the filtered value and move it to a different sheet. This I do for almost 50 different values manually. In short I want to split consolidated data into different workbooks, where the Value on which I have to filter is a variable. Is this something which can be automated through VBA?
Hi Karthik,
Thanks for your nice comment. Yes, that can absolutely be automated with VBA by looping through the list of unique values, then performing the actions to filter and copy/paste. I explain more about loops in the next 2 videos. I hope that helps get you started. Thanks again!
Hello,
Thanks Jon. I just finished watching the video and it felt good typing the code in the vba editor. Eagerly looking forward to videos 2 and 3!
best regards ✌.
Thanks Tettey! I’m excited to hear that you like typing macros. Me too! 🙂
Hello sir,
I wanted to know how I could feed user defined values obtained from text boxes inside a Range object…
eg:
Private Sub CommandButton1_Click()
Dim a, b, c As String
Worksheets(“Sheet1”).Select
a = TextBox1.Text// starting cell
b = TextBox2.Text//ending cell
c = TextBox3.Text//value
Range(a, b).Value = c
End Sub
How to enroll for complete course for VBA.
Hi Karan,
I will be sending you an email on how to enroll in the course in just a few days. Thanks!
Hi Jon!
Fist, I would like to say that your no.1 video I just watched was great. Really good explanation! I am looking forward to receive next one.
Than, I have one question for you.
I would like to create a VBA function that would automatically copy formulas. For example if I fill cell A1 (A1 is just not blank no matter what is inside) than I would like that function to copy formulas from one range of cells to another. In my case just in a row bellow.
Can you help me with that?
Best regards
Thank you Matej! Checkout my video series on how to copy & paste with VBA. I think that will help get you started.
Hello Jon,
first let me thank you for all this amazing work you are doing by helping others and being so helpful and ready to help others! It’s quiet admirable! I would like to make a question how to automate something that I’m intending to do. I have created a database in excel with some data for a list of clients when two columns are the nr of celullar and email. Also, I have created with mailing in word a text that fils automatically with some data from specifik data(mergie fileds). Maybe, this I’m asking need more than excel, but I was wondering if there is any way so I can send automatically emails with the text created by mailings for each row to the email that is in the column of those rows?! I need to reduce the time and the process of copying the text and sending it manually with regular email?
Thanks for your consideration and looking forward to the second and third video and mostly to the webinar.
Have a great weekend!!!
Gerti
Hi Gerti,
Yes, this is definitely possible. I recommend checking out some of the resources from Ron de Bruin’s site for automating emails with Excel and Outlook. I hope that helps.
Very nice. Pls let me know how to learn the complete vba course. Thanks
how to download the the three videos?
Hi Mohammad,
The videos are not available for download at this time. Thanks!
Hi Jon,
I hope you are doing well,
I need your assistance and help please in one of my VBA coding and will summariezed with below:
1- I have one excel sheet with below snapshot and it’s include a merge data and I can’t do any analysis to this data.
Landmark In Out Report Generated by smascoadmin” @ 28/01/2017 16:36:47
Description This report displays in and out times from a Landmark for the selected asset.
Report Date/Time Range 28/01/2017 07:00 – 28/01/2017 14:00
Group ALL
Filter None
No Landmark Description Approximate Duration (hh:mm:ss) First Time in Proximity Last Time in Proximity
Asset : BJB 1307
Vehicle didn’t visit any landmark during the selected period.
Asset : BJB 1308
1 Al Nahda DC Distribution Center 13:25:01 27/01/2017 20:18:32 28/01/2017 09:43:33
2 Evening – 1260283 Customer Location 0:01:01 28/01/2017 09:42:32 28/01/2017 09:43:33
3 Al Nahda DC Distribution Center 1:22:25 28/01/2017 09:46:08 28/01/2017 11:08:33
4 Evening – 1260283 Customer Location 1:21:52 28/01/2017 09:46:08 28/01/2017 11:08:00
5 Evening – 1260283 Customer Location 28/01/2017 11:10:56 Still inside the Landmark
6 Al Nahda DC Distribution Center 28/01/2017 11:10:56 Still inside the Landmark
2- The solution to copy the data to another excel sheet with removing the merge
No Landmark Description Approximate Duration (hh:mm:ss) First Time in Proximity Last Time in Proximity
Asset : BJB 1308 Al Nahda DC Distribution Center 13:25:01 27/01/2017 20:18:32 28/01/2017 09:43:33
Asset : BJB 1309 Evening – 1260283 Customer Location 0:01:01 28/01/2017 09:42:32 28/01/2017 09:43:33
Asset : BJB 1310 Al Nahda DC Distribution Center 1:22:25 28/01/2017 09:46:08 28/01/2017 11:08:33
Asset : BJB 1311 Evening – 1260283 Customer Location 1:21:52 28/01/2017 09:46:08 28/01/2017 11:08:00
Asset : BJB 1312 Evening – 1260283 Customer Location 28/01/2017 11:10:56 Still inside the Landmark
Asset : BJB 1313 Al Nahda DC Distribution Center 28/01/2017 11:10:56 Still inside the Landmark
Please advise me
Hi Jon,
Thank you for a great start to learning how to code macros, this has only made me more eager to learn how I can make my workday easier!
My most tedious task at work that I would like to automate is to organize lines of data pulled from my company’s property management system (hospitality).
Let me try and describe it for you. Every week we download a large set of customer segment data from our Events and Group system to track potential business. This data needs to be arranged by month and date – once done I copy the data over into an other workbook that aligns it with our business on the books. (Structure of report: columns represent customer group segments and rows the date of the potential business).
The problem at hand is that I not only do I need to manually insert a row between each month, but several dates are missing. Which dates that are missing continuously fluctuates depending on what business leads we have gotten since last week/what leads might have gone lost. This needs to be corrected by inserting the missing dates. Where a missing date has been inserted the blank space in the columns needs to be filled with a 0, to represent the zero business from that market segment.
This is such a simple task that take some crazy amount of unnecessary time, especially when doing it weekly for 4 properties. My biggest problem is knowing how I would code this, with the data being so inconsistent. I cannot insert a row at the same row number as next week this might be filled with an additional lead.
Question is if there even is a solution to my problem?
Thank you for this great webpage and tutorial!
Kind regards from Austria
Hi Gabriella,
My apologies for not responding sooner. Yes, this is definitely possible to add rows and fill dates with a macro. We could use a loop to loop through each cell in the range and check if the date is the same or greater than the last cell by one day. If not, then insert a row and add the last date + 1 day. Of course there is a bit of code involved here, but it is definitely possible.
Thanks again!
I am new to this and have tried to learn this stuff in over the years but never was able to dedicate time required. I am making efforts to learn and getting older will make it more challenging. Regardless, I will try to spend the required time and research to learn how I can create forms and programs that will improve my tasks in human resources. I am hoping I can learn through messages and comments and videos you provide. I need help! I have researched many websites. Hope you are the one that will help excel me along.
Hi Pam,
Thanks for the nice feedback. It’s great to hear that you are learning more about VBA. I also have an online course called the VBA Pro Course that has structured step-by-step video training. It is designed to help you learn much quicker and in an organized manner. I hope that helps. Thanks again!
Hi Jon,
Thanks for your videos, I’ve just subscribed and I am ready for my VBA learning journey. I’ve had a go at writing a code for copy and pasting filtered data and pasting on another sheet at the end of the existing data. I’ve got this far;
Sub Copy_Fltrd_CPiH_HPE()
Sheets(“Copy PAP into here”).Select
ActiveSheet.range(“$A$1:$P$66″).AutoFilter Field:=13, Criteria1:=”#N/A”
Sheets(“copy pap into here”).range(“A1:C100”).SpecialCells(xlCellTypeVisible).Copy _
Sheets(“HPE”).range(“C” & Rows.Count).End(xlUp).Offset (1)
It works fine however I’d like the pasted cells to match the destination formatting of the cells above, is this possible?
Many thanks in advance.
Lisa
Hi Lisa,
Thanks for subscribing. Yes, that is definitely possible. For this you can copy and paste the formatting of the cells above using the PasteSpecial method.
You will want to put that ABOVE the line of code that does the copy and paste. I hope that helps.
Hey Jon,
This video helps me a lot.
Nice and simple instructions ! Looking forward to the next lesson(s).
Thanks Andre! I will be sending it in just a few days. 🙂
Jon, thank you for these videos.. I anxiously await the next one. I have fallen in love with Excel and can’t wait to learn more. I am at a point in my life where VBA knowledge would help my career so much.. I know the very basics of VBA coding, and can’t wait to learn the rest thru your videos offering…
Hey Kristina,
Sorry to not get back to you sooner here. I am way behind on blog comments. Thanks again for joining The VBA Pro Course. I’m really happy to see that you are learning so much about Excel & VBA. I know these VBA skills will help your career as much as they have helped mine. Please let me know if you have any questions. Thanks again!
Hi, I have landed in a position where everything is done manually in Excel and it’s driving me nuts because I know there are more efficient ways to do things.
The first thing I want to automate is to split a worksheet into multiple worksheets based on “headings” that are located above sets of data.
I receive this on a monthly basis and then cut and paste subsets of data into separate worksheets and rename the worksheets accordingly. Then I distribute it to other people whi in turn incorporate their portions into their spreadsheets. Very time consuming and easy to make mistakes.
Hi Rista,
That is definitely possible with macros & VBA. This is a very common task that can be boring and repetitive. Congrats on the new job though. I’m sure you will be able to help the company automate a lot of processes and save time in the future.
This video was very simple.I look forward to learning more.
Hello,
Thanks for the first video still waiting for 2 and 3 video!
I wanted to request you is there a macro possibility to match negative and positive figure for same client as many time we have lot of client pay the amount but as cashier don’t get time to match all of them so we have to match them manually and delete .so is there any macro that it could make the process faster?
many thanks in advance
mathew
Thanks Mathew! Yes, this is definitely possible with a macro. I don’t have any specific examples, but it can be done with VBA. You can also use a pivot table to compare lists of data. There are many ways to accomplish this task in Excel. 🙂
Hi Jon, hope u will read this comment. My problem its a bit different, and hope i can explain this.
we take an exaple;
You have to pay bill with 200$, in your debit card you have only 180$ and in credit card you have much more than 200$, but you want to pay with debit couse of less bank provision, now what we need here, to pay this 200$ we need 180$ from debit card and another 20$ to take automaticly from credit card. Hope u understand me.
best regards
Fitim from Kosovo
Hi Jon!
Thanks for the video. It was a good start for learning macro, and i’m looking forward to the next one 🙂
I’m often using slicers, and i would like to automate the action of saving each slicer into .pdf’s with part of the name of the .pdf file including slicenr/name.
Is this possible?
I have been able to make a macro that saves the workbook/sheet into .pdf, but haven’t been able to automate this thru the slicer, and with the slicername in the filename.
If you have any idea i would be very happy 🙂
PS! I’m sorry for my bad english 🙂
Petter
Hi Petter,
Yes, I believe this is possible. Here is some code to create a list of each slicer in the workbook. You can use the loop in this example to loop through each slicer and then export the slicer to the pdf.
I hope that helps get you started.
Hi Jon – I have been trying to learn Macros for quite a time and now I am glad for the fact that I finally get to the right place 🙂 The first video in the series was a masterpiece. It has helped me a lot in getting started and now I am looking forward to the other 2 parts of the series.
I would be glad if you can tell me how to get access to the other 2 parts.
Thanks in advance 🙂
Regards,
Fasi
Thank you Fasi! I really appreciate your kind words and am happy to hear you are learning a lot. I will be sending video #2 in just a few days, so be on the lookout for an email from me. Thanks again!
Very good explanation of the relationship between properties and methods. I have written macros before but your instructions are the first to explain in simple terms the relationship. I am very interested in writing a macro that will allow me to combine multiple workbooks with multiple sheets.
Thank you Vicki! I’m happy to hear that you are learning more about VBA. I do cover that topic of combining multiple sheets in my VBA Pro Course. I will send you more info on that. Thanks again!
What an interesting topic.
I will love to automate my clinics statistic reports.
I have about 50 clinics submitting a monthly report containing 6 sheets of excel documents. I need to consolidate each of the 6 sheets from all the clinics into a single report
Hi Sunmonu,
That is definitely possible with macros & VBA.
Very nicely done. The hierarchy part was very useful. I need to automate some analytics I am doing on numbers. I have data coming in at certain predetermined intervals for a day (one row per time interval) and can download that for the entire day. Then I need to look at certain times of the day and evaluate the ma for that row and evaluate if each cell in that row is within certain tolerance of the Max value. If it is off the max value by a certain % then I need to identify the header cell for that column and copy that cell and add additional text to the cell into a new worksheet.
I have data in 5 cells, but cell 2 has multiple lines eg. 8 lines (the values in the cell2 from 1 to >30 I need to copy all 5 cells to a new sheet, but paste them as 8 lines. Can this be automated?
Hi Martha,
Yes, this can be done with VBA. We can use the Split and/or Instr functions to find the line breaks (VbLf), and then output each line into multiple rows. I don’t have any specific articles with code examples yet, but it can be done. I hope that helps.
Great introductory tutorial. Looking forward to see how actions can be iterated from several worksheets. I’m trying to copy a variable range of cells from 12 tabs (one per month) into a single full year worksheet. The idea is to append all the rows from each month into a single full year worksheet. I guess the tricky part will be to adjust the range in each worksheet since the number of rows will be different; then each range copied need to be appended to the next empty row in the full year worksheet.
Very useful, thanks so much. I’m starting but I need to automate some financial data, but my main problem is to create an new variable (sell and buy) using the color of the font (I already have the RGB code). Hope you can do something for my case.
Thanks in advance.
Great Easy to follow
HI
Thank you
perfect
ahmad.
I I’m new to excel macro, now i need to create a entry form for my project, I mentioned below what what the project,
i need to enter a customer name and id with the payment of 1st due for month of January and i need add the payment of 2nd installment for the month of February, and so on for 12 months. Also i need new customer name also, sorry if my grammar is poor.
thanks
ssv
Hi good day i really love your video easy to follow and as a programmer who is fascinated with vba i always want to learn new ways and more about it daily
I have a little challenge that I hope I can get some help with
I recently imported a text file to excel and there are certain date from the file that i want to place into lets say sheet 3 of that excel file, I know how to copy and paste using excel but the file that is imported is very large and i have to do this task daily and if i reference a cell number to get that data today lets say today the information is in cell b5 tomorrow that same data that i need would and could well be in b30
How can i get the data i need daily without having to re-code my vba everyday
Is it possible that I can use the heading or title in order to grab the data from the needed cell ?
Thank you in Advance
Hi Aaiyah,
Great question! There are several ways to do this in VBA. We can use the Range.Find method or WorksheetFunction.Match() to find a value and return the cell address or row number of teh matching value.
Interested in advanced excel skills and shortcuts. Also vba.
Just trying to upgrade my Excel skills and learn VBA.
Great Video, thanks. I would like to automate creation of pivot tables.
Thank you Catherine! 🙂