0

私は一日中これを理解しようとしています。これは私が達成する必要があるものです:

  1. GetFile を使用して、ブックを開かずに多数のブックを選択します。
  2. 選択したブックのセル A2 をループ内で個別に参照ブックと比較します。
  3. 選択したワークブックのセル A2 が、列 A に含まれる参照ワークブック内の数値の数値と等しい場合、一致した参照ワークブック セルの対応するセル内の列 B のテキストを、選択したワークブックの M2 にコピー/貼り付けします。

複雑に聞こえますが、デモンストレーションさせてください。文字は列名を表します。

選択したワークブック A2=12 M2= ""

参考ワークブック A2=12 B2=牛乳、たんぱく質

望ましい結果:
選択したワークブック A2=12 M2=牛乳、タンパク質

これまでのところ、これは私が持っているコードです:

Sub Click() 
Dim rCell As Range, vVal1, vVal2 
Dim wbCheck As Workbook 

For Each rCell In Workbooks("2.xls").Worksheets(1).Range("A1:C100") 
    vVal1 = rCell 
    vVal2 = ThisWorkbook.Worksheets(1).Range(rCell.Address) 
    If IsNumeric(vVal1) And IsNumeric(vVal1) Then 
        If vVal1 = vVal2 Then 
            rCell.Interior.ColorIndex = 3 
        ElseIf vVal1 < > vVal2 Then  
        End If 
    End If 
Next rCell 
End Sub   
4

2 に答える 2

0

私は自分の質問を解決しました。答えは、VLookup を使用することでした。

=VLOOKUP(I2, 'C:\Desktop\Merge[ISReference.xlsx]参照'!B2:G1923, 6, FALSE)

誰も私にこれを提案しなかったことに驚いています。その単純さを考えると、この関数を、フォーム上の FSO ファイル ダイアログ ピッカーを介して実行し、Vlookup を使用して外部ワークブックにリンクするために作成したコードに組み込むことができました。

クレイジーな反復ループの代わりに関数を埋め込む適切な方向性を示してくれた Siddarth に感謝します。

于 2013-01-24T15:29:36.330 に答える
0

なぜこれに VBA コードが必要なのですか?

これは、Excel の数式を使用して実現できます。

これを貼り付けてM2コピーします

=IF(A2='C:\[Ref.xlsx]Sheet1'!A2,'C:\[Ref.xlsx]Sheet1'!B2,"")

私の前提(適宜変更してください)

  1. 参照ファイル名は Ref.xlsx です
  2. Sheet1参照ファイルからデータを取得しています
  3. Ref.xlsx は C:

編集

VBA を使いたい場合でも、これを行うことができます。

Sub Sample()
    Application.Calculation = xlCalculationManual

    ThisWorkbook.Sheets("Sheet1").Range("M2").Formula = _
    "=IF(A2='C:\[Sample.xlsx]Sheet1'!A2,'C:\[Sample.xlsx]Sheet1'!B2,"""")"

    Application.Calculation = xlCalculationAutomatic
End Sub

上記の式またはコードは、最初のポイントで述べたことのために有益ですUsing GetFile select a number of workbooks without opening them.。ファイルを開きたくない場合は、formulaまたはformula in VBAを使用する方法です:)

于 2013-01-23T06:06:18.060 に答える