エクセル2003でVBAを使ったデータ抽出と数量合計の方法は?

このQ&Aのポイント
  • エクセル2003でVBAを使って、特定の条件でデータを抽出し、数量の合計を求める方法について教えてください。
  • 質問者はVBA初心者で、マクロ自動記録ではデータの貼り付けまでしか行えません。最新の日付のデータを抽出し、商品が「事務用品」の数量の合計を求めたいそうです。
  • 別に任意の日付を指定して、「事務用品」の数量の合計を求める方法も知りたいそうです。
回答を見る
  • ベストアンサー

エクセル2003についてご質問です。目的のデータを抽出して数量合計を出

エクセル2003についてご質問です。目的のデータを抽出して数量合計を出すVBAをおしえてください。 VBAは初心者で、マクロ自動記録を使っているのですが、自動記録で必要なデータを貼りつけるまでの作業はできるのですが、それ以降の下記の作業がVBA記述でないとできそうになく、どうしたらいいのか分からないので教えてください。 Aの列に入荷日付が入ってます。1月から今日までの日付が延々と入力されてます(日付は順番に並んでない時もあります)。 B列には商品名、C列には数量が入ってます。 マクロを実行して、一番最新の日を抽出して、その中でB列の商品が「事務用品」となってるセルの、C列の数量の合計数をメッセージボックスで出したいのですが。どうしたらいいのでしょうか? また、それとは別に任意の日付を指定して(日付入力用のセルに入力して)、B列「事務用品」の数量合計をメッセージボックスで出す方法もおしえてください。 下記は例です。実際は各日にはもっとたくさんのデータが入力されています。日によってデータ数はバラバラです。 よろしくご指導ください。 A......................B.....................C 【日付】.............【商品名】.........【数量】 1/5..................お茶菓子..........2 1/5..................事務用品.........3 1/5..................事務用品.........5 1/6..................事務用品.........7 1/6..................事務用品.........2 1/7..................ホース..............1 1/8..................事務用品.........4 1/7..................懐中電灯.........1 1/6..................ヘルメット..........3 ・ ・ ・(間の期日を省略します・・) ・ ・ 8/24................事務用品..........4 8/25................事務用品..........6 8/24................ドライバー..........1 8/26................事務用品..........3 8/26................事務用品..........7 8/26................コーヒー他..........5

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

  • ベストアンサー
  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.3

VBAの例です。 なるべくEXCELの関数をVBAの中で使用しています。   Sub 数量表示()  Dim 範囲A  As Range  Dim MAX日  As Long  Dim 数量式  As String  Set 範囲A = Range(Range("A2"), Cells(Rows.Count, "A").End(xlUp))  MAX日 = Evaluate("Max(" & 範囲A.Address & ")")  数量式 = "SUMPRODUCT("  数量式 = 数量式 & "(" & 範囲A.Address & "=" & MAX日 & ")*"  数量式 = 数量式 & "(" & 範囲A.Offset(0, 1).Address & "=""事務用品"")*"  数量式 = 数量式 & 範囲A.Offset(0, 2).Address & ")"  MsgBox (Format(MAX日, "最終日 = YYYY/MM/DD") & vbCrLf & _       Format(Evaluate(数量式), "数量  = #,### 個")) End Sub   > また、それとは別に任意の日付を指定して 上記の例ですと「MAX日」を表示したい日に代入すればできます。 例)MAX日 = #8/24/2010#    試してみてください。

その他の回答 (3)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.4

#1さんのお叱りを受けそうですが、日付シリアルでのオートフィルタはどうやるのかなと思って、トライしてみました。A列は書式指定(全行同じ書式)した、日付シリアル値が入っているとします。ご参考まで。 Sub test() Dim targetRange As Range Dim lastRow As Long Dim lastDate As String Application.ScreenUpdating = False lastRow = Range("A" & Rows.Count).End(xlUp).Row Set targetRange = Range("A1:C" & lastRow) lastDate = Format(Application.WorksheetFunction.Max(Range("A2:A" & lastRow)), Range("A2").NumberFormatLocal) If ActiveSheet.AutoFilterMode = True Then ActiveSheet.AutoFilterMode = False With targetRange .AutoFilter field:=1, Criteria1:=lastDate .AutoFilter field:=2, Criteria1:="事務用品" MsgBox Application.WorksheetFunction.Subtotal(9, targetRange.Columns(3)) .AutoFilter End With Application.ScreenUpdating = True End Sub

  • ynkd
  • ベストアンサー率17% (5/28)
