• ベストアンサー

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

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

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

  • ベストアンサー
  • pauNed
  • ベストアンサー率74% (129/173)
回答No.1

こんにちは。 VBAで行うにしても、PivotTableを使うとラクな気がするのですが。 (Sheet1のA1:B1に見出しがあるとして) Dim r As Range Set r = Sheets("Sheet1").Range("A1").CurrentRegion.Resize(, 2) With ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, _                   SourceData:=r.Address(external:=True))   With .CreatePivotTable(TableDestination:="")     .AddFields RowFields:=r.Cells(2).Value, _           ColumnFields:=r.Cells(1).Value     With .PivotFields(r.Cells(2).Value)       .Orientation = xlDataField       .Function = xlCount     End With     '.TableRange2.Copy     '.TableRange2.PasteSpecial Paste:=xlPasteValues     'Application.CutCopyMode = False   End With End With Set r = Nothing もし、sheet1のA列の日付に抜けがあるなら、 1日から31日までの空データ(ダミー)をA列に追加しておくと 1ヶ月分の表が比較的簡単にできますよ。 また、レイアウト次第ではご希望のものと違うかもしれません。 その時はコメントアウトした行を活かして( ' を削除して)、 ピボットテーブルの機能を削除して、シートデータとして使うと良いかもしれません。 ピボットテーブルについては、QNo.2926805も参考にしてみてください。

mikisho
質問者

お礼

早速のアドバイスありがとうございます。 ピボットテーブルを使用することは、頭にありませんでした。 アドバイスを元に、チャレンジしてみます。

