我在名为MyCol
的代码变量中获取了在userform中选择的每月的列数。例如,十月在列U中,十一月在列V.我有一个我记录的公式,选择的月份是它的一部分,但它是一个问题,因为RC格式具有特定的引用,我的变量是一个整数。
我希望公式是动态的。
这是公式(列U表示选择的月份):
= IFNA(IF(VLOOKUP(AA2,工作表Sheet F:!女,1,0)= AA2,U2,0),0)
这是代码的相关部分:
Dim MonthName As String
Dim myCol As Integer
MonthName = ListMonth.Value
With MainWB.Worksheets("sheet2")
.Activate
.Range("L1:W1").Find(MonthName, , xlValues, xlWhole).Activate
End With
ActiveCell.Select
myCol = Selection.Column
Range("AB2").Select
ActiveCell.FormulaR1C1 = _
"=IFNA(IF(VLOOKUP(RC[-1],sheet1!C[-22],1,0)=RC[-1],RC[" & myCol & "],0),0)"
Range("AB2").AutoFill Destination:=Range("AB2:AB" & MLR), Type:=xlFillDefault
答案 0 :(得分:3)
替换你的:
Range("AB2").Select
ActiveCell.FormulaR1C1 = _
"=IFNA(IF(VLOOKUP(RC[-1],sheet1!C[-22],1,0)=RC[-1],RC[" & myCol & "],0),0)"
使用:
Range("AB2").FormulaR1C1 = _
"=IFNA(IF(VLOOKUP(RC[-1],sheet1!C[-22],1,0)=RC[-1],RC[-" & Range("AB2").Column - myCol & "],0),0)"
但是,如果您希望让代码更快地运行,并且还要避免所有不必要的Activate
,ActiveCell
,Select
,请尝试以下代码:
Dim FindRng As Range
MonthName = ListMonth.Value
With MainWB.Worksheets("sheet2")
Set FindRng = .Range("L1:W1").Find(MonthName, , xlValues, xlWhole)
End With
If Not FindRng Is Nothing Then
myCol = FindRng.Column
Else ' find was not successful finding the month name
MsgBox "Unable to find " & MonthName, vbCritical
Exit Sub
End If
Range("AB2").FormulaR1C1 = _
"=IFNA(IF(VLOOKUP(RC[-1],sheet1!C[-22],1,0)=RC[-1],RC[-" & Range("AB2").Column - myCol & "],0),0)"