Monday, January 4, 2010

http://www.techonthenet.com/excel/index.php



Excel: Rearrange data in an export of raw data in Excel 2003/XP/2000/97

--------------------------------------------------------------------------------

Question: In Excel 2003/XP/2000/97, I have a spreadsheet that contains an export of some raw data. However, the data needs to be rearranged as follows:

If cell M? displays "Contract Information" then copy and paste cells O-S into cell M of the same row
If cell K? displays "Location" then cut and paste cells K-AD into cell T of the same row. Then copy and paste the previous row's cells K-S down to K into this row
Copy down the category name in Column L replacing "Loads"

Answer: Let's take a look at an example.

Download Excel spreadsheet (as demonstrated below)



In this spreadsheet, we've created a macro called RearrangeData. You can run the macro by selecting Macro > Macros under the Tools menu. Then highlighting the macro called RearrangeData and clicking on the Run button.

Once the macro has run, the spreadsheet will look as follows:



You can press Alt-F11 to view the VBA code.



Macro Code:
The macro code looks like this:

Sub RearrangeData()

Dim LRow As Integer
Dim LCategory As String

LRow = 1
LCategory = ""

'Move through records until an empty cell is found in column A
While IsEmpty(Range("A" & CStr(LRow)).Value) = False

'If cell M? displays "Contract Information" then copy and paste
'cells O-S into cell M of the same row
If Range("M" & CStr(LRow)).Value = "Contract Information" Then
Range("O" & LRow & ":S" & LRow).Select
Selection.Copy
Range("M" & LRow).Select
ActiveSheet.Paste
End If

'If cell K? displays "Location" then cut and paste cells K-AD into
'cell T of the same row. Then copy and paste the previous row's
'cells K-S down to K into this row
If Range("K" & CStr(LRow)).Value = "Location" Then
'Cut and paste cells K-AD into cell T of the same row
Range("K" & LRow & ":AD" & LRow).Select
Selection.Cut
Range("T" & LRow).Select
ActiveSheet.Paste

'Copy and paste the previous row's cells K-S down to K
'into this row
Range("K" & LRow - 1 & ":S" & LRow - 1).Select
Selection.Copy
Range("K" & LRow).Select
ActiveSheet.Paste

End If

'Copy down the category name in Column L replacing "Loads"
If Range("L" & CStr(LRow)).Value = "Loads" Then
Range("L" & CStr(LRow)).Value = LCategory
'Next category name
Else
LCategory = Range("L" & CStr(LRow)).Value
End If

LRow = LRow + 1
Wend

End Sub

No comments:

Post a Comment