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

Bookにリストを1シート作り、その他はお客様ごとの請求書で、リストシートからの品目を検索値にして請求書から文字列を拾い、リストシートのセルに請求書から抽出した品目のカウント数と(各請求書シートすべてのtotal数です)、さらにその品の個数も別セルに抽出したいのです。

品目を各請求書シートからカウントするところまでは、Countifを使いなんとか出来たのですが、
その個数を引っ張り出せません。
VLookupを使っていますが、セルは「#N/A」となります。

式は
Sheets("リスト").Cells(2+i-2,8).Value=Application.VLookup(a,Worksheets(sNo).Range("B13:B27"),5,False)
です。"リスト"シートのH列に表示されているのはすべて「#N/A」になってしまいます。

ちなみに、
a=Sheets("リスト").Cells(2+i-2,3).Value
で品目を検索値にして
cnt=WorksheetsFunction.Countif(Worksheets(sNo).Range("B13:B27),a)
で、品目のカウント数は取れたのですが。。

VLookupではない方が良いのか…どなたか教えて頂けないでしょうか。


宣言は
Dim i As Long 'ループ用変数
Dim a As Variant 'リストの品目
Dim G As Long 'G列のカウント値
Dim cnt As Long '請求書の品目をカウントする値を入れる変数
Dim sNo As Long 'Bookのシート数
です。

A 回答 (6件)

No.5ママチャリです。


>その辺が違うような気がします。
・・・とは、どの辺でしょうか?見つからなかった場合の処理ですかね?何らかの結果が返ってくるようになったようですが、どんな感じで希望通りではないのですか?その辺を書いて頂かないと、これ以上の回答は期待できないと思います。頑張って、自己解決してください。
    • good
    • 0
この回答へのお礼

ママチャリ様こんばんは。

先ほど何とか希望の処理が出来るようになりました。変数の位置を変えてみたり、If文追加などもしましたが結果、一番悩んでいた部分の原因はexcel上で、セルが統合されていたりなど、書式設定等、基本的なところが多かったような気がします。。f^^;

>VLookupメソッドは、WorksheetsFunctionオブジェクトなので、WorksheetsFunction.VLookupと書くべきです。

こちらも、変更致しました。
最初は「WorksheetsFunction」つけていたのですが、エラーばかりで前に進まず、何が悪くて何が良いのか訳が分からない状態になっていました。

そんな中具体的にご指摘下さって、基本に立ち返るというか、冷静になるきっかけになり、とても助かりました。

ありがとうございます!!

お礼日時:2016/03/12 21:12

>Application.VLookup(a,Worksheets(sNo).Range("B13:B27"),5,False)



VLookupメソッドは、WorksheetsFunctionオブジェクトなので、WorksheetsFunction.VLookupと書くべきです。

Range("B13:B27") って、1列しかないですよね?その5列目を返すことはできないと思います。Range("B13:F27")のように、5列以上の列範囲が必要です。

検索値が見つからなかった場合、VLookupメソッドはエラーになると思うのですが、On Errorでスキップ等しているのでしょうか?私の勘違いであれば、ごめんなさい。
    • good
    • 0
この回答へのお礼

そうなんです。
その辺が違うような気がします。
値を変えるとエラー以外のものが出てくるようになったんです。

でも希望の値は出て来てくれないんですけど。。

お礼日時:2016/03/09 07:27

こんばんは!



>VLookupではない方が良いのか…

VBAであればFINDメソッドが使えますが
具体的なレイアウトとやりたいことがイマイチ判らないので
的確なアドバイスが出来なくてごめんなさい。

※ No.2さんが仰っているように
もう少しコードを提示してもらえると
ちょっとはお役に立てるかもしれません。m(_ _)m
    • good
    • 0
この回答へのお礼

解決致しました!
ありがとうございますm(__)m

お礼日時:2016/03/12 21:14

一度、試しに


Dim a As Variant 'リストの品目

Dim a As String
または
Dim a As Long
で試してみては如何でしょうか。
    • good
    • 0
この回答へのお礼

やってみました!

でもダメでした。。

お礼日時:2016/03/09 07:23

断片的で無くSub~End Subまで記載しないと、見てる人に言いたい事が伝わりませんが・・・。

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

解決致しました!
ありがとうございますm(__)m

お礼日時:2016/03/12 21:14

Sheets("リスト").Cells(2+i-2,8).Value=Application.VLookup(a,Worksheets(sNo).Range("B13:B27"),5,False)



Worksheets(sNo)は"B13:B27"間を検索するシート名を指定しないとイケナイのに
Dim sNo As Long 'Bookのシート数としているカラ。

Dim sNo As String '検索するシート名
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!

sNo は、WorksheetsのNoをカウントする変数なんです。
この変数を使って、For文でBook内の全シートを確認してます。

これで、品目のカウントは取れたのですが(Countifで)、数量が取れなくって困っています。。

お礼日時:2016/03/08 17:55

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