『売上データシート』の【C列】に入ってるコードを参照し『マスターシート』データの2列目の値を『売上データシート』の【AP列】に表示する。
というマクロを組みたいです。。
※マスターシートのデータはA1:I9までデータが入ってます
作ったマクロコードは
Dim i
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
With Worksheets("売上データ")
.Columns("AP") = WorksheetFunction.VLookup(.Columns("C"), Worksheets("マスター").Range("A1:F9"), 2, False)
Next
End With
End Sub
このマクロを実行すると、『NEXTに対するFORがありません』と出てきます。。
FORは入力しているつもりなのですが、どこがおかしいのかわかる方がおられましたらご教授ください。
それ以外にもいろいろ不都合なコードかも知れませんが、何卒よろしくお願いします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
こんにちは
>『NEXTに対するFORがありません』と出てきます。
ご提示のコードだと
For ~~
With ~~
Next
End With
という構造になってしまっているので、ForとWithが交錯しているため、正しく解釈できないためエラーになっています。
いわゆる入れ子の構造になっていれば問題ありません。
ついでながら、ループ内の処理もせっかくの変数「i」の意味がない処理の記述になっているので、意図とは異なる結果になるものと想像されます。
VLOOKUP関数の引数がエラーになるかどうかは試していないのでわかりませんが(ならないかも知れません)、少なくとも、第一引数は質問者様の意図通りには解釈されないことが想像されます。
ご回答ありがとうございます。
NextとEnd Withを反対にしたら参照数値が出てきました。
ですが、ご指摘いただいた通り、VlookUP関数エラーが出てしまい。。。
売上データシートの空白行のAP列全てに#N/Aと出てしまいました。。。
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row を、
For i = 2 To Cells(1, 1).End(xlDown).Row
に変えてみましたが、変わらず。。。
参考書とネットを駆使しながらマクロ組む初心者です。
入力されてるデータの最後までループする。というのはどうしたらいいのでしょうか><
頼ってばかりで申し訳ございませんが、ご教授いただけましたら助かります。
No.3
- 回答日時:
Vlookupの1番目の引数は検索したい値(検索対象のセル)なので、
>.Columns("C")
ってセル範囲広すぎなのでは?
For で順次やるってならもしかすると
.Cells(i , "C").Value
かな?
それに合わせる?と
>.Columns("AP")
も
.Cells(i , "AP").Value
なのかなぁ~?
エラー文については既出なので省きました。
ご回答ありがとうございます。
昨日も、orとandのおかしいところご教授いただいたと思います。
連日お世話になり恐縮です。。
今回も、ご指摘いただきました通り、cellsで範囲指定したらうまくいきました!!
No.4
- 回答日時:
No2です
>ご指摘いただいた通り、VlookUP関数エラーが出てしまい。。。
すでにNo3様がご指摘なさっている通りですが、「.Columns(~~)」は列全体のセル範囲を意味します。
ですので、
> .Columns("AP") = WorksheetFunction.VLookup(.Columns("C"),~~)
の場合、まず左辺はAP列全体を意味するので、右辺の結果をAP列全体に代入することを意味します。(全部のセルが同じ値になる)
ループをしているということから推測すると(多分)、
.Cells(i, "AP") または .Cells(i, "AP").Value
ではないのかと。
一方で、Vlookupの第一引数は「検索値」なので値(または単独セル)のはずですが、こちらも「.Columns("C")」とC列全体のセル範囲となっています。
https://docs.microsoft.com/ja-jp/office/vba/api/ …
このような指定をした場合にどうなるかは知りませんが、エラーになるか「セル範囲の最初のセルの値を採用する」かのどちらかだと想像します。
いずれにしろ、これは意図した内容とは異なりますよね?
勝手に推測するところ、
.Cells(i, "C") または .Cells(i, "C").Value
ではないのでしょうか。
ご回答ありがとうございます。
列全体から、セルに絞る事により、うまくいきました!
また、分かりやすい説明もありがとうございます。
参考書だけでは分かりにくく(汗)、こういった補足説明などしていただけると勉強になりますし、理解して次のマクロに挑戦できそうです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- Visual Basic(VBA) 複数シートの複数列に入力されているデータを重複なしで抽出するVBAを作りたいです。 9 2022/06/17 10:33
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) 2つのシートの任意のセルの番号が一致したら、一致した行をコピーする VBA 2 2023/06/19 20:48
- Visual Basic(VBA) 抽出結果を別シートに貼り付ける 2 2022/07/09 22:59
- Visual Basic(VBA) 集計シートA列のコードと一致する右に並んだシート名(コード)の3行目から10行目をコピーして貼り付け 4 2022/08/18 15:24
- Excel(エクセル) VBAのoffsetの動き方について教えてください 3 2022/11/25 23:36
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
エクセルVBA 配列からセルに「...
-
【Excel VBA】一番右端セルまで...
-
入力規則のリスト選択
-
EXCEL VBA 文中の書式ごと複写...
-
Excel UserForm の表示位置
-
VBA 複数条件の分岐処理の上手...
-
Excelで空白セル直前のセルデー...
-
Excel VBA IF文がうまく動作し...
-
DataGridViewのフォーカス遷移...
-
特定の色のついたセルを削除
-
ListBoxを選択したデータ編集② ...
-
エクセルの合計を自動で表示さ...
-
DataGridViewで指定したセルの...
-
【VBA】【ユーザーフォーム_Lis...
-
オーバーフローを回避する方法?
-
VBA deleteをクリックすると型...
-
Excelのセルから日付情報を取得...
-
Excel VBA 同じ処理を複数回行...
-
マクロの実行時エラー'1004'が...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
エクセルVBA 配列からセルに「...
-
VBA 複数条件の分岐処理の上手...
-
Excelで空白セル直前のセルデー...
-
Excel UserForm の表示位置
-
EXCEL VBA 文中の書式ごと複写...
-
特定の色のついたセルを削除
-
VBA にて、条件付き書式で背景...
-
VBAでユーザーフォームにセル値...
-
【VBA】写真の貼り付けコードが...
-
【Excel VBA】一番右端セルまで...
-
Excel VBAでCheckboxの名前を変...
-
エクセルの合計を自動で表示さ...
-
【VBA】【ユーザーフォーム_Lis...
-
VBA:日付を配列に入れ別セルに...
-
Excel VBA IF文がうまく動作し...
-
下記のマクロの説明(意味)を...
-
入力規則のリスト選択
-
C# DataGridViewで複数選択した...
-
関数の引数でrangeを指定したとき
おすすめ情報