VBA通过选择列名作为范围来添加excel公式

时间:2014-10-08 01:17:40

标签: vba

我的列名为"验证"但是列号不断变化。如何通过名称找到此列并将其作为范围。

目前以下是我正在使用的宏,它会检查列M并在列M不为空的情况下为所有单元格添加公式。

我的新期望是,

  1. 参见M栏,如果单元格值为" BLM" &安培; " CFG"然后添加excel 公式通过查找列名称"验证"对于那些有 该单元格值为" BLM" &安培; " CFG",如果空白则跳过。
  2. 将所有这些公式更改为单元格值

  3. 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
    

1 个答案:

答案 0 :(得分: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