我的列名为"验证"但是列号不断变化。如何通过名称找到此列并将其作为范围。
目前以下是我正在使用的宏,它会检查列M并在列M不为空的情况下为所有单元格添加公式。
我的新期望是,
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 :(得分: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。