- 締切済み
EXCEL 複数シートからデータを抽出する方法
シート1~12が「4月…3月」の名前になっています。 各シートの ・A列は日付 ・B列はメモ ・C列はジャンル が、それぞれ入力されています。 それを、新たなシートで、ジャンルごとに検索して日付順に並べたいです。 各シートでフィルターをかければ、そのシート(月)の中で該当する行を表示しますが、それを複数シート(複数月)のものをまとめた形で、新しいシートに表示したいのです。 イメージとしては、新しいシート(1)に同一ジャンルのものが4月から時系列に並ぶような感じです。 マクロボタンを押すとジャンルごとに自動検索して表示するようなものでも構いませんし、新しいシート(1)にジャンル(1)、新しいシート(2)にジャンル(2)というようなものでも構いません。 よろしくお願いします!
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- HohoPapa
- ベストアンサー率65% (455/693)
添付画像のようなレイアウトなら 次のコードで 合計シートにデータ全数が集まり、 ジャンル順、日付順に並びます。 これならフィルターを使うことで 期待の確認ができると思います。 いや、それでもなおジャンルごとのシートに これらを分割したいですか? 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)
マクロの記録を実行して フィルターをかけて並び替えして新しいシートにコピー をすべてのシートで行って、できたコードをボタンに割り付けます。
- imogasi
- ベストアンサー率27% (4737/17069)
>マクロボタン という言葉がでていますが、エクセル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数行か。