公式アカウントからの投稿が始まります

あまりEXCELには詳しくないので、詳細に教えて下さると助かります。

以下の表から製品名毎に表を作成したいのですが何かいい方法はないでしょうか。

シート1のデータ↓

製品名 受注納期 回答納期 顧客注番 受注数量 発注数量 メモ
製品A  4/5   4/1 123456  100   1
製品B  4/6   4/2   200 2
製品C  4/7   4/3   123458  300   200
製品B  4/8   4/4   123459  400
製品B  4/9   4/5         500   300 3
製品C  4/10   4/6   123461  600
製品D  4/11 4/7   123462  700



結果としてシート2に下記の様に自動抽出できるようにしたいです。データは定期的に更新するのでフィルタオプションでは対応しきれずに…できれば元データを更新するたびに表が自動更新される様にしたいです。

シート2への抽出結果↓

製品名 受注納期 回答納期 顧客注番 受注数量 発注数量 メモ
製品A   4/5  4/1  123456   100        1


製品名 受注納期 回答納期 顧客注番 受注数量 発注数量 メモ
製品B   4/6  4/2         200        2
製品B   4/8  4/4   123459   400
製品B   4/9  4/5         500   300   3

製品名 受注納期 回答納期 顧客注番 受注数量 発注数量 メモ
製品C   4/7  4/3   123461  300   200
製品C・・・・・・

の様に抽出したい場合はどのような関数を使用すれば良いでしょうか。
マクロVBAに関しての知識が少ないので、そちらを使用する場合、より詳細にお教えいただけると大変助かります。

IF関数やCOUNTIF関数を使用して表の作成を試みようと思いましたが、製品の数が多いため対応しきれずに困っております。

宜しくお願い致します。

A 回答 (4件)

No.1・2です。



>尚、シート1を更新した場合、シート2の内容は削除してからマクロ実行した方が良いのでしょうか?

一旦Sheet2のデータを消去して操作するようにしていますので
Sheet2の方は何も手を付ける必要はありません。
Sheet1のデータ変更があれば
すぐにマクロを実行しても大丈夫です。m(_ _)m
    • good
    • 0
この回答へのお礼

承知いたしました。

丁寧な回答ありがとうございました。

お礼日時:2016/04/08 11:49

抽出結果は、すべてシート2へ表示して良いのですよね?商品名別にシートを分ける必要が無いのであれば、こんなのでもできますよ。

処理概要は以下の通りです。
①シート1をシート2へ、まるまるコピーする。
②シート2を商品名でソートする。
③最終行から上に向かって商品名を見ていき、ブレークしたところに見出し行と空行を挿入する。

(ご参考)
このサブプロシジャをSheet2のWorksheet_Activate()イベントプロシジャからCallするようにすれば、自動で再抽出ができます。(シート2をアクティブにするたびに起動されるので、ちょっと鬱陶しいかもしれませんが…)

Sub Sample()
Dim LastRow As Long
Dim I As Long
Sheets("Sheet1").Cells.Copy Destination:=Sheets("Sheet2").Range("A1")
LastRow = Sheets("Sheet2").Cells(Rows.Count, "A").End(xlUp).Row
With Sheets("Sheet2").Sort
.SortFields.Clear
.SortFields.Add Key:=Range("A2:A" & LastRow)
.SetRange Range("A1:G" & LastRow)
.Header = xlYes
.Apply
End With
With Sheets("Sheet2")
For I = LastRow To 3 Step -1
If .Cells(I, "A") <> .Cells(I - 1, "A") Then
.Rows(1).Copy
.Rows(I).Insert Shift:=xlDown
.Rows(I).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
End If
Next
End With
End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

お二人とも凄いですね…。
私も自分でこんなのが作れるように勉強しなきゃです…;

ママチャリさんの作ってくれたものも試してみましたが、こちらは表の区切りの空欄にも頚腺が引かれてしまって製品ごとの区切りが無く、見づらくなってしまいました。

でも、そこを改善すればこちらも使えそうです。

ありがとうございます!

お礼日時:2016/04/08 09:58

No.1です。



>因みに、製品名や数量が増えても対応できますか??

そのつもりです。m(_ _)m
    • good
    • 0
この回答へのお礼

できました!
凄いですね!!感動しました。。。


尚、シート1を更新した場合、シート2の内容は削除してからマクロ実行した方が良いのでしょうか?

お礼日時:2016/04/08 09:31

こんにちは!



VBAになりますが一例です。

Alt+F11キー → メニュー → 挿入 → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト → Excel画面に戻り(VBE画面を閉じて)
マクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)

Sub Sample1() 'この行から//
Dim i As Long, wS As Worksheet
Set wS = Worksheets("Sheet2")
wS.Cells.Clear
With Worksheets("Sheet1")
.Range("A:A").AdvancedFilter Action:=xlFilterCopy, copytorange:=wS.Range("A1"), unique:=True
For i = 2 To wS.Cells(Rows.Count, "A").End(xlUp).Row
.Range("A1").AutoFilter field:=1, Criteria1:=wS.Cells(i, "A")
.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy wS.Cells(Rows.Count, "B").End(xlUp).Offset(2)
Next i
wS.Range("A:A").Delete
wS.Rows(1 & ":" & 2).Delete
wS.Columns.AutoFit
.AutoFilterMode = False
End With
End Sub 'この行まで//

※ 関数でないので元データの変更があるたびにマクロを実行する必要があります。m(_ _)m
    • good
    • 1
この回答へのお礼

回答ありがとうございます。

早速試してみます!
因みに、製品名や数量が増えても対応できますか??

お礼日時:2016/04/07 18:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!