ExcelのVBAマクロ作成で他のExcelから条件つきでデータを取り込む方法

このQ&Aのポイント
  • 毎日の在庫データが記載されたファイル群の中から特定のデータのみを他のファイルの一つのシートに縦一列にして取り込む方法を教えてください。
  • 在庫データは年ごとにファイルが分かれており、在庫データファイルは月ごとにシートが分かれています。
  • 貼付け先ファイルには日付が入力されており、指定した在庫データファイルのシートから指定のデータを貼り付け先ファイルに入力する方法を教えてください。
回答を見る
  • ベストアンサー

ExcelのVBAマクロ作成で他のExcelから条件つきでデータを取り込みたい

毎日の在庫データが記載されたファイル群の中から特定のデータのみを他のファイル(貼付け先ファイル)の一つのシートに縦一列にして取り込みたいのですがどうすればよいのでしょう? 具体的には… ・在庫データは年ごとにファイルが分かれている(ファイル名「在庫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の記述の仕方がわかりません。どうすればよいのでしょう? お願いします!

質問者が選んだベストアンサー

  • ベストアンサー
noname#62235
noname#62235
回答No.1

マクロを使わなくても、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月シートのデータ数に応じて書き換えます。 後は、この数式を下方向にコピーしてやれば、データが書き換わるはずです。

teru5000
質問者

お礼

こんなに早く答えて頂いて有難うございます。 vlookup関数というものがあったんですね…便利ですね! これで解決の見込みがついてきました。 ただ、アドバイス頂いたように試してみたところ、 「#NAME?」という風に表示されてしまいます。 自分なりに調べたところvlookup関数は空欄が範囲内になると エラーが出てしまうとあったのですが…。 月ごとに30日までだったり、31日までだったりするので 範囲内に空欄が入ってしまうのは避けられないと思うのです。 マクロなど使ってこのエラーを回避できる方法があれば教えて 下さい!

その他の回答 (2)

noname#62235
noname#62235
回答No.3

#1です。 #NAME?は、関数名が間違っているときに表示されるエラーです。 VLOOKUPのつづりを間違えていないでしょうか?ご確認ください。 検索範囲に空白があっても問題はありません。 データが見つからない場合は、#N/Aが返ります。

teru5000
質問者

お礼

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

noname#62235
noname#62235
回答No.2

#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列を、下方向にコピーしてやります。 これで、複数ファイルへの対応もできると思います。

関連するQ&A

  • エクセルマクロ:別のブックから該当するデータをコピー

    Book1のSheet1、A列に日付、B列に対応するデータがあります。 Book2のSheet1A1セルに入力された日付と一致するBook1Sheet1B列の値を、Book2のB1セルに値貼り付けしたいのですが、どのように記述すればよろしいでしょうか。 宜しくお願いいたします。

  • エクセル2000(マクロ)を使っていくつかの処理を一度にしたい・・・

    A列に下記の例のようなデータがあり、件数は毎日変わります。 マクロに登録したいのは (1)B列にはA列の最終行まで、(例えば)1、2と繰り返し入力させたい (2)B列に2のデータが入っているものだけを抽出し、抽出したA列のデータだけをコピーし、別のシートに貼り付けたい というところまでを一つのマクロで処理させたいのですが、うまくいきません。 A列のデータ数は必ず偶数で、数字のみで出てきています。貼付け先は日々のデータを月ごとに表にしていくため、毎日変わります。 ※土日祝日分はデータがでてきませんが、項目には記載がありますので、土日祝日は飛ばさなければいけないようになっています。 別シートは行の項目が日付で、列に抽出したデータを入れるようなレイアウトになっています。 A列   B列 1    1 1    2 2    1 0    2 10    1 2    2 13    1 2    2 ちなみに私が取得するデータはA列のデータだけなので、B列に入れるデータは1、2でなくてもなんでも大丈夫です。また処理や他にいい考え方等があれば教えてください。 宜しくお願いします。

  • ExcelデータをTxtファイルへ貼り付けるマクロ?について

    ExcelのデータでA列(日付データ)、C列(名前)、E列(電話番号)とある会員の電話番号を管理しているデータがあります。毎回このデータをテキストファイルに値貼付けしているのですが、マクロで作成できないでしょうか? このデータは毎回会員数が違うので、データが入力されている行までを選択してテキストファイルへ値貼付けできればありがたいです。よろしくお願いします。

  • エクセルのマクロについて質問です。

    エクセルのマクロについて質問です。 マクロを発動した時に、あるセルに入力してある数値を参照し、その行のX列目に数値を張り付けるものを作成しようとしています。 例えば シート「1」の A1に日付を入力 B1にある数字を入力 シート「2」の A列にA1→1~A31→31の日付が入力されている時 マクロ発動時にシート「1」A1の日付と一致する シート「2」のB列にシート「1」のB1の値を貼り付け ↑たとえばシート「1」のA1が1日でB1が500だった場合 シート「2」の1日(A1)と同じ行でB列(B1に500を 貼り付けるものです。 かなり下手な説明だと自覚しておりますが、解読できる方 どうかご教授ねがいます。

  • 条件のあったシートへデータを転記するマクロ

    よろしくお願いします。 ブック内にシート名でマスターシートと在庫日報入力シートの2つがあります。在庫日報シートのA1に日付、A列3行目以降に商品コード、B列3行目以降に各商品名、F列3行目以降に各商品の在庫数量が入っており、毎日更新されます。マスターシートには縦A列3行目以降に日付が入っており、また横1行目(A1,B1,C1....)に各商品名が百以上記載されています。今まで、以下のマクロで在庫日報入力シートの在庫数量をマスターシートの対応するセルに転記していました。(縦の日付を検索し、横の商品名を検索し対応する場所に在庫数量を転記) Private Sub CommandButton1_Click() Application.DisplayStatusBar = True Dim LastR, idxR As Long, trgR, trgC If MsgBox("日付は正しいですか", vbQuestion + vbOKCancel) = vbOK Then With Worksheets("在庫日報入力") LastR = .Range("A65536").End(xlUp).Row trgR = Application.Match(.Cells(1, 1), Worksheets("マスター").Range("A:A"), 0) For idxR = LastR To 3 Step -1 trgC = Application.Match(.Cells(idxR, 1), Worksheets("マスター").Range("1:1"), 0) If IsNumeric(trgR) And IsNumeric(trgC) Then Worksheets("マスター").Cells(trgR, trgC + 1) = .Cells(idxR, 6) Else .Cells(idxR, 1).Interior.ColorIndex = 3 End If Application.StatusBar = "マスターシートに転記中・・・進行状況 " & idxR & "" Next idxR End With Application.StatusBar = False MsgBox "終了しました。(処理件数=" & LastR- 3 & "件)", vbOKOnly: Exit Sub End If End Sub 今までこれで良かったのですが、今度、マスターシートを削除して、各商品名毎にシートを作成します。そのため、それぞれの商品名シートに在庫日報シートのデータを転記するように変えたいのです。商品名シートはそれぞれA列3行目以降に日付が、となりのB列に在庫数が入るようになっています。 在庫日報シートの各商品に対応した商品名シートを見つけて、そのA列から在庫日報と同じ日付を見つけて、その行のB列に在庫日報シートの在庫数量を転記する。というものです。商品名シートは百以上あり名前は文字列です。 今までのマクロは教えてgooで教えていただきながら作りました。すいませんが、またご教授をお願いします。

  • エクセルでマクロを作りたいのですが上手くいきません

    エクセルで会社で使うファイルを作成していますが、ファイルサイズが大きくなりすぎたので、こういうマクロが作れないかと調べていたのですが、やり方がわからないので困っています。 わからないのは、入力シートのA列にデータを入力して、シート2のB列に自動的に表示する ことを自動的にやってくれるマクロです。 今はIF関数をシート2に入力している状態ですが、セルに関数を入れる方法だとファイルサイズが大きくなりすぎてしまいます。 (IF関数をあらかじめ入力しておくセル数がとてもたくさんある為) なお、入力シートA列がブランクの場合は、シート2のB列には何も表示されないようにしたいです。 大変困っております。よろしくお願いします。 

  • 複数のエクセルファイルからのデータの抽出、一覧の作成について

    エクセルでのデータ整理の件で以下の質問があります。 以下のことができるようなマクロは組めませんでしょうか? 同一フォルダ(仮に、「C:\Sample」とします)に日々の業務データが 入力されたエクセルファイルが300個ほどあります。 各ファイル内にはSheetが5枚あり、各ファイルで入力されているデータは すべて同一のフォーマットです(Sheet毎では異なる。 例えば、Sheet1の1行A列には日付データ、Sheet2の2-5行B列には名前データ、といった感じです)。 これら300個のファイルから、これまでのデータを一覧にしたリストを 新規に作りたいと考えています(作成場所はどこでも構いません)。 例えばSheet1の、1列目にはファイル名、2列目には各ファイルSheet1の1行A列の日付データ、 3-6列目には各ファイルSheet2の2-5行B列の名前データ・・・、といった具合です。 (縦に日付が並び、1行内に各ファイルのデータが入力されている、 といった風にしたいと考えています。) 参考になりそうな過去の回答もありましたので、いくつか試してみたものの、 うまくいきませんでした(私はマクロは少しかじった程度です)。 一個ずつコピペでは非常に骨が折れ、難儀しております。 ややこしい質問ではございますが、ご回答お待ちしております。

  • 【エクセルVBA】条件に一致した項目の数を別シートへ表示

    はじめまして。VBA初心者です。 sheet1のA列に日付(一ヶ月分)、B列に製品名 sheet2のB2セル~AF1セルに日付、A2セル~A10セルに製品名 が入っています。 Sheet1の製品名の数を日付ごとにカウントして、その結果をSheet2の 各日付へ入力するVBAを作成したいのですが、うまくいきません。 分かり難い質問で、大変申し訳ありませんが、どなたか教えて下さい。 よろしくお願いします。

  • Excel VBA ある範囲内で検索条件に一致したデータを入力する

    Excel VBA ある範囲内で検索条件に一致したデータを入力する Excel2003を使用しています。 Sheet2で選択している範囲内のB列のデータがSheet1で選択している範囲内のB列のデータと一致していたら、そのA列のデータをSheet2のA列に入力するというマクロを作成中ですが、うまくいきません…。 Sheet1とSheet2の選択範囲については、このマクロを実行前に都度選択するようにし、A列のデータは日付、B列のデータは数値です。 以前、示していただいたサンプルを参考にコードを書き換えて試していますが、なかなか思うようにいかず、質問させていただきました。 よろしくお願いします。

  • エクセルマクロについて教えてください。

    製品リストというシートと、発注リストという2つのシートがあります。 製品リストのシートには、A列に製品名、B列に在庫が入力されています。 発注リストのシートには、A列に製品名、B列に値段、C列には発注状況が入力されます。(C列は発注完了と発注取消の2項目のリスト選択となっています) 発注リストのシートのC列に発注取消と入力された場合に、発注取消と入力された行にある製品名をを、製品リストシートのA列内を探し、同じ製品名の入力されたセルに色を付けたいです。 例えば 発注リストシートのA5に ココナッツミルク B5に 100円と入力されており、C5に 発注取消 と入力した場合に 製品リストシートのA列にある ココナッツミルク と書かれたセルを赤色にしたいのですが、 どのようなマクロにすれば良いのでしょうか? どなたが教えていただけると助かります。