• 締切済み

EXCEL 複数シートからデータを抽出する方法

シート1~12が「4月…3月」の名前になっています。 各シートの ・A列は日付 ・B列はメモ ・C列はジャンル が、それぞれ入力されています。 それを、新たなシートで、ジャンルごとに検索して日付順に並べたいです。 各シートでフィルターをかければ、そのシート(月)の中で該当する行を表示しますが、それを複数シート(複数月)のものをまとめた形で、新しいシートに表示したいのです。 イメージとしては、新しいシート(1)に同一ジャンルのものが4月から時系列に並ぶような感じです。 マクロボタンを押すとジャンルごとに自動検索して表示するようなものでも構いませんし、新しいシート(1)にジャンル(1)、新しいシート(2)にジャンル(2)というようなものでも構いません。 よろしくお願いします!

みんなの回答

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.3

添付画像のようなレイアウトなら 次のコードで 合計シートにデータ全数が集まり、 ジャンル順、日付順に並びます。 これならフィルターを使うことで 期待の確認ができると思います。 いや、それでもなおジャンルごとのシートに これらを分割したいですか? Sub Sample()  Dim cn As Object  Dim rs As Object  Dim SQL As String  Dim shT As Worksheet    'シートを定義  Set shT = ThisWorkbook.Sheets("合計")  '集計先のシート    'DBを定義、設定  Set cn = CreateObject("ADODB.Connection")  Set rs = CreateObject("ADODB.Recordset")  cn.Provider = "Microsoft.ACE.OLEDB.12.0"  cn.Properties("Extended Properties") = "Excel 12.0;HDR=Yes;IMEX=1"  cn.Open ThisWorkbook.FullName  'SQL文を組立  SQL = "select 日付,メモ,ジャンル" & vbCrLf  SQL = SQL & "FROM [4月$A1:Z1000]" & vbCrLf    SQL = SQL & "UNION ALL" & vbCrLf  SQL = SQL & "select 日付,メモ,ジャンル" & vbCrLf  SQL = SQL & "FROM [5月$A1:Z1000]" & vbCrLf  SQL = SQL & "UNION ALL" & vbCrLf  SQL = SQL & "select 日付,メモ,ジャンル" & vbCrLf  SQL = SQL & "FROM [6月$A1:Z1000]" & vbCrLf    '・・・・  '上の3行を7,8,...1,2,3に加工して追記  '・・・・    SQL = SQL & "order by ジャンル,日付" & vbCrLf  rs.Open SQL, cn  '結果セットを格納  shT.Cells.ClearContents  shT.Cells(1, 1).Value = "日付"  shT.Cells(1, 2).Value = "メモ"  shT.Cells(1, 3).Value = "ジャンル"    shT.Cells(2, 1).CopyFromRecordset rs    cn.Close End Sub

  • kkkkkm
  • ベストアンサー率66% (1733/2603)
回答No.2

マクロの記録を実行して フィルターをかけて並び替えして新しいシートにコピー をすべてのシートで行って、できたコードをボタンに割り付けます。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

>マクロボタン という言葉がでていますが、エクセルVBAの経験はあるのですか? ない場合は、習得に時間がかかるし、修正も自力でできない恐れが多い。 ーー だから、ピボットテーブルなどを勉強してはどうでしょう。 Googleで「データをFilterしてピボットテーブル」で照会して、勉強。 ーー VBAで初心者的なやり方で、 1つの、処理ロジックですが、 (1)12か月のすべてのシートのA,B.C列データを、1つの(集約)シートのA,B,C列の下方向に継ぎ足していく。  そこでは、End(xlUP)を活躍させる。 「For Each Sh In Worksheets 」   約10行程度。 (2)(1)で、1つの指定「ジャンル」で、フィルタをかける。    フィルターした結果を、別の1シートに貼り付ける。    そこで、データを日付列でソート。     約10数行か。

関連するQ&A

専門家に質問してみよう