
エクセル2010で1シートのデータを項目別に別シートへ自動的に分割する方法で困っています。
検索するとマクロを使うと書いていますが、マクロはほとんど使ったことが無いのもあって、わかりませんでした。
シート1
A列(日付8ケタ+商品番号6ケタ) B列(売上額)
20130515000004 300
20130515000006 100
20130518000004 300
20130519000001 500
20130519000004 300
・・・ ・・・
をA列の日付部分上8ケタを使って日別にシートを分け、
シート名をuriage20130515(uriageと日付8ケタ)という名前にしシート名+CSV形式で保存したいです。
シート2 シート名:uriage20130515
A列 B列
20130515000004 300
20130515000006 100
シート3 シート名:uriage20130518
A列 B列
20130518000004 300
シート4 シート名:uriage20130519
A列 B列
20130519000001 500
20130519000004 300
このように自動で別シートに分割した上で、シート名CSV形式で保存まで自動でできるとありがたいです。
自動化できるならシートを分割するマクロ、シート名でCSV保存するマクロが一つのマクロになっていても、分かれていてもOKです。
このようなことはできますか?
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
手順:
元データのブックを一度保存して開き直す
ALT+F11を押す
現れた画面で挿入メニューから標準モジュールを挿入する
現れたシートに下記をコピー貼り付ける
sub macro1()
dim myPath as string
dim myFile as string
dim h as range
dim s as string
dim w as worksheet
mypath = thisworkbook.path & "\"
on error resume next
kill mypath & "*.csv"
application.displayalerts = false
for each w in worksheets
if w.name <> activesheet.name then w.delete
next
application.displayalerts = true
on error goto errhandle
for each h in range("A1:A" & range("A65536").end(xlup).row)
if isnumeric(h.value) then
s = left(h.value, 8)
’CSVに書き出し
open mypath & "uriage" & s & ".csv" for append as #1
print #1, h.value & "," & h.offset(0,1).value
close #1
’シートに書き出し
h.entirerow.copy worksheets(s).range("A65536").end(xlup).offset(1)
end if
next
for each w in worksheets
w.columns("A:B").autofit
next
exit sub
errhandle:
worksheets.add after:=worksheets(worksheets.count)
activesheet.name = s
range("A1:B1") = array("date", "value")
resume
end sub
ファイルメニューから終了してエクセルに戻る
ALT+F8を押しマクロを実行すると,CSVを書き出す。
#「CSVを書き出す」のが目的で「別シートに振り分ける」こと自体に目的はないと思いましたが,まぁご相談なのでシートに書き出しも追加しました。。。と思って書き足してったら無駄に長いマクロになっちゃいました。あんまりイミなかったです。
ご回答ありがとうございます。
このマクロで処理が完了しました。
>「CSVを書き出す」のが目的で「別シートに振り分ける」こと自体に目的はないと思いましたが
その通りでした。説明がうまくなくすみません。
解決できてよかったです。ありがとうございました。
No.2
- 回答日時:
uriage20130515等の各日付のシートが、前もって手作業で作成されている場合には、マクロを使わずとも通常のワークシート関数でも日付ごとにデータを分けて抽出する事は可能です。
まず、uriage20130515シートのA1セルに次の関数を入力して下さい。
=IF(ISNUMBER(REPLACE(CELL("filename",A1),1,FIND("]",CELL("filename",A1),FIND(".xls",CELL("filename",A1)))+LEN("uriage"),)+0),REPLACE(CELL("filename",A1),1,FIND("]",CELL("filename",A1),FIND(".xls",CELL("filename",A1)))+LEN("uriage"),)+0,"")
次に、uriage20130515シートのA1セルの書式設定の表示形式を[ユーザー定義]の
0000"年"00"月"00"日の売上"
として下さい。
次に、uriage20130515シートのA3セルに次の関数を入力して下さい。
=IF(ROWS($2:2)>COUNTIF(Sheet1!$A:$A,">="&$A$1*1000000)-COUNTIF(Sheet1!$A:$A,">="&($A$1+1)*1000000),"",SMALL(Sheet1!$A:$A,ROWS($2:2)+COUNTIF(Sheet1!$A:$A,"<"&$A$1*1000000)-COUNTIF(Sheet1!$A:$A,"<1")))
次に、uriage20130515シートのB3セルに次の関数を入力して下さい。
=IF($A3="","",VLOOKUP($A3,Sheet1!$A:$B,2,FALSE))
次に、uriage20130515シートのA3~B3の範囲をコピーして、同じ列範囲の4行目以下に貼り付けて下さい。
次に、uriage20130515シートのコピーシートを作成して、それらのコピーシートのシート名を変更して、他の日付のシートを作成して下さい。
或いは、既に他の日付のシートが作成済みである場合には、uriage20130515シートのA列~B列の範囲をまとめてコピーして、他の日付のシートのA列~B列に貼り付けて下さい。
これで、日付ごとにデータを分けて表示させる事が出来ます。
尚、上記の方法は、Sheet1のA列に入力されている「日付+商品番号」の中に、同じ値が重複して入力されていない事が前提となっております。
ですから、もし、「日付+商品番号」の中に、同じ値が重複して入力されている事もあり得る場合には、補足欄等を使用してその旨を御教え頂けましたら、それに対応する方法を回答させて頂きます。

