1

I have written a macro that to return specific values in one cell based on a vlookup of the concatenated values of two other cells. This macro may need to run in every other column for 30 columns. Is there a way that I can loop this, so that I don't have to type out 30 variations?

Here is the section of code that I am referencing:

Cells.Select
ActiveWorkbook.Worksheets("Vendor Request").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Vendor Request").Sort.SortFields.Add Key:=Range( _
    "F2:F" & LR2), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
    xlSortNormal
With ActiveWorkbook.Worksheets("Vendor Request").Sort
    .SetRange Range("A1:BK" & LR2)
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With
If Cells(2, 6).Value <> "" Then
Range("G2").Select
ActiveCell.FormulaR1C1 = _
    "=CONCATENATE(""Example:  "",IF(ISNA(VLOOKUP(CONCATENATE(RC[-4],""; "",RC[-1]),'Sample Data'!C[-6]:C[-2],5,FALSE)),"""",VLOOKUP(CONCATENATE(RC[-4],""; "",RC[-1]),'Sample Data'!C[-6]:C[-2],5,FALSE)))"
If Cells(3, 6).Value <> "" Then
Range("G2").Select
Selection.AutoFill Destination:=Range("G2:G" & Range("F" & Rows.Count).End(xlUp).Row)
Else
End If
Columns("G:G").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Else
End If

Thanks in advance!

Edit: Finally got it working. Here is what I ended up with:

Cells.Select
    ActiveWorkbook.Worksheets("Vendor Request").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Vendor Request").Sort.SortFields.Add Key:=Columns( _
        j - 1), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Vendor Request").Sort
        .SetRange Range("A1:BK" & LR2)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Dim LRj As Long
    With Sheets("Vendor Request")
    LRj = .Cells(.Rows.Count, j - 1).End(xlUp).Row
    End With
    If Cells(2, j - 1).Value <> "" Then
    Cells(2, j).Select
    ActiveCell.FormulaR1C1 = _
    "=CONCATENATE(""Example:  "",IF(ISNA(VLOOKUP(CONCATENATE(c3,""; "",C[-1]),'Sample Data'!c1:c6,5,FALSE)),"""",VLOOKUP(CONCATENATE(c3,""; "",C[-1]),'Sample Data'!c1:c6,5,FALSE)))"
    If Cells(3, j - 1).Value <> "" Then
    Cells(2, j).Select
    Selection.AutoFill Destination:=Range(Cells(2, j), Cells(LRj, j))
    Else
    End If
    Columns(j).Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Else
    End If
    Next j
user955289
  • 171
  • 2
  • 6
  • 19

1 Answers1

1

you can change ...Range("G2:G... to Range("G2:AK and Columns("G:G" to Columns("G:AK"

or Range(Cells(2,j),Cells(...,j)) inside a for loop

Aprillion
  • 21,510
  • 5
  • 55
  • 89
  • I only need it to run in every other column. I was hoping for a way to loop it through. I'm trying to use something like "For j = 6 To 62 Step 2" and then replace all instances of "G" with j. Does this sound right? – user955289 Apr 27 '12 at 15:32