- ベストアンサー
ExcelのVBAマクロ作成で他のExcelから条件つきでデータを取り込む方法
- 毎日の在庫データが記載されたファイル群の中から特定のデータのみを他のファイルの一つのシートに縦一列にして取り込む方法を教えてください。
- 在庫データは年ごとにファイルが分かれており、在庫データファイルは月ごとにシートが分かれています。
- 貼付け先ファイルには日付が入力されており、指定した在庫データファイルのシートから指定のデータを貼り付け先ファイルに入力する方法を教えてください。
- みんなの回答 (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月シートのデータ数に応じて書き換えます。 後は、この数式を下方向にコピーしてやれば、データが書き換わるはずです。
その他の回答 (2)
#1です。 #NAME?は、関数名が間違っているときに表示されるエラーです。 VLOOKUPのつづりを間違えていないでしょうか?ご確認ください。 検索範囲に空白があっても問題はありません。 データが見つからない場合は、#N/Aが返ります。
お礼
本当でした(汗) スペル間違いで修正したらちゃんと読みこめました…。 有難うございます!
#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列を、下方向にコピーしてやります。 これで、複数ファイルへの対応もできると思います。
お礼
こんなに早く答えて頂いて有難うございます。 vlookup関数というものがあったんですね…便利ですね! これで解決の見込みがついてきました。 ただ、アドバイス頂いたように試してみたところ、 「#NAME?」という風に表示されてしまいます。 自分なりに調べたところvlookup関数は空欄が範囲内になると エラーが出てしまうとあったのですが…。 月ごとに30日までだったり、31日までだったりするので 範囲内に空欄が入ってしまうのは避けられないと思うのです。 マクロなど使ってこのエラーを回避できる方法があれば教えて 下さい!