さて、
あなたならこれ何を挙げますか?(一つだけですよ!)
本の購入者の皆さんは、先日にお配りした[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」ですね!
本日は、以上です。
最近のテレワークの普及もありまして、電子化
(ペーパーレス)の流れの中で、ますますPDFへの
ニーズが高まって来ている感があります。
そこで本日は、コロナ禍でタイムリーな
タイトルのこのテーマを取り上げてみます。
で、Excelのデータ(請求書等)をPDFファイルに出力
するいうのは至って簡単ですね。
1枚だけなら印刷機能で手で出せばいいだけです。
この場合、マクロが便利なのは連続での出力です。
顧客数が数十件、数百件、数千件と多くなってくると、
Excelの請求書を1枚1枚手でPDFファイルに落して行く
というのも大変です。
なので、今日ご紹介する下記の内容はそれを1発で、
瞬時に全て自動で出したいという人にはおすすめの
コンテンツになります。
で、これも要するに、ほぼ「マクロの記録」だけです。
そこから、連続で全シートを一発でPDFファイルに
出す所から、それを
PDFファイルをシート名で自動出力するマクロにも、
PDFファイルを自動採番で自動出力するマクロにも、
容易に色々と応用していけるわけです。
で、ここでの学習ポイントは、
"C:\Users\santa\Documents\Book1.pdf"
↓
"C:\Users\santa\Documents\" & ActiveSheet.Name
"C:\Users\santa\Documents\Book1.pdf"
↓
"C:\Users\santa\Documents\" & i
など、この手の「書き換え方」いうのをマスターすれば
よいだけです。
あとは、文字列や変数名を&マークで繋けていく書き方を
どんどん書いて早く慣れる、その繰り返し練習です。
理屈の勉強に固執してしまう人はダメですね。
野球でも、素振りやキャッチボールしないで上手くなる
選手なんて居ませんから、基本的なやり方を習ったら、
あとは考えるより練習あるのみです!
これらの書き換えに慣れてきてこれが得意になってくると、
あとは、先日にメルマガ読者の皆さんに配布した
「固定部分を可変に直す」との組み合わせにて、
初心者でも簡単、容易に「マクロの記録」からの応用が、
得意になっていきます。マクロの習得はその流れですね。
以上、コロナ禍で今後ますますの「デジタル化社会」を
迎えるにあたり、今日ご紹介した上記PDF出力のこの方法
覚えておくと、何かと便利に使えるかと思います。
よくこのタイトルのような質問を受けます。
これは、気持ちはよくわかりますが、
それはもう少し先に考えることであって、
まだまだ初中級者のレベルの段階では
むしろ余りスマートさにはこだわらずに、
結果オーライ主義という感じでやっていったほうが
間違いなく、上達は早いものです。
それは、言うなれば
自分のデスクの上に山積みになった資料や
パソコンの中にもごちゃごちゃになって
雑多に置いてあるデータやファイルが、
普段からそのように身の回りの整理整頓が
中々できていないでごちゃごちゃしてる人が、
「ちゃんと整理してからでないと仕事をしてはいけないよ!」
と、もし上司にそう言われたら
何も仕事が進まなくなってしまうのと一緒なので、
それを(そんな過酷なミッションを)、
自らで自分自信に科してしまうと、
必ずマクロが作れなくなっていきます。
PCの中や机の上がきちんと整理できた状態で
バリバリ仕事の出来る人になりたいのは
理想ではあるんですけど、
それは将来の目標であってまだ先の話なので、
現段階では、
不恰好でいいからどんどん作る!
それに徹していってくださいね。
不恰好に思えるコードをもっとスマートに書き直すために
かかる時間を考えたら、
その時間で別の便利なマクロがもう2個や3個は
作れてしまうだろうと思いますので、、
そのほうがよっぽど自分の為にも、自分の成長になります。
そのマクロで自動化して得られた時間もお得に使えます。
つまり、
スマートなプログラムのコードを書くというのは、
簡単なようで、それはたとえプロであっても
そんなに出来ているプログラマーというのは少なく、
PC内のデータ整理と同様に、
実に高度な技術と精神力を要するものだと
ご理解ください。