- ベストアンサー
エクセル2003で商品出荷データを抽出表示する方法
- エクセル2003を使用している場合、Sheet1に入力された商品出荷データを抽出表示する方法について教えてください。
- Sheet2からSheet13までの12ヶ月分のシートには、Sheet1で入力された日付を元に抽出表示したいと考えています。
- 抽出表示項目は、商品コードから出荷日までの全ての情報を含んでいる必要があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは! VBAでの一例です。 Sheet2以降のA1セルはシリアル値ではなく、↓の画像のように6桁数値になっているという前提です。 そしてSheet2以降の配置が画像通りとします。 Alt+F11キー → 画面左側の「This Workbook」をダブルクリック → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) 尚、Sheet1はSheet見出し上で一番左側にあるとします。(Sheet名はどんな名前でも構いません) Sub 振り分け() 'この行から Dim i, k, M, Sn As Long Dim ws As Worksheet Set ws = Worksheets(1) Application.ScreenUpdating = False For k = 2 To Worksheets.Count M = Worksheets(k).Cells(Rows.Count, 1).End(xlUp).Row If M > 2 Then Worksheets(k).Rows(3 & ":" & M).ClearContents End If For i = 2 To ws.Cells(Rows.Count, 1).End(xlUp).Row Sn = Year(ws.Cells(i, 3)) * 100 + Month(ws.Cells(i, 3)) If Worksheets(k).Cells(1, 1) = Sn Then With Worksheets(k).Cells(Rows.Count, 1).End(xlUp).Offset(1) .Value = ws.Cells(i, 1) .Offset(, 1) = ws.Cells(i, 2) With .Offset(, 2) .Value = ws.Cells(i, 3) .NumberFormatLocal = "yyyy/m/d" End With End With End If Next i Next k Application.ScreenUpdating = True End Sub 'この行まで ※ 関数でないのでSheet1のデータ変更があっても反映されません。 データ変更があるたびにマクロを実行する必要があります。 参考になりますかね?m(_ _)m
その他の回答 (1)
- kagakusuki
- ベストアンサー率51% (2610/5101)
今仮に、新たにSheet0を設けて、そのA列を作業列として使用するものとします。 又、各シートのA1セルに入力する抽出条件は、201206 の様な形式ではなく、 2012年6月 の様な形式で入力する様にして下さい。 まず、Sheet0のA2セルに次の数式を入力して下さい。 =IF(ISNUMBER(INDEX(Sheet1!$C:$C,ROW())),RANK(INDEX(Sheet1!$C:$C,ROW()),Sheet1!$C:$C,1)+COUNTIF(Sheet1!$C$1:INDEX(Sheet1!$C:$C,ROW()),INDEX(Sheet1!$C:$C,ROW()))-1,"") 次に、Sheet0のA2セルをコピーして、Sheet0のA3以下に貼り付けて下さい。 次に、Sheet1の1行目をコピーして、Sheet2の3行目に貼り付けて下さい。 次に、Sheet2のC4セルに次の数式を入力して下さい。 =IF(ROWS($C$3:$C3)>COUNTIF(Sheet1!$C:$C,"<"&DATE(YEAR($A$1),MONTH($A$1)+1,1))-COUNTIF(Sheet1!$C:$C,"<"&$A$1),"",INDEX(Sheet1!C:C,MATCH(ROWS($C$3:$C3)+COUNTIF(Sheet1!$C:$C,"<"&$A$1),Sheet0!$A:$A,0))) 次に、Sheet2のA4セルに次の数式を入力して下さい。 =IF(OR($C4="",ISERROR(1/(INDEX(Sheet1!A:A,MATCH(ROWS($C$3:$C3)+COUNTIF(Sheet1!$C:$C,"<"&$A$1),Sheet0!$A:$A,0))<>""))),"",INDEX(Sheet1!A:A,MATCH(ROWS($C$3:$C3)+COUNTIF(Sheet1!$C:$C,"<"&$A$1),Sheet0!$A:$A,0))) 次に、Sheet2のA4セルをコピーして、Sheet2のA4~B4の範囲に貼り付けて下さい。 次に、Sheet2の4行目の各セルの書式を、Sheet1の2行目と同様の書式として下さい。 (Sheet1の2行目をコピーして、Sheet2の4行目に貼り付ける際に、 [形式を選択して貼付け] ↓ 「形式を選択して貼付け」ダイアログボックスの「書式」と記されている箇所をクリックして、チェックを入れる ↓ 「形式を選択して貼付け」ダイアログボックスのOK]ボタンをクリック の様に操作して下さい) 次に、Sheet2のA4~C4の範囲をコピーして、同じ列の5行目以下に貼り付けて下さい。 次に、Sheet2のコピーセルを11枚作成して、各々のシートの名称をSheet3~Sheet13に変更して下さい。 最後に、Sheet2~Sheet13のA1セルに、各年月を抽出条件として入力して下さい。 以上です。