さて、
あなたならこれ何を挙げますか?(一つだけですよ!)
本の購入者の皆さんは、先日にお配りした[2020年最新版の
構文集]のテキストファイルをちょっと開いてみてください。
実に沢山のExcelVBA構文(一行一行のコード)の中で、
どれが一番重要なのか?と考えて、ちょっと捜してみて
ください。
ヒント.
「マクロの記録」では記録できないもので、且つ
頻繁によく使う構文
答えは、30秒後!(笑)
・
・
・
正解は、
n = Cells(Rows.Count, "B").End(xlUp).Row '行の最後
これです!
この答えに相応しい構文いうのは、これしかないです。
そもそものExcelというソフトの特性をよく良く鑑みて
みれば解る通り、「ExcelのVBAで最も重要な構文」とは、
この一文に尽きます。これしかないのです。
これなくしては、Excelのマクロは作れないと言っても
過言ではありません!
(屁理屈を言えば、これ無くてもいくらでもマクロは
作れはしますが笑、けどこれ使わない人は必ず難しい
VBAで書く羽目になりますから、初心者がそれをやって
しまうと、けっしてマクロの上達はできませんよ!)
私なんかは、余りに頻繁にこの構文を使いますので、
いちいち構文集開くのすら面倒なのでIMEに単語登録
をして、これは使っているくらいです。
(単語登録のやり方がもしわからないという人は、
「IMEの単語登録」でネット検索してみてください。)
で、これ正確に言うと「指定した列のデータのある
最後の行番号を取得する(上記例の場合だとB列の)」
為の構文になりますが、
これが、特に重要だと言う理由は、
Excelというソフトの特性と言いますか、Excelデータ
の構成いうのが、大概は縦長(且つ可変)だから・・・
です。
一方の、横長(且つ可変)のExcelデータいうのは、
滅多にはありませんね。
つまり、エクセルの機能には、
横方向(列方向)に、オートフィルターする機能はない。
横方向(列方向)に、集計機能は使用できない。
横方向(列方向)に、ソートもオプション使うしかない。
というわけです。
これがまさしく、Excelという表計算ソフトの特性に
なるわけですから、要するに、Excel表の横方向には
大概が項目名(固定数の)が並ぶわけです。
もし、項目が固定数じゃなくて可変(毎回、横方向
のデータ数が変わる)というデータ構成の表は実に
最悪ですから、殆ど見かけない思います。
故に、
Excelは縦方向の処理がしやすい様にと考えて出来て
いるソフトであるわけです。これ気付いてましたか?
だからこその、
n = Cells(Rows.Count, "B").End(xlUp).Row '行の最後
この構文が最も重要であるわけです。ExcelのVBAに
数々ある構文の中でも、これが最も重要な一文だと
断言します。
だから、本講座ではメルマガでもセミナーでも教材でも、
この一文の重要性を言ってきましたし、必ず毎回この文
を使ってきた次第です。
けれど、
それを、この本質的な理屈を、知らない人が多過ぎる!
Excelソフトの、そこで扱われるExcelデータの特徴を
全然わかってない人が余りにも多い思うのです。で、
皆その意識もなくVBAを組んでしまっているわけです。
つい先日にも、
For Each r In Range("$F16:$M16")
と、このようなループの書き方している人からの相談を
受けましたが、まかり間違っても、初心者が誰かに教わ
ったこの様な書き方をマネしては絶対になりません!
これはダメです。
ダメです。
です。
この相談者の方もそうでしたが、誰かのこんな書き方を
マネしている限り超簡単な基本的処理ですらマクロ作れ
ない破目に、必ず陥ります。注意してください。
なお、付け足しにはなりますが、
先ほど横長のデータは縦長に比べてレアケースだと言い
ましたが、けど、横長のデータを扱う場面もないことは
ないとは思いますので、その場合には「横/縦変換」が
手っ取り早くて便利です。
具体的には、横/縦変換したデータを中間的な作業シート
を用いて縦方向で処理をして、それをまた縦/横変換して
元に戻す、というやり方です。
この方法で、先ほど挙げた縦方向にしか使えないExcelの
各種機能がそのまま使えますので(マクロの記録でもー)、
非常にこれならラクですね。
念のため、その手順を書いておきます。
[マクロの記録]→[列を選択]→[コピー]→[ワークシート
を開く]→[貼り付け位置を右クリック]→[形式を選択して
貼り付け]→[行/列の入れ替え]→[OK]
記録されたマクロのコード例)
Sub Macro1()
Rows("1:2").Select
Selection.Copy
Sheets.Add After:=ActiveSheet
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
End Sub
(※なお、縦/横変換して戻す時も、上記の列を行選択に
変えてもう一度マクロの記録からやればよいだけです。)
あと、もう一つお勧めしたいのがこれです。
今あるデータの下へ次々とデータ追加をする際に、この
とっとした応用も知っておくと大変便利ですね。
と言うことで今回のテーマ、最も重要な構文は?
と問われた場合には、
n = Cells(Rows.Count, "B").End(xlUp).Row '行の最後
必ず真っ先に、この1行が頭に浮かぶ!(書ける必要は
全くないですが、)というようにしておいてください。
これは、ほんと重要ですよ。これぞ、キング オブ ザ・
「エクセルVBA」ですね!
本日は、以上です。