Defining destination Range
You can search for it in row 1 (right?).
This seemed to work ok:
Option Explicit
Sub MonthAndPivot()
Dim DataWks As Worksheet
Dim LastRow As Long
Dim LastCol As Long
Dim ExpBookMonthCell As Range
Dim StrToFind As String
StrToFind = "Expected Book Month"
Set DataWks = Worksheets("Data")
With DataWks
LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
With .Rows(1) 'is that where the are???
Set ExpBookMonthCell = .Rows(1).Find(what:=StrToFind, _
after:=.Cells(.Cells.Count), _
lookat:=xlWhole, _
searchorder:=xlByRows, _
searchdirection:=xlNext, _
MatchCase:=False)
End With
If ExpBookMonthCell Is Nothing Then
MsgBox StrToFind & " wasn't found--stopping"
Exit Sub
End If
.Columns(LastCol).Copy
.Columns(LastCol + 1).PasteSpecial _
Paste:=xlPasteFormats, _
Operation:=xlNone, _
SkipBlanks:=False, _
Transpose:=False
.Cells(1, LastCol + 1).Value = "Booked Month"
.Columns(LastCol + 1).AutoFit
'fixed a typo--I missed a dot in front of the second .cells()
.Range(.Cells(2, LastCol + 1), .Cells(LastRow, LastCol + 1)).Formula _
= "=text(" & .Cells(2, ExpBookMonthCell.Column).Address(0, 0) _
& ",""mmm"")"
End With
Application.Calculate
End Sub
Juan Correa wrote:
Thank you very much Dave. This worked like a charm. And your code is way
cleaner!
I do have a follow up question.
Looking at the code you provided, I see this bit:
.Range(.Cells(2, LastCol + 1), Cells(LastRow, LastCol + 1)).Formula =
"=text(w2,""mmm"")"
This formula is looking for the value of W2 ,converting it to Text in mmm
format and then copying that formula all the way down to the last row of
existing data on the worksheet. That is exactly what I need. My problem
comes because I'm not sure that the data to be looking at will always be in
column W.
I know that the information currently on column W will always be included
with the raw data and I know that it will alwasy be labeled the same way (Is
that the correct terminology?).
This column will always be labeled "Expected Book Month".
Is there a way that I can reference that column based on its label instead
of using the absolute reference? That way I can be sure that no matter where
the data is, the formula will always look for it in the right place.
Thanks again
Juan Correa
"Dave Peterson" wrote:
You can drop the .select's and .activate's and your code may be easier to
understand and update:
Option Explicit
Sub MonthAndPivot()
Dim DataWks As Worksheet
Dim LastRow As Long
Dim LastCol As Long
Set DataWks = Worksheets("Data")
With DataWks
LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
.Columns(LastCol).Copy
.Columns(LastCol + 1).PasteSpecial _
Paste:=xlPasteFormats, _
Operation:=xlNone, _
SkipBlanks:=False, _
Transpose:=False
.Cells(1, LastCol + 1).Value = "Booked Month"
.Columns(LastCol + 1).AutoFit
.Range(.Cells(2, LastCol + 1), Cells(LastRow, LastCol + 1)).Formula _
= "=text(w2,""mmm"")"
End With
Application.Calculate
End Sub
Juan Correa wrote:
Hello...
I'm working on a small macro for my boss.
Here is what I have so far:
Sub MonthAndPivot()
' Activate the Data Sheet before anything else
Sheets("Data").Activate
' Declarations
Dim LastRow As Long, LastCol As Long
LastRow = Range("A65536").End(xlUp).Row
LastCol = Range("IV1").End(xlToLeft).Column
' Create the "Booked Month" Column
Range("IV1").End(xlToLeft).Select
Selection.Copy
Range("IV1").End(xlToLeft).Offset(0, 1).Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone,
SkipBlanks:=False, Transpose:=False
ActiveCell.FormulaR1C1 = "Booked Month"
ActiveCell.EntireColumn.AutoFit
' Populate the Month Column with new Monts
Range("IV1").End(xlToLeft).Offset(1, 0).Select
ActiveCell.FormulaR1C1 = _
"=CHOOSE(MONTH(RC[-25]),""Jan"",""Feb"",""Mar"",""Apr"",""May"",""Jun"", ""Jul"",""Aug"",""Sep"",""Oct"",""Nov"",""Dec" ")"
Selection.AutoFill Destination:=Range("AL2:AL" & LastRow),
Type:=xlFillDefault
Calculate
End Sub
The part that is giving me headaches is the following:
Selection.AutoFill Destination:=Range("AL2:AL" & LastRow),
Type:=xlFillDefault
It works as it is, but I don't want to have the absolute references in there
because I'm not sure that the raw data will always have the same number of
columns.
Is there a way that I can set the Destination range in this particular case
without having the absolute references there?
thanks
Juan Correa
--
Dave Peterson
--
Dave Peterson
|