1

私はExcelVBAの完全な初心者です。

以下は、シートの列を反復処理し、左側の列の値を参照して値を入力し、同じブック内の別のシートを参照して、対応する正しい値を見つける必要があるコードです。

ループを使用したWhileので、このマクロを列の各セルに適用できますVLOOKUP(ルックアップ値のみが変更され、左側の列を示す変数である必要があります):

Dim result As String
Dim sheet As Worksheet
Dim rownum As Integer
Dim iterator As Integer
Dim lookup_value As String
Dim vlookupString1 As String

Set sheet = ActiveWorkbook.Sheets("datasheet")
rownum = sheet.Range("A1").End(xlDown).Row
Set iterator = 3

While iterator < rownum

lookup = "M" & iterator
vlookup1String = "=VLOOKUP(" & lookup & ",'GICS Sub-industry codes'!$A$2:$B$155,2,FALSE)"
With ActiveSheet.Cells
       Range("N" & iterator).Select
       Selection.Value = vlookup1String
End With
iterator = iterator + 1

End While

「期待されるか、選択するか、サブ...」と言っているときに、エラー@endが発生します。

1)構文エラーが発生しましたか?
2)私のアプローチは正しいですか。VLOOKUPS私は、で設計するこの文字列アプローチを他の1つの場所でのみ観察しました。それが最も適しているようでした。

4

1 に答える 1

3

コードの修正ループに
は使用しWendないでください。End While

よりクリーンな代替案
しかし、以下のように、1回のショットで全範囲を埋めることができます

  1. End(xlup)下から見下ろすよりも、下から範囲を「ループアップ」する方が良いですEnd(xlDown)(スペースに依存しません)
  2. SelectVBAで使用する必要はほとんどありません

詳細説明

  1. rng1シートデータシートの列Aで最後に使用されたセル からA3までの作業範囲を設定します
  2. rng1.Offset(0, Range("N1").Column - 1)数式の挿入に列N(つまり、オフセットA x 14-1)を使用するために、オフセットrng1(列A)を13列と言います
  3. マクロレコーダーを使用して、この部分の列Nに必要なコードを取得しました"=VLOOKUP(RC[-1],'GICS Sub-industry codes'!R2C1:R155C2,2,FALSE)"
  4. 話すR1C1RC[-1]は、同じ行のセルを参照することを意味しますが、左側に1列あります。したがって、N3では、式はとして開始されます=VLOOKUP(M4..)。したがって、N30では、式は `= VLOOKUP(M30 ..)などとして開始されます。

提案されたコード

Sub QuickFill()
Dim ws As Worksheet
Dim rng1 As Range
Set ws = Sheets("datasheet")
Set rng1 = ws.Range(ws.[a3], ws.Cells(Rows.Count, "A").End(xlUp))
rng1.Offset(0, Range("N1").Column - 1).FormulaR1C1 = "=VLOOKUP(RC[-1],'GICS Sub-industry codes'!R2C1:R155C2,2,FALSE)"
End Sub
于 2012-10-22T11:16:44.317 に答える