2017-11-12 13 views
1

私はMyColという名前のコード変数に、ユーザーフォームで選択された月の列の番号を取得します。 10月は列Uに、11月はV列にあります。私は数式を記録しました。選択された月はその一部ですが、RC形式は特定の参照を持ち、変数は整数です。動的参照を使用してExcel式をVBAコードに変換する

私は数式が動的になりたいと思っています。

これは式(カラムUが選択された月を意味する)である:

= IFNA(IF(VLOOKUP(AA2、シート1 F:F、1,0)= AA2、U2,0) 、0)コードの一部ですrelavant

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 

答えて

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を避けるため、ActiveCellSelectしたい場合は、以下のコード試してみてください。

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)" 
+0

- 私は誤ってOPが回答を投稿した人と同じだと思ったので、私はこれにフラグを立てました。私はフラグを見ているモッズがそれを無視すると確信しています。 Sry、代わりに+1します。 :) – ashleedawg

+0

1日2回、ありがとうShai! –

関連する問題