It looks like you can make some common rookie mistakes here (all is well, we all did it).
VBA Example with Explanatory Explanations
TIP: Do not try to use Select or Copy. Why use select when all you have to do is reference the cells themselves? For example, instead of using
Sheets("codes").Select Range("A5:A100").Select Selection.Copy Sheets("Sheet2").Select Range("B28").Select ActiveSheet.Paste
Just use
dim mySheet as Worksheet, myOtherSheet as Worksheet, myBook as Workbook 'Define your workbooks and worksheets as variables set myBook = Excel.ActiveWorkbook set mySheet = myBook.Sheets("codes") set myOtherSheet = myBook.Sheets("Sheet2") dim i as integer, j as integer 'Define a couple integer variables for counting j = 28 'This variable will keep track of which row we're on in Sheet2 (I'm assuming you want to start on line 28) for i = 5 to 100 'This is the beginning the the loop which will repeat from 5 to 100 . . . if mySheet.Cells(i,1).value <> "" then ' . . . for each digit, it will check if the cell value is blank. If it isn't then it will . . . myOtherSheet.Cells(j,2).value = mySheet.Cells(i,1).value ' . . . Copy that value into the cell on Sheet2 in the row specified by our "j" variable. j = j + 1 'Then we add one to the "j" variable so the next time it copies, we will be on the next available row in Sheet2. end if next i 'This triggers the end of the loop and moves on to the next value of "i".
I did the same thing all the time when I was just starting, and it never works correctly. "Select" causes errors on the left and right. Use my code, read the comments, and everything will be all right. Quick WARNING: I do not have Excel on this computer, so I could not verify the code. If for some reason it doesnโt work, leave me a comment, and tomorrow I will fix it at work.
The above code will completely omit empty cells when copying data to a second sheet. If you want to enter specific text for empty cells (for example, "N / A"), you can use the following:
dim mySheet as Worksheet, myOtherSheet as Worksheet, myBook as Workbook 'Define your workbooks and worksheets as variables set myBook = Excel.ActiveWorkbook set mySheet = myBook.Sheets("codes") set myOtherSheet = myBook.Sheets("Sheet2") dim i as integer, j as integer 'Define a couple integer variables for counting j = 28 'This variable will keep track of which row we're on in Sheet2 (I'm assuming you want to start on line 28) for i = 5 to 100 'This is the beginning the the loop which will repeat from 5 to 100 . . . if mySheet.Cells(i,1).value <> "" then ' . . . for each digit, it will check if the cell value is blank. If it isn't then it will . . . myOtherSheet.Cells(j,2).value = mySheet.Cells(i,1).value ' . . . Copy that value into the cell on Sheet2 in the row specified by our "j" variable. else 'If the cell is blank, then . . . myOtherSheet.Cells(j,2).value = "N/A" ' . . . place the text "N/A" into the cell in row "j" in Sheet2. end if 'NOTICE we moved the "end if" statement up a line, so that it closes the "if" statement before the "j = j + 1" statement. _ This is because now we want to add one to the "j" variable (ie, move to the next available row in Sheet2) regardless of whether the cell in the "codes" sheet is blank or not. j = j + 1 'Then we add one to the "j" variable so the next time it copies, we will be on the next available row in Sheet2. next i 'This triggers the end of the loop and moves on to the next value of "i".