ご回答ありがとうございます。
uriage20130515などのシートが無い上に、件数が5万件程度あるデータだったので
この方法はあきらめましたが「マクロでなくても・・・」というやり方もあるのですね。
勉強になりました。
ありがとうございました。
No.1
- 回答日時:
こんいちは!
CSV形式で保存は手作業でもできると思いますので、
前半の別Sheetに振り分けだけのVBAです。
前提条件
(1)Sheet見出しの一番左が側Sheetに元データがある
(2)1行目は項目行でデータは2行目以降にある
上記前提で標準モジュールに↓のコードをコピー&ペーストしてマクロを実行してみてください。
Sub Sample1() 'この行から
Dim i As Long, k As Long, endRow As Long, wS As Worksheet
Application.DisplayAlerts = False
If Worksheets.Count > 1 Then
For k = Worksheets.Count To 2 Step -1
Worksheets(k).Delete
Next k
End If
With Worksheets(1)
endRow = .Cells(Rows.Count, "A").End(xlUp).Row
.Range("A:A").Insert
With Range(.Cells(2, "A"), .Cells(endRow, "A"))
.Formula = "=LEFT(B2,8)"
.Value = .Value
End With
Range(.Cells(1, "A"), .Cells(endRow, "A")).AdvancedFilter Action:=xlFilterInPlace, unique:=True
Worksheets.Add after:=Worksheets(1)
.Range("A:A").Copy Worksheets(2).Range("A1")
Worksheets(2).Range("A1").Sort key1:=Worksheets(2).Range("A1"), order1:=xlAscending, Header:=xlYes
For i = 2 To Worksheets(2).Cells(Rows.Count, "A").End(xlUp).Row
Worksheets.Add after:=Worksheets(Worksheets.Count)
Set wS = Worksheets(Worksheets.Count)
.Range("A1").AutoFilter field:=1, Criteria1:=Worksheets(2).Cells(i, "A")
endRow = .Cells(Rows.Count, "A").End(xlUp).Row
Range(.Cells(1, "B"), .Cells(endRow, "C")).Copy wS.Range("A1")
wS.Name = "uriage" & Worksheets(2).Cells(i, "A")
wS.Columns.AutoFit
Next i
.AutoFilterMode = False
.Range("A:A").Delete
End With
Worksheets(2).Delete
Application.DisplayAlerts = True
MsgBox "処理完了"
End Sub 'この行まで
※ じっくり考えればもっと簡単になるかもしれませんが、
とりあえずはこの程度で・・・m(_ _)m
ご回答ありがとうございます。
本件はCSVの保存というのが最終目的だったのですが、シートを分けることがいると思い込んでいたのでタイトルから質問内容とふさわしくなかったです。
シートを振り分けるお答えをいただき申し訳ありません。
一番早い回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) vbaマクロについて シート1のA列にある商品コードが シート2のB列にある商品コードに該当する場合 2 2023/05/17 13:41
- Visual Basic(VBA) 【困っています2】VBA 追加処理の記述を教えてください。 2 2022/08/26 11:42
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- Excel(エクセル) エクセルのマクロでコピー後の貼り付け先を毎回指定したところにしたい 5 2022/08/12 10:47
- Visual Basic(VBA) VBA 最終行まで数式をコピーする 3 2023/01/03 15:44
- Excel(エクセル) Excel_マクロ_複数のシートのVLOOKUPで表示された#N/A以外に色付けをしたいです 1 2023/02/16 22:37
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
セルにぴったし写真を挿入
-
【マクロ】エラー【#DIV/0!】が...
-
勤怠表について ABS、TEXT関数...
-
エクセル画像(写真)挿入
-
エクセルシートの見出しの文字...
-
【マクロ】【画像あり】関数が...
-
Excelで4択問題を作成したい
-
エクセルの複雑なシフト表から...
-
【Officer360?Officer365?の...
-
オートフィルターの絞込みをし...
-
EXCELのVBAで複数のシートを追...
-
グループごとの人数のカウント
-
エクセル
-
グループごとの人数のカウント
-
グループごとの個数をカウント...
-
エクセル GROUPBY関数について...
-
【マクロ】元データと同じお客...
-
【関数】同じ関数なのに、エラ...
-
エクセルの関数について
-
エクセルのリストについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
9月17日でサービス終了らし...
-
エクセル
-
【マクロ】WEBシステムから保存...
-
エクセルの循環参照、?
-
エクセル ドロップダウンリスト...
-
エクセルのdatedif関数を使って...
-
特定のセルだけ結果がおかしい...
-
【マクロ】A列にある、日付(本...
-
【マクロ】EXCELで読込したCSV...
-
【マクロ】アクティブセルの時...
-
【エクセル】期限アラートについて
-
iPhoneのExcelアプリで、別のシ...
-
【関数】同じ関数なのに、エラ...
-
Excelの新しい空白のブックを開...
-
【マクロ】3行に上から下に並...
-
【マクロ】宣言は、何のために...
-
VBA チェックボックスをオーバ...
-
Excelについての質問です 並べ...
-
【マクロ】アクティブセルの2...
-
【関数】不規則な文章から●●-●●...
おすすめ情報