[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『一つのシートから各個人ごとに分割したシートを作る』(エクセル初心者)
一つのシートにデータが以下のように並んでいます。
シート1
分類 品名 購入日 調理日
野菜 トマト 07/01 07/01
野菜 ニンジン 07/01 07/01
野菜 ニンジン 07/02 07/05
果物 みかん 07/07 07/07
果物 みかん 07/11 07/11
野菜 トマト 07/11 07/12
果物 みかん 07/15 07/18
このシートを
↓
シート2
分類 品名 購入日 調理日
野菜 トマト 07/01 07/01
野菜 トマト 07/11 07/12
シート3
分類 品名 購入日 調理日
野菜 ニンジン 07/01 07/01
野菜 ニンジン 07/02 07/05
シート4
分類 品名 購入日 調理日
果物 みかん 07/07 07/07
果物 みかん 07/11 07/11
果物 みかん 07/15 07/18
上記のように、シート1のデータを品名ごとに別々のシートに分割したいのですが、
本当のデータ数は500件以上、品名も30件以上なので出来ましたらマクロ等で対応したいのです。何とかできないでしょうか?
また、もう一つ希望としては作成したときに例えばシート2の名前をトマト、
シート3の名前をニンジンなどとできれば最高です。
何とか助けてください。
'--------------------------------- Sub Grouping() '--------------------------------- Dim i%
Application.ScreenUpdating = False With Worksheets(1) For i = 2 To .Range("B65535").End(xlUp).Row Call AddLine(i, .Cells(i, 2).Value ) Next End With Application.ScreenUpdating = True End Sub
'--------------------------------- Sub AddLine(lineNum%, sheetName$) '--------------------------------- Dim lastLine%
Call checkAndMake(sheetName) lastLine = Worksheets(sheetName).Range("B65535").End(xlUp).Row + 1 Worksheets(1).Rows(lineNum).Copy Worksheets(sheetName).Rows(lastLine).Insert Shift:=xlDown End Sub
'--------------------------------- Sub checkAndMake(sheetName$) '--------------------------------- Dim tmpWS As Worksheet On Error Resume Next Set tmpWS = Worksheets(sheetName) If tmpWS Is Nothing Then Worksheets.Add after:=Worksheets(Worksheets.Count) Worksheets(Worksheets.Count).name = sheetName Worksheets(1).Rows(1).Copy Worksheets(sheetName).Rows(1).Insert Shift:=xlDown End If On Error GoTo 0 End Sub
(Mook)
mook さま
お返事遅れまして申し訳ございません。
実際に動かしてみて、思ったとおりの形になりました。
説明不足で不安だったのですが、うれしい限りです。
本当にありがとうございました。
(エクセル初心者)
この回答すごく参考になりました。
上の例とマクロをコピペして動かすことまではできたのですが、
この例を応用し、
(シート1)
分類 品名 購入日 調理日
野菜 トマト 07/01 07/01
野菜 ニンジン 07/01 07/01
野菜 ニンジン 07/02 07/05
果物 みかん 07/07 07/07
果物 みかん 07/11 07/11
野菜 トマト 07/11 07/12
果物 みかん 07/15 07/18
↓
(シート2)
分類 品名 購入日 調理日
野菜 トマト 07/01 07/01
野菜 ニンジン 07/01 07/01
というように、
購入日でシート分割するには、
上記マクロのどこを変更すればできるようになるのでしょうか。
マクロがまったくわかっていないので、
お分かりになる方がおられましたら教えてください。
よろしくお願いします。
Mookさんのを改造してみました。 変更したのは、コメントを入れた行のみです。
'--------------------------------- Sub Grouping() '--------------------------------- Dim i%
Application.ScreenUpdating = False With Worksheets(1) For i = 2 To .Range("B65535").End(xlUp).Row Call AddLine(i, .Cells(i, 3).Text) '購入日で分割。但し、TEXTで文字を取り出す Next End With Application.ScreenUpdating = True End Sub
'--------------------------------- Sub AddLine(lineNum%, sheetName$) '--------------------------------- Dim lastLine%
Call checkAndMake(sheetName) lastLine = Worksheets(sheetName).Range("B65535").End(xlUp).Row + 1 Worksheets(1).Rows(lineNum).Copy Worksheets(sheetName).Rows(lastLine).Insert Shift:=xlDown End Sub
'--------------------------------- Sub checkAndMake(sheetName$) '--------------------------------- Dim tmpWS As Worksheet On Error Resume Next Set tmpWS = Worksheets(sheetName) If tmpWS Is Nothing Then Worksheets.Add after:=Worksheets(Worksheets.Count) Worksheets(Worksheets.Count).Name = sheetName Worksheets(1).Rows(1).Copy Worksheets(sheetName).Rows(1).Insert Shift:=xlDown End If On Error GoTo 0 End Sub
Mookさん、確かに面白いマクロですね(^^) by wkj
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.