I wrote a macro in Excel to parse out some data into different worksheets. I'm not the most skilled coder so it's probably not the most efficient code but it works when I run it for a small number of units (say 100), however when I try to run it from my
entire dataset (~100k rows) it crashes almost immediately. Also, my colleague can run the macro fine on his PC, suggesting there might be an issue related to Excel 2016 for Mac. I have looked over the forums but have not see a resolution that helps me resolve
the issue.
The macro basically goes row by row looking at the data and based on the values from a few cells it will copy the data into one of 5 worksheets.
Any help would be greatly appreciated.
Here is my code:
Sub parseUnits()
Application.ScreenUpdating =
False
Dim dataTotal As Long
Dim dataRowAsLong
Dim corRowAsLong
Dim ingRowAsLong
Dim addDealerRowAsLong
Dim unknownRowAsLong
Dim invalidRowAsLong
Dim hvpidAsLong
Dim prodDealerAsInteger
Dim modelNumAsString
Dim serialNumAsString
Dim eSNAsString
Dim firstCharAsString
Dim corSheetAsString
Dim ingSheetAsString
Worksheets("Data").Activate
dataTotal = Range("A" & Rows.Count).End(xlUp).Row
corSheet = "corImport"
ingSheet = "ingImport"
corRow = 2
ingRow = 2
addDealerRow = 2
unknownRow = 2
invalidRow = 2
For dataRow = 2To dataTotal
modelNum = Range("B" & dataRow).Value
hvpid = Range("D" & dataRow).Value
prodDealer = Range("E" & dataRow).Value
serialNum = Range("F" & dataRow).Value
eSN = Range("G" & dataRow).Value
firstChar = Left$(eSN, 1)
If firstChar = "I"Then
Sheets("Invalid SN").Range("A" & invalidRow).Value = hvpid
Sheets("Invalid SN").Range("B" & invalidRow).Value = modelNum
Sheets("Invalid SN").Range("C" & invalidRow).Value = serialNum
invalidRow = invalidRow + 1
ElseIf firstChar = "U"Then
Sheets("Unknown ESN").Range("A" & unknownRow).Value = hvpid
Sheets("Unknown ESN").Range("B" & unknownRow).Value = modelNum
Sheets("Unknown ESN").Range("C" & unknownRow).Value = serialNum
unknownRow = unknownRow + 1
ElseIf firstChar = "n"And prodDealer <> -1
Then
Sheets(ingSheet).Range("A" & ingRow).Value = hvpid
Sheets(ingSheet).Range("B" & ingRow).Value = modelNum
Sheets(ingSheet).Range("C" & ingRow).Value = serialNum
Sheets(ingSheet).Range("D" & ingRow).Value = modelNum & "|" & serialNum & "|" & hvpid
Sheets(ingSheet).Range("E" & ingRow).Value = Range("H" & dataRow).Value
Sheets(ingSheet).Range("F" & ingRow).Value = Range("G" & dataRow).Value
Sheets(ingSheet).Range("G" & ingRow).Value = Range("I" & dataRow).Value
ingRow = ingRow + 1
ElseIf firstChar = "9"And prodDealer <> -1
Then
Sheets(corSheet).Range("A" & corRow).Value = hvpid
Sheets(corSheet).Range("B" & corRow).Value = modelNum
Sheets(corSheet).Range("C" & corRow).Value = serialNum
Sheets(corSheet).Range("D" & corRow).Value = modelNum & "|" & serialNum & "|" & hvpid
Sheets(corSheet).Range("E" & corRow).Value = Range("H" & dataRow).Value
Sheets(corSheet).Range("F" & corRow).Value = Range("G" & dataRow).Value
Sheets(corSheet).Range("G" & corRow).Value = Range("I" & dataRow).Value
corRow = corRow + 1
Else
Sheets("addDealer").Range("A" & addDealerRow).Value = hvpid
Sheets("addDealer").Range("B" & addDealerRow).Value = modelNum
Sheets("addDealer").Range("C" & addDealerRow).Value = serialNum
Sheets("addDealer").Range("D" & addDealerRow).Value = modelNum & "|" & serialNum & "|" & hvpid
Sheets("addDealer").Range("E" & addDealerRow).Value = Range("H" & dataRow).Value
Sheets("addDealer").Range("F" & addDealerRow).Value = Range("G" & dataRow).Value
Sheets("addDealer").Range("G" & addDealerRow).Value = Range("I" & dataRow).Value
addDealerRow = addDealerRow + 1
EndIf
Next dataRow
Application.ScreenUpdating =
True
MsgBox ("Processed " & dataRow - 2 & " out of " & dataTotal - 1 & " units.")
EndSub