-------------------------
今日おすすめのコンテンツ
-------------------------
エクセルをよく使い慣れた皆さんであれば、
エクセルでセル選択の重要性はよくわかってる
思いますから、
上記のページに書いてあるマクロでのセル選択方法
のあれやこれや、よくこれ押さえおいてくださいね。
ちなみに、
私は、普段の仕事でVBAの開発をする際には、
上記にも出てくる Resize というやつを多用する
ことが多いのですが、
それに更に、その先に出てくる
ActiveCell.Resize
これを使うと、ユーザーの自由度が上がります。
なので、特に他人が使うマクロを作る場合には、
ユーザーの(マクロ使う人の)使い勝手を考えて、
いろいろ選択の仕方を検討してみてください。
世の中のソフトの使い勝手の良し悪し言うのは、
作り手の良し悪し(どれだけ使う人の目線に立って
考えてつくったのかー)、それで決まります!
それと、一つ「裏ワザ」的な話にはなりますが、、
マクロが少々できるようなってきた皆さんは、
上記のページに出てくる Range や Cells という
やつをよく使う思いますけど、
言ってみれば、
Range は縦方向に処理する場合に便利なもので、
Cells は横方向の処理に便利です。
縦方向に処理する場合、
データの数が(行数が)分からない(毎回変わる)
と言った場合に、この講座で何度も何度も繰り返し
勉強してきた「固定を可変に変える」のやり方の、
Range("A2").Select → Range("A" & i).Select
これで、ループの中が単純な変更で済むわけです。
が、これが横方向にデータ数が(列数が)毎回変わる
という場合になりますと、上記のような Range では
可変にはできませんですから、Cells の方を使うこと
になります。
けど、元来、エクセルいうソフトは縦方向の処理に
優れたソフトです。(例えば、オートフィルターは
横方向には処理出来ない、とか。)
それは、Excelがと言うよりもデータベースの宿命事
なので、例えば、DBソフトのAccessで横方向が(項目
数が)その都度可変というデータ構成はないわけです。
Excelの場合は、稀に結構よくある横長の表で、
しかも、列数がその都度変わる表を処理する場合です。
その場合、
作業用のシートを1つ設けて、
そこに元データを縦横入れ替えて貼り付けて、
作業シート上で縦長でーたとして処理をして、
そして元のシートに戻す、
というやり方です。この方法ですと、
横方向には出来ないオートフィルターもできますし、
並べ替えの機能もわざわざオプション設定の必要もなく、
何でも普段通りに(縦長で)処理することが出来る
ようなるわけです。
第一、マクロの記録で書いた Range の部分を
わざわざ Cells に書き直すといった手間も掛かり
ませんから、直し間違えのリスクが減らせます。
手順としては、下記の貼り付け操作にオプションを
指定したコピッペをマクロの記録するだけです。
(×往復2回)
「貼り付け」→ 「形式を選択して貼り付け」→
[行/列の入れ替え]にチェックを入れる。
そうすると、具体的に作ったコードの例で見ると、
(以下は、3行の可変横長データでの例です。)
Sub Macro1()
Sheets("Sheet1").Select
Rows("1:3").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Sheet2").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
End Sub
Sub Macro2()
Sheets("Sheet2").Select
普段の縦長データの処理と同じ
End Sub
Sub Macro3()
Sheets("Sheet2").Select
n = Cells(Rows.Count, "A").End(xlUp).Row
Range("A1:C" & n).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Sheet1").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
End Sub
Sub 実行マクロ()
Call Macro1 '横を縦にコピッペする
Call Macro2 '縦方向に普段の処理をする
Call Macro3 '縦を横に戻すコピッペをする
End Sub
こんな具合となりまして、上記の Macro2 の
「縦長データの処理」の中身は、普段と全く同じに、
オートフィルターなど何でも使えるようなるわけです。
ベテランの皆さんで、横長データ、且つ列数が不特定の表を
マクロで処理しなければならない場面がもしありましたら、
この方法、是非お試しあれ!