2017-02-15 23 views
0

私はプレーンなVBAマクロコードに変換し、式をからlastrowにコピーするこの記録済みマクロを持っています。R1C1で記録されたVLookUp式をA1参照を使用してVBA式に変換する

"=VLOOKUP(RC[-22],'[test.xlsx]Sheet3'!C5:C6,2,0)" ' this is from another workbook 

VBAに変換しようとしています。

dim wbSLW as workbook 
dim wbSLWDir as String 

wbSLWDir = "C\Documents\test.xlsx" 'this is not the constant directory or file name 
set wbSLW = workbooks.open(wbSLWDir) 

ThisWorkbook.Activate 
With Thisworkbook.Sheets(1) 
    .Range("AE2") = "=VLOOKUP(I2," & wbSLW & "!E:F,2,0)" ' error line 
end with 

私が変換したら、Object does not support this property or methodを返します。

+1

RC [-22]をI2に変換して、残りの部分を同じ方法で変換する必要があります。ちょうど同じ原理に従ってください。 – SJR

+0

@SJRだから私はすべてのコードを変換する必要がありますか? – ramedju

+0

実際、私はR3uKがあなたのためにやったと思います。 – SJR

答えて

1

クリーン記録されたコード:そう、RC[-22] = I2

初期セル

With ActiveSheet.Range("AE2") 
    .FormulaR1C1 = "=VLOOKUP(RC[-22],Temp!C[-30]:C[-29],2,0)" 
    .AutoFill Destination:=Range("AE2:AE182"), Type:=xlFillDefault 
End With 'ActiveSheet 

RC[-22]は22列あなたがここにAE2を式
を持っていたセルの前にあるセルを指しています

C[-30]およびC[-29]はそれぞれ、formulを持つセルの前の30および29列の列を指します
ここ AE2のでC[-30] = AC[-29] = B

変更式:

Sheets(1).Range(perNum & 2).Formula = "=VLOOKUP(I2,Temp!A:B,2,0)" 

又は式変換なし:アクティブなシート名があると仮定すると

Sheets(1).Range(perNum & 2).FormulaR1C1 = "=VLOOKUP(RC[-22],Temp!C[-30]:C[-29],2,0)" 
+0

詳細な回答ありがとうございます。それは私がExcelで 'VLookUp'関数をもっと理解できるようにします。 :) – ramedju

+2

@ramedju:編集を参照してください! VBAで使用するために数式を変換する必要はありませんでした。 ;) – R3uK

+0

@ramedju:まず、 '.Formula'が不足していて、それを手動でビルドすると、Workbook.FullName(path + name)とシート名の両方が必要になることがわかります!それを試してもうまくいかない場合は、新しい質問を投稿してください。新しい質問のリンクを貼って私を突きつけてください! ;) – R3uK

1

Sheet1

ActiveCell.Value = Application.WorksheetFunction.VLookup(Sheets("Sheet1").Range("I2"), Sheets("Temp").Range("A:B"), 2, 0) 
+0

これで、数式ではなく値が得られます! – R3uK

3

(Excel 2010)の[設定/数式]に移動し、R1C1参照スタイルのチェックを外して、R1C1形式を使用しないように設定を変更します。マクロを再入力して編集します。あなたは "RC"の参照を持つべきではありませんが、そうするならば、 "RC"を持つすべての参照を "I2"と同じスタイルに変更してください。

関連する問題