2014-10-08 3 views
0

У меня есть имя столбца как «Validation», но номер столбца меняется. Как я могу найти этот столбец по имени и принять его как диапазон.VBA, чтобы добавить формулу excel, выбрав имя столбца как диапазон

В настоящее время используется макрос, который я использую, который проверяет столбец M и добавляет формулу для всех ячеек, если столбец M не пуст.

Мой новый ожидание,

  1. См столбец M, если имеет значение ячейки как «BLM» & «CFG», затем добавить формулу первенствует , находя имя столбца «Validation» для тех, кто имеет что значение ячейки как «BLM» & «CFG», пропустите, если пусто.
  2. Изменить все эти формулы в ячейку значения

Sub test_macro() 
    Dim sFormula As String 
    Dim rng As Range 
    Dim ws2 As Worksheet 

    sFormula = "=IF(IFERROR(VLOOKUP(RC[-11],'Service ID Master List'!C[-11],1,0),""Fail"")=""Fail"",""Check SESE_ID"","""")&IF(IFERROR(VLOOKUP(RC[-9],Rules!C[-13],1,0),""Fail"")=""Fail"","" | Check SESE_RULE"","""")&IF(TRIM(RC[-5])="""","""",IF(IFERROR(VLOOKUP(RC[-5],Rules!C[-13],1,0),""Fail"")=""Fail"","" | Check SESE_RULE_ALT"",""""))&IF(RC[-7]=""TBD"","" | Check SEPY_ACCT_CAT"","""")" 

    Set ws2 = ActiveSheet 

    With ws2 
     Set rng = .Range("M2") 
     Set rng = .Range(rng, .Cells(.Rows.Count, rng.Column).End(xlUp)) 
    End With 
    rng.SpecialCells(xlCellTypeConstants).Offset(0, 1).FormulaR1C1 = sFormula 
    'changing formulas in values 
    Columns("N:N").Select 
    Selection.Copy 
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
     :=False, Transpose:=False 
    Range("N1").Select 
    Application.CutCopyMode = False 
End Sub 

ответ

0

Вы можете использовать Найти метод найти свой диапазон.
Что-то вроде:

Edit1:

'~~> get the position of 'Validation' column and set rng variable 
With ws2 
    Dim valCol As Long 
    valCol = .Rows("1:1").Find("Validation").Column '~~> change to suit 
    Set rng = .Range("M2") 
    Set rng = .Range(rng, .Cells(.Rows.Count, rng.Column).End(xlUp)) 
End With 

Затем проверьте Колонка M записи:

Dim cel As Range 
For Each cel In Rng 
    If cel = "BLM" Or cel = "CFG" Then 
     With ws2.Cells(cel.Row, valCol) 
      .Formula = sFormula 
      .Value = .Value 
     End With 
    End If 
Next 

Это предполагает, что столбец с Validation как имя всегда существует и формула правильная.
Также check this out to see ways of avoiding select which will greatly improve coding.

+0

Не совсем, но я могу что-то сделать с этим, возможно, я не упомянул об этом очень хорошо, спасибо в любом случае. – Chito

Смежные вопросы