回答No.2

No.1の追伸です。 下記の操作を マクロの記録で取れば ある程度書けていると思いますが? 当然 無駄なコードの修正は必要になります。 subtotalをしたセルの値を メッセージボックスに表示するようにすれば、出来ると思うんですが? 上記を どこかにコマンドボタンなどを貼り付けて 実行するようにすれば OKかなと コードも示さないで参考にならないと思うかもしれませんが、1つ1つ やっつけていくと自分の実力になります。 excel vbaは ネットにいくらでもあります。

  • ynkd
  • ベストアンサー率17% (5/28)
回答No.1

各列に フィルターを掛けてc列をsubtotalでは ダメなんですか? どうしてもメッセージボックスでなければいけないんですか?

関連するQ&A

  • Excel データの抽出について

    年始のお忙しいところ失礼いたします。 Excelにおけるデータ抽出についてお尋ねいたします。 抽出元データは左から1番目のシートのA列から順に、日付、部門名、商品名、数量0、記号、数量1、記号、数量2、記号、数量3、記号、残り数量となっています。 残り数量の列には、『=数量0-数量1-数量2-数量3』 という数式が記述してあります。 今回は、左から3番目のシートに、商品名、数量0、残り数量の3列の条件式を入力する場所と条件式に合致するデータを表示する場所を作成して、条件式に合致するデータを抽出することを検討しています。 条件式 商品名列:商品名の中から1つの商品を抽出 数量0:数量0=40、数量0<=10など数量0の値が入力した任意の数量と=またはは、以下(<=)を抽出 残り数量:残り数量<>0、残り数量<=20など残り数量の値が0以外か、入力した任意の数量以下を抽出 条件式を書き換える(抽出条件を変更する)ことが多いため、書き換える(条件を変更する)たびに、表示されるデータが更新されるようにしたいです

  • エクセル★集計で数量合計を出したいのですぅが

    エクセルに詳しくないので、教えてほしいです。 下記のような表があります。データは500以上あります。 商品コード   商品名   数量    日付 12345    クッキー     10    13.10.11 12345    クッキー     25    13.12.12 12333    チョコ       11    13.10.22 12345    クッキー     50    13.10.11 12222    キャンディ    30    13.12.10 12333    チョコ       45    13.10.10 12333    チョコ       20    13.10.22 今までの表には、日付がなかったので、データ→集計で、簡単に、商品コード別の数量合計がだせていたのですが、今回新たに、日付が増えたましたので、商品コード別かつ日付別の、それぞれの数量合計を出したいのですが、データー→集計で出すことは可能でしょうか? 簡単な方法がありましたら、教えてほしいです。 よろしくお願いします。

  • エクセルである品名だけを抽出してその合計を算出したい

    エクセル初心者です。よろしくお願いします。 会社の表なんですが、A列に日付、B列に製品名、C列に数量、D列に単価、E列に金額の表があります。 B列の製品名には何種類もの製品があり、(例えばですが)プリンを抽出してそのプリンだけの合計金額を所定のセルに入力したいと思っています。 自分なりに色々関数を調べてみたのですがわかりません。 そのような計算式はないのでしょうか?教えて下さい。 お願いします。。m(_ _)m

  • エクセル データ抽出と合計の方法がありますか。

    エクセル データ抽出と合計の方法がありますか。 下記のようなデータがあるとします。 A列  B列 10  111 20  222 30  111 40  111 50  333 結果を D列  E列 111  80 222  20 333  50 としたいです。 つまりB列から存在する数字列を抽出し、それに該当するA列の合計を出したい。 D列へB列に存在する数字列を手入力し、 E列へ =SUMIF(B:B,D1,A:A) と入れておいて表示されるところまでしたのですが、 「D列へB列に存在する数字列を手入力」を手入力ではなく関数で抽出してくることは可能でしょうか。 何卒ご教示いただけますようお願いします!!!

  • Excelで同じ商品名で、かつ日付が古いものを抽出する方法

    ご存知の方、いらっしゃいましたらお願いします。 Excelは2003を使用しています。 複数の条件での抽出で名前が決まっているものは「フィルタオプションの設定」で行っていますが、日付が古いもの、新しいものの抽出方法がわかりません。 「同じ商品名」かつ「日付が古いもの」を抽出したいのですが、それが出来そうな関数、マクロはありますでしょうか。 当方マクロ知識は「マクロの記録」程度です。 A列  B列    C列 商品A 2007/12/01 10:00 商品B 2008/04/01 10:00 商品A 2008/05/01 10:00 現在は目視、手動で★印を別列につけ、それを抽出し削除しています。 削除フラグとして★印等をつけるようなものでも、わかれば嬉しいです。

  • Excelのオートフィルタでデータ抽出するマクロについて

    オートフィルタで指定した期間のデータ抽出のマクロを作成しているのですが上手くいきません。 例えばA列に 10月29日 11月1日 11月3日 11月5日 と日付を入力しており、B列、C列にデータを入力していたとして D列1行目に10月31日、D列2行目に11月4日と入力し D列1行目からD列2行目までと指定したデータを抽出するマクロを教えていただけませんか。 マクロ初心者で、困っております。どうかよろしく御願いします。

  • エクセルのデータ抽出で。

    エクセルで以下のようのな、 3列を持つ表があるとします。 日付    コード   名称 20090901  001    Aさん 20090904  002    Aさん 20090905  003    Aさん 20090901  023    Bさん 20090902  024    Bさん 20090903  025    Bさん ----------------------------------------- まず名称でデータを絞り、 更に一番新しい日付のデータのみ取得したいのですが。 20090905  003    Aさん 20090903  025    Bさん VBAでもなんでもよいので、 抽出の仕方があればお願いします。

  • excel VBAを使って、データを自動的に表示させたい!

    excelのVBA・マクロの書き方について教えてください!! たとえば、商品データ(商品名、数量、産地、担当者、商品コード)を入力したシートがあります。 別のシートに、商品名と数量を入力するだけで、商品データを参照して、産地・担当者・商品コードが自動で入力されるマクロを作成したいです。 「商品名」だけを入力して、表示させることはできたのですが、 商品名が同じで、数量が違うものがあると、片方のものしか表示されません。 A・B列に「商品名」・「数量」を入力して、自動でデータが表示される方法はありますか??

  • エクセルでのデータ抽出について

    初めて質問させていただきます。 2つの銘柄の株価データをエクセルにコピペした後、日付と時刻が同じものを行を揃えて抽出したいのですが、いろいろ試してみましたがわかりません。 具体的には次のようにしたいのですが・・・。 【元データ】  A列     B列    C列    D列    E列    F列 ・ ・ 2007/11/9  9:20:00  520  2007/11/9  9:25:00  1544 2007/11/9  9:15:00  514  2007/11/9  9:20:00  1520 2007/11/9  9:10:00  513  2007/11/8  15:00:00  1430 2007/11/9  9:05:00  509  2007/11/8  14:55:00  1425 2007/11/9  9:00:00  501  2007/11/8  14:50:00  1427 2007/11/8  14:55:00  497   2007/11/8  14:45:00  1431 ・ ・ 【抽出後】 ・ ・ 2007/11/9  9:20:00  520  2007/11/9  9:20:00  1520 2007/11/8  14:55:00  497  2007/11/8  14:55:00  1425 ・ ・ どなたか宜しくお願いいたします。

  • エクセル データ抽出について

    (データ)    A B C 1  I あ 20 2  II い 30  3  III う 10 4  IV あ 10 5  V い 20  6  VI う 30 したい事(1) A列のうちいずれかの項目を入力すると、B列の該当値を抽出 したい事(2) (1)のB列該当値が検索一行目で抽出されたら、その値からC列の値を抽出したい 困っていること・・・B列に全く同じ名前の項目があるため、抽出すると 先に来る値が飛んできてしまう 例:IVを入れると「あ」が自動で抽出され、その「あ」でさらに「10」を抽出したいのに、先にあるC1の「20」が飛んできてしまう。 それぞれ、(1)(2)にどのような関数を入れると、抽出したい値が出てくるでしょうか?

専門家に質問してみよう