プロが教える店舗&オフィスのセキュリティ対策術

『売上データシート』の【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件)

とりあえず、Next と End Withの順番を逆にすべし。

    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
NextとEnd Withを反対にしたら参照数値が出てきました。
ただ・・・さらなる問題が出てきましたが・・・><

お礼日時:2020/09/09 12:06

こんにちは



>『NEXTに対するFORがありません』と出てきます。
ご提示のコードだと

 For ~~
  With ~~

  Next
 End With

という構造になってしまっているので、ForとWithが交錯しているため、正しく解釈できないためエラーになっています。
いわゆる入れ子の構造になっていれば問題ありません。

ついでながら、ループ内の処理もせっかくの変数「i」の意味がない処理の記述になっているので、意図とは異なる結果になるものと想像されます。
VLOOKUP関数の引数がエラーになるかどうかは試していないのでわかりませんが(ならないかも知れません)、少なくとも、第一引数は質問者様の意図通りには解釈されないことが想像されます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
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
に変えてみましたが、変わらず。。。

参考書とネットを駆使しながらマクロ組む初心者です。
入力されてるデータの最後までループする。というのはどうしたらいいのでしょうか><

頼ってばかりで申し訳ございませんが、ご教授いただけましたら助かります。

お礼日時:2020/09/09 12:11

Vlookupの1番目の引数は検索したい値(検索対象のセル)なので、


>.Columns("C")
ってセル範囲広すぎなのでは?
For で順次やるってならもしかすると
.Cells(i , "C").Value
かな?

それに合わせる?と
>.Columns("AP")

.Cells(i , "AP").Value
なのかなぁ~?

エラー文については既出なので省きました。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
昨日も、orとandのおかしいところご教授いただいたと思います。
連日お世話になり恐縮です。。

今回も、ご指摘いただきました通り、cellsで範囲指定したらうまくいきました!!

お礼日時:2020/09/09 13:27

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
ではないのでしょうか。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
列全体から、セルに絞る事により、うまくいきました!
また、分かりやすい説明もありがとうございます。
参考書だけでは分かりにくく(汗)、こういった補足説明などしていただけると勉強になりますし、理解して次のマクロに挑戦できそうです。

お礼日時:2020/09/09 13:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!