Excel Macro - using integers as cell referenc [Solved/Closed]

Report
-
 Andy May -
OK, I've written this and I'm having some trouble. I've put the comments in the code (preceded by ****) rather than giving you a summary here. I think it's easier to follow:

Sub Tester()

Dim a As Integer
Dim x As Integer
Dim y As Integer

**** a=5 - this is the equivalent of column "E"
a = 5

**** Count active columns and then rows. The totals will pin the ends of the ranges
' Count the number of data columns in the table
totalcolumns = ActiveSheet.UsedRange.Columns.Count
' Count the number of data rows in the table
totalrows = ActiveSheet.UsedRange.Rows.Count

**** y begins at column G, and x can begin anywhere. Y = Column number, X = Row number.
For y = 7 To totalcolumns
For x = 1 To totalrows

**** Everything that I do here fails, so I've actually just written this as simply as I could. a=5, x=ActiveRow and y=ActiveColumn. If specific text is found in cells in column E (a,x) then the values in column G (and beyond) should be overwritted with what I'm directing:
If Cell a,x = "Other Non-Billable Expenses" Then
Cell y,x = 0
Else
If Cell a,x = "NON-BILLABLE DIRECT COSTS" Then
Cell y,x = Cell y,x-5 + Cell y,x-4 + Cell y,x-3 + Cell y,x-2 + Cell y,x-1
Else
If Application.IsText(a, x) = "CONTRIBUTION" Then
Cell y,x = Cell y,x-10 - Cell y,x-2
Else
If Cell a,x = "Contribution %" Then
Cell y,x = (Cell y,x-1 / Cell y,x-17) * 100
Else
If Cell a,x = "Variance" Then
Cell y,x = Cell y,x-2 - Cell y,x-1
Else
If Cell a,x = "" Then
Cell y,x = ""
Else
End If
End If
End If
End If
End If
End If

****Once it has scanned the column E for the text I want and replaced the result in Column G with the value I want I need it to move to the next row (Next X), and once it has looped through to the last row (totalrows), I want it to start over at x=1 and go to the next y (Next Column, which would be H) unless y the last column (totalcolumns)
If x = totalrows Then
Next y
x = 1
Else
If y = totalcolumns Then
End Sub
Else
Next x
End If

End Sub

****Something is horribly wrong with the group of IF's. It definitely has something to do with trying to use the integer as a part of the cell reference, but I'm not exactly sure how that works. Usually I'm combing either a column or a row only. I'm in over my head on this one, and I'm hoping that someone may have a little help for me.

2 replies

Posts
4476
Registration date
Thursday January 28, 2010
Status
Contributor
Last seen
August 2, 2020
767
Andy
Few issues with you code
1. cell a, x is not correct
It needs to be
Cells(row, column)
like cells(3, "E") or cells(3,5)

The blocks of IF and FOR etc cannot be intersected.
2
Thank you

A few words of thanks would be greatly appreciated. Add comment

CCM 2942 users have said thank you to us this month

Posts
4476
Registration date
Thursday January 28, 2010
Status
Contributor
Last seen
August 2, 2020
767
Andy

For x ..

..
Next x

is a loop you dont have to say that if x=totalrow. it wll do that for you.

your if and else are causing issue and are not need
neither x=1 is needed

next x
next y

is all you need. For each value of y, it will executed the inner for loop.


Could you post a sample file at some share site like https://authentification.site and post link here.
Here's the file:
https://authentification.site/files/21587279/Example_for_Leanne_-_macro_test2.xls

I realized that with the loop as well and modified it. I also changed a few things with the coding (I started x aat row 28 so the IF statements weren't necessary). I can run this without the FOR / NEXT loops and it will work (but only for one cell at a time...). Everytime I put the loops back in I get various FOR / NEXT related errors.
You can see the 2nd macro in there, that one was just to test the statements without FOR / NEXT involved.

Thank you for your help. The file that's linked here also contains the data that should appear if the macro is working correctly.
I am on MS Excel 07, but I'm saving this as an xls book.
Posts
4476
Registration date
Thursday January 28, 2010
Status
Contributor
Last seen
August 2, 2020
767
You had missed End select. I used the data and had same result as you had for expected. Only difference of few items did not had 0 (like contractors). The macro did not produce it and you had it.

The error with the code is that the last lines should have been like this


End Select
Next x

Next y


For items that you dont have it here in case statements and have 0 in the sample sheet you can add one more case like this


Case "Other Revenue", "Gross REVENUE", "Cost of Sales", "Out of Pocket Expenses", "NET REVENUE", "Direct Labor Cost (Standard Costing)", "Contractors ", "BILLABLE DIRECT COSTS", "Gross Margin", "Gross Margin %", "New Business Direct Labor Cost", "New Business Expenses", "Non-Billable Direct Labor Cost", "Bad Debt Writeoff", "Target Contribution"

Cells(x, y) = 0


One more thing, CASE ELSE is the always the last case. It is default, if all cases fail then this will be true. You can entirely remove the case else also in which case there will be no default condition. So if you do add this new case in the select, make sure it appears before CASE ELSE
Fantastic! I'm getting an overflow error when it finishes, but I can instruct the user to ignore that.

Thank you for your help and prompt follow ups!
In addition to the above, here is the formula that I put in the spreadsheet as a temporary solution to the problem:

=IF($E29="Other Non-Billable Expenses",0,IF($E29="NON-BILLABLE DIRECT COSTS",M24+M25+M26+M27+M28, IF($E29="CONTRIBUTION",M19-M27,IF($E29="Contribution %",(M28/M12)*100,IF($E29="Variance",M27-M28,IF($E29="","",J29))))))

Subscribe To Our Newsletter!

The Best of CCM in Your Inbox

Subscribe To Our Newsletter!