Big Data World, Little Solution for Excel
October 26, 2013
One of our awesome customers came to us with an issue: They work with an outside vendor that requires a .xls file with a specific structure. This was a departure from the structure used for many years prior. The XLS data was being exported from a database on a monthly basis, and restructuring the database was not an option. To solve this problem we created an Excel VBA Script to shift the data one column to the right based on specific criteria.
We wanted to share our code as we thought this could be helpful for others. Of course, you’ll need to tweak it based on your data.
Hope you find it helpful!
Public intPos As Integer
Function FindString(strCheck As String, strFind As String) As Boolean
intPos = 0
intPos = InStr(strCheck, strFind)
FindString = intPos > 0 '//findstring equals TRUE if intPos greater than zero
End Function
Private Sub MoveTotals()
Dim booWorking As Boolean
Dim rng As Range
Dim itemName As String
Dim Position As Integer
Dim X As Integer
Dim element As Variant
Dim strStates(0 To 29) As String '//array of states to search for
strStates(0) = " IA"
strStates(1) = " MD"
strStates(2) = " NC"
strStates(3) = " GA"
strStates(4) = " FL"
strStates(5) = " MN"
strStates(6) = " DE"
strStates(7) = " MI"
strStates(8) = " ND"
strStates(9) = " TX"
strStates(10) = " AZ"
strStates(11) = " CA"
strStates(12) = " AL"
strStates(13) = " IL"
strStates(14) = " CO"
strStates(15) = " WA"
strStates(16) = " KS"
strStates(17) = " OK"
strStates(18) = " NY"
strStates(19) = " VA"
strStates(20) = " WI"
strStates(21) = " NJ"
strStates(22) = " PA"
strStates(23) = " OH"
strStates(24) = " MO"
strStates(25) = " AR"
strStates(26) = " NV"
strStates(27) = " SD"
strStates(28) = " MS"
Set rng = Cells.SpecialCells(xlCellTypeLastCell)
Set rng = rng.EntireRow.Range("C1") '//select the column
booWorking = True
Do While booWorking '//Stays TRUE while there is data to be read
For Each Cell In rng.Cells
itemName = Cell.Text '//gets the data in each cell and puts it in a string
X = 0
For Each element In strStates '//compares all of the states against the string
If FindString(LCase(itemName), LCase(element)) Then '//checks for matching characters
Position = InStr(itemName, element)
Position = Position + 2
If Position = Len(itemName) Then '//if it has matching characters and its at the end of the string, move it over
rng.Offset(0, 1).Value = rng.Value
rng.Value = ""
End If
End If
Next element
If (itemName) = "EL CAJON CA" Then
rng.Offset(0, 1).Value = rng.Value
rng.Value = ""
End If
If (itemName) = "OMAHA NE" Then
rng.Offset(0, 1).Value = rng.Value
rng.Value = ""
End If
If (itemName) = "ELKHORN NE" Then
rng.Offset(0, 1).Value = rng.Value
rng.Value = ""
End If
If (itemName) = "NEMAHA NE" Then
rng.Offset(0, 1).Value = rng.Value
rng.Value = ""
End If
If (itemName) = "ST PAUL NE" Then
rng.Offset(0, 1).Value = rng.Value
rng.Value = ""
End If
If rng.Row = 1 Then booWorking = False
If rng.Row > 1 Then Set rng = rng.Offset(-1)
Next Cell
Loop
End Sub
Post your comment