【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集

毎日の在庫データが記載されたファイル群の中から特定のデータのみを他のファイル(貼付け先ファイル)の一つのシートに縦一列にして取り込みたいのですがどうすればよいのでしょう?

具体的には…
・在庫データは年ごとにファイルが分かれている(ファイル名「在庫2003年.xls」など)

・在庫データファイルは月ごとにシートが分かれている(シート名「2003年04月」など)

・シートの中のA列に「日付」(上記のシートなら2003/4/1から2003/4/30まで)、D列に「製品A在庫数」、F列に「製品B在庫数」が入力されており他の列にも様々なデータが入力されている。

・貼付け先ファイルはA列に日付(2000/1/1~2006/12/10)が入力されている。

この状況で、例えば2003年4月と指定してマクロを実行すると、指定の在庫データファイルのシートから「製品A在庫数」と「製品B在庫数」を貼り付け先ファイルの、日付に対応したB列、C列の部分に入力してくれるようにしたいのですが、VBAの記述の仕方がわかりません。どうすればよいのでしょう?

お願いします!

A 回答 (3件)

マクロを使わなくても、vlookup関数を使えば実現できます。


ただ、ファイルの大きさにもよりますが、かなり重い処理になってしまうと思います。

2003年4月に対応する、日付のB列に

=vlookup(A1, [在庫2003年.xls]2003年04月!A$1:D$1000, 4)

C列には

=vlookup(A1, [在庫2003年.xls]2003年04月!A$1:F$1000, 6)

と入力します。
上記「A1」は日付の記入されているセルのアドレスに書き換えてください。
また、A$1:D$1000およびA$1:F$1000の最後の「1000」は、2003年04月シートのデータ数に応じて書き換えます。
後は、この数式を下方向にコピーしてやれば、データが書き換わるはずです。
    • good
    • 0
この回答へのお礼

こんなに早く答えて頂いて有難うございます。

vlookup関数というものがあったんですね…便利ですね!
これで解決の見込みがついてきました。
ただ、アドバイス頂いたように試してみたところ、
「#NAME?」という風に表示されてしまいます。

自分なりに調べたところvlookup関数は空欄が範囲内になると
エラーが出てしまうとあったのですが…。
月ごとに30日までだったり、31日までだったりするので
範囲内に空欄が入ってしまうのは避けられないと思うのです。

マクロなど使ってこのエラーを回避できる方法があれば教えて
下さい!

お礼日時:2006/12/12 11:34

#1です。


#NAME?は、関数名が間違っているときに表示されるエラーです。
VLOOKUPのつづりを間違えていないでしょうか?ご確認ください。

検索範囲に空白があっても問題はありません。
データが見つからない場合は、#N/Aが返ります。
    • good
    • 0
この回答へのお礼

本当でした(汗)

スペル間違いで修正したらちゃんと読みこめました…。
有難うございます!

お礼日時:2006/12/12 16:22

#1です。



さらに、複数ファイルに対応することも考えてみました。
まず、H列にファイル名、I列にシート名を作ります。

H列
="在庫" & YEAR(A1) & "年.xls"

I列
=YEAR(A1) & "年" & TEXT(MONTH(A1), "00") & "月"

例によってA1は適切なセルのアドレスに書き換えてください。
続いて、先ほどのvlookupの参照シートを、上記文字列を利用して書き換えます。

B列
=VLOOKUP(A1, INDIRECT("["& H1 & "]" & I1 & "!A1:D1000"), 4)

C列
=VLOOKUP(A1, INDIRECT("["& H1 & "]" & I1 & "!A1:F1000"), 6)

そして、B・C・H・I列を、下方向にコピーしてやります。
これで、複数ファイルへの対応もできると思います。
    • good
    • 0

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


おすすめ情報