[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『一つのシートから各個人ごとに分割したシートを作る』(エクセル初心者)
一つのシートにデータが以下のように並んでいます。
シート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.