毎日、大量のデータの加工に時間をかけてる人向けに
EXCELの便利さを伝えたい
「欲張りライフ実践家」の石川裕子です。
あなたは毎日、EXCELでたくさんのシートの
データの加工作業を2時間もかけて行ってませんか?
もしかしたら、それは5,10分で終わるかもしれません。
ショートカット(簡単なキー操作)や
マクロやVBAを使えばきっと楽にできるかも!
或る時、お客様から47都道府県のデータを
一つのシートにまとめられないかと頼まれました。
VBAを使わなくても一つ一つの都道府県のデータを
丁寧にコピーペーストすればできる作業ですが、
間違えるかもしれないし、そもそも47都道府県、
同じ作業をやるなんてとても嫌ー!!
そんな時は、EXCELのVBAで
ちょっとプログラムをつくると簡単にできます。
googleで「EXCEL VBA 複数のシートをまとめる」で
検索したらでてくる
のプログラムを参考にさせていただきます。
図のエクセルのファイルには
データの入っている「01北海道」「02青森県」「03岩手県」の
3シートが入っています。
「01北海道」シートにはA9(札幌市)~E41(中標津町)まで
地方公共団体名と各項目の数値が入っています。
「02青森県」シートにはA9(青森市)~E19(三戸町)、
「03岩手県」シートにはA9(盛岡市)~E41(一戸町)に
データが入っています。
以下のSampleプログラムを実行すると、
各シートのデータの行数に関係なく、
これら3シートのA9~最後の行のデータを
一番左の「AllData」シートに
「01北海道」~「03岩手県」の順に
まとめてはりつけていきます。
Sub Sample()
Dim sWS As Worksheet 'データシート(コピー元)
Dim dWS As Worksheet '集約用シート(コピー先)
Set dWS = Worksheets("AllData")
'集約用シートの2行目以降を削除
dWS.UsedRange.Offset(1, 0).Clear
'各シートの9行目以降のデータを、集約用シートの末尾にコピー
For Each sWS In Worksheets
If sWS.Name <> dWS.Name Then
'AllDataシート以外のすべてのシートを開く
With sWS.UsedRange
'コピー元シートにデータが1件以上ある場合
If .Rows.Count > 1 Then
.Offset(8, 0).Resize(.Rows.Count - 1).Copy _
Destination:=dWS.Cells(Rows.Count, 1). _
End(xlUp).Offset(1, 0)
End If
End With
End If
Next sWS
End Sub
そして、実はこのプログラム、
途中に空白行がなければ
問題なく、同じEXCELファイルにある
47都道府県シートのデータを
「ALLData」シート一つにまとめることができます。
どうぞ、お試しください。(2,3分程度でできます。)
しかーし、今回は、プログラムの内容を
知らせたいわけでは全くないのです。
もしexcelを使って、毎回同じ作業に
長い時間を費やしているなら、
VBAやマクロを使って、
間違いなく自動的に短い作業を行い、
余った時間を他のあなたの大切なことに
費やしてくださいね、
と言いたかっただけなのです。
EXCELは大抵のwindowsのPCには
入っているありふれたソフトです。
macにも入っていますね!
その便利さ、真価は、一つのシートで
合計や計算を行うのではなく、
大量のシート、データ(外部のCSVファイル等)
を扱う時に発揮されると思っています。
もし、EXCELでデータの加工でお困りの場合、
私にメッセージをして気軽に聞いてください。
私は、個人や小中規模の会社が
EXCELでどんなことにお困りか、
力になれるか、とても興味があります。
どうぞ、お気軽にご連絡ください