関連するQ&A

  • ExcelVBA複数条件一致後別シートに結果表示

    初めて質問させていただきます。VBAとマクロを勉強中なのですが、数値だけのcsvデータ(3万行くらい)をマクロで処理するように指示されて困っています。 ●ファイルの内容(概要) <Sheet1> A列:性別(男性:1、女性:2でコード化) B列:死因コード(数値5~6桁) C列:年齢 D列:市町村(3桁でコード化「201」等) <Sheet2> ・「セルA1」に表にしたい市町村コードをあらかじめ入力しておく ・セルB1~セルEC1まで死因コード ・セルA2~セルA132まで年齢0~130 ・セル範囲B2~EC132に市町村1の男性の値が入る ・セルB133~セルEC133まで死因コード ・セルA134~A264まで年齢0~130 ・セル範囲B134~EC264に市町村1の女性の値が入る Sheet2にはあらかじめ表を作成しておき、行と列の値を参照してSheet1で一致する値が、列と行が交わるところの空白セルに入力した市町村コードと一致していることもふるいにかけられ、表で結果としてカウントされるときには男女別に分かれるようにしたいのですが可能でしょうか? ややこしくて申し訳ありません。繰り返しあらかじめ作成された表にカウント結果を入力させる記述はヒントを頂ければ頑張ります。 なので、4つの条件に一致した場合にカウントして別シートに返すにはどうしたらいいのか助けていただけますと幸いです。 それと、シート1の最終行は決まっていません。

  • 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の記述の仕方がわかりません。どうすればよいのでしょう? お願いします!

  • Excel VBA

    Excel VBAについて シート1にはデータが入ってます。 G列に日付、L列に商品名、N列に件数。 シート2には集計結果を入力したいです。 セルB2に、日付が10月1日から15日までで、商品名がAの件数の合計。 セルB3は、日付が10月16日から末日まで、セルB4は、日付が11月1日から15日までと半月毎に集計を半年後の末日まで繰返し、B2の数行下には、商品名Bの集計行を作り、その数行下には商品名Cの集計行を作りたいです。 これまでは関数SUMIFSで集計していましたが、複数店舗分のシートの更新・メンテナンスが大変なので、VBAでの集計を考えいろいろ調べてるのですが、方法が思い付かないので、ご教授ください。

  • エクセルの1シートを項目別に別シートへ分ける方法

    エクセル2010で1シートのデータを項目別に別シートへ自動的に分割する方法で困っています。 検索するとマクロを使うと書いていますが、マクロはほとんど使ったことが無いのもあって、わかりませんでした。 シート1 A列(日付8ケタ+商品番号6ケタ) B列(売上額) 20130515000004           300 20130515000006           100 20130518000004           300 20130519000001           500 20130519000004           300 ・・・                   ・・・ をA列の日付部分上8ケタを使って日別にシートを分け、 シート名をuriage20130515(uriageと日付8ケタ)という名前にしシート名+CSV形式で保存したいです。 シート2 シート名:uriage20130515 A列         B列 20130515000004 300 20130515000006 100 シート3 シート名:uriage20130518 A列         B列 20130518000004 300 シート4 シート名:uriage20130519 A列         B列 20130519000001 500 20130519000004 300 このように自動で別シートに分割した上で、シート名CSV形式で保存まで自動でできるとありがたいです。 自動化できるならシートを分割するマクロ、シート名でCSV保存するマクロが一つのマクロになっていても、分かれていてもOKです。 このようなことはできますか? よろしくお願いします。

  • EXCEL VBA 別シートの文字をシート内で検索

    excel2003 VBAで SHEET2に格納されているセルの文字をSHEET1のB列1~9000程度までの文字列の中で一致または部分一致するものがあればそのセル(B列のセル)をSHEET3に順次A列に出力したいのですが、うまくできません。SHEET2に格納されている場所はA列で(SHEET1、SHEET2の文字とも増える可能性あり) 宜しくお願いします。

  • EXCELで別シートに集計するやりかた

    エクセルで下記の様な生産日報をベースにした集計シートを作りたいのですが、いかんせん関数初心者なのでうまく出来ません。どなたか詳しい方ご教授をよろしくお願いします。 シート1 生産日報  A日付  B担当  C品目  D生産数   12/1   Aさん  製品1  200  12/1   Bさん  製品2  100  12/2   Cさん  製品1  100  12/2   Bさん  製品3  100    省略  12/31  Bさん  製品4  100  こんな感じで毎日下にどんどん増えていき1カ月で区切りの日報です シート2 生産集計表  A 製品名  B生産累計    製品1      300(←その日までに入力された製品1の生産数によって変動)  製品2      100  製品3      100  製品4      100  このように製品ごとのその日までの累計数が計算されてB列に自動で出る様な物を作りたいです。 解りにくいかもしれませんが、宜しくお願いします。

  • 【Excel VBA】別シートへの反映方法

    こんばんは。 現在月間&日ごとのスケジュール表をVBAで作成しています。 そこで質問です。 Sheet1のA列に日付、B列に予定、C列に人の名前 があります。 Sheet1のC列の人の名前を各日付ごとの シート(シート名は1日、2日、3日・・・)のセル「E5」へ 反映させたいのですが、どうしても分かりません。 分かり難い質問で、大変申し訳ありませんが、アドバイスよろしくお願いします。

  • エクセル VBA

    最終行から順番に下へ同列で入力するVBAを教えて下さい。 EXCELのVBAで教えて下さい。 シート1のA列にはB列が入力されると自動入力されるNo.があり、C~G列もB列が入力されると自動入力されます。 B列には日付が、H列には3~4桁の数字が入力したいのですが、 入力行は必ず最下行のセルB、Gな為、VBAでフォームを作成し、 入力実行ボタンを押すことにより、最下行のセルB、Gに反映されるように したいです。 又、上記入力後に、シート2のH~N列をコピーして、シート3のA~G列に値のみの貼り付けを行い保存した後、シート3のA~G列をコピーして csvファイルを作成して保存したいです。 一連の流れを、フォームの入力実行ボタンを押すことで実行したいのですができるのでしょうか? 宜しく御願い致します。

  • VBA 条件が一致した場合のみコピーする

    VBAについて、現在勉強中な為、色々調べておりますが、詳しい方がおりましたら教えてください。 在庫管理の表をエクセルでやっております。 注文が来て、品物の手配をする時に、在庫の有無を確認したいので下記のような事が出来れば 良いと思っております。 3つのシートを使っております。シート名は、”必要数””出荷数””在庫数” シート:”在庫数”では、入荷数の合計から、マクロを使ってコピーした”出荷数”の数を 差し引くことにより、発注手配が必要な物とそうでない物がわかりやすいように作りたいと思って おります。 今回は、注文来た数を出荷数のシートにVBAでコピーさせる方法の質問です。 シート名:”必要数” のセルC2:C:50 を、コピーして、隣のシート”出荷数”のA列の 一番上の空白に、形式を選択して貼り付け(値・行列を入れ替える) ただし、A列には、日付が入力されてる為、参照した空白の一つ上のセルがコピー元と同じ 日付なら、貼り付けをしないでエラー表示させたい。 自動マクロでは、コピー元を選択して、ここに貼り付けみたいな事はできたのですが 3行目に貼り付けした後は、4行目に貼り付けるという自動マクロがわかりません。 ネットで調べたコードを何個もコピペしてやってみたのですが、なかなかうまく行きません。 詳しい方がおりましたら、コードを教えて頂けると助かります。 どうぞ、宜しくお願い致します。

  • 条件にあてはまるデータの数をカウントするエクセルVBA

    下記のようにA列に1~3のコードがありB~E列には測定値があります。 B列以降の測定値のカウント(+3の個数、+2の個数…)を列ごとにVBAでカウントしてます。 A列に関係なくカウントするコードは記述して実行できましたが A列の条件が1の時だけカウントするVBAが良くわかりません。 シート A    B    C  ・・・E 1    -1   +1  ・・・ 1    +2   0 2     0   0 3    -3   0 1    -1   +3 101行目以降 +3    カウント数 … +2      〃 +1      〃 0       〃 -1      〃 -2      〃 -3      〃   A列に関係なくカウントするコード sub カウント() Dim 行 As Long Dim 列 As Long For 列 = 2 To 5 For 行 = 101 To 107 Cells(行, 列).Value = Application.WorksheetFunction.CountIf(Range(Cells(2, 列), Cells(100, 列)), Cells(行, 1)) Next 行 Next 列 End Sub

専門家に質問してみよう