GoGoマクロのブログ

初心者向けマクロ講座「Go!Go!マクロ」の筆者三太郎の公式ブログです。

GoGoマクロ

エクセル仕事の自動化が誰でもできる本

変数のタイミング知ってる?

2020-06-21 08:07:22 | マクロ作成のコツ

Go! Go! エクセルマクロをはじめよう!

【質問コーナー】

> n = Cells(Rows.Count, "A").End(xlUp).Row
> この構文もどこに入れていいのか不明です。


ここのn、すなわち変数いうのは、入れ物ですね。

例えば、

なにも入れてないコップ(入れ物)の水は飲めません!

 

コップでも何でも同じですが、入れ物というのは、
必ず中に何かを「入れてから使う」というものです。

変数も、必ず入れてから(代入して)使うものです。

必ず、変数=○○ が先です。

で、

> n = Cells(Rows.Count, "A").End(xlUp).Row

これ(データの最後の行数をnに代入する)
をループで使う場合なら、

For i = 1 To n
n = Cells(Rows.Count, "A").End(xlUp).Row

この順番で書いてしまうと、最初の

    For i = 1 To n

この n にはまだ何も入れていませんから、
空のコップを飲もうとしているよいうなものです。

だから、

入れ物 n に何かを入れるのはこの前でなければ
なりません。入れるのが先です。

つまり、

n = Cells(Rows.Count, "A").End(xlUp).Row ←コップに水を入れる
For i = 1 To n ← その入れた水を飲む

です。
「コップの水は、入れてから飲む」この順番です。


この基本さえ分かって単純に(現実で)考えたなら、
何も難しいことはない思いですね。

 

 

■初心者(入門者)に最適な隠れた名書です !

エクセル仕事の自動化が誰でもできる本(日経BP社)

 

VBAでよくある勘違い

2020-06-10 11:03:44 | マクロ作成のコツ

「VBAの基礎を分かっていないから思うようなマクロが組めない・・・」

って、よく勘違いしている人をネット等でも見かけますが、、

VBA言語に詳しくなれば思い通りにマクロが組める?
なんてことは、断じて有り得ませんよ。

どんなに日本語が詳しい人でも、それで小説が書けますか?

Excelマクロのプログラミングの場合も、ストーリー(ロジック)が肝心です。
言語は二の次、三の次。

ストーリーが上手くなければ小説は面白くはならないけれど、
下手な日本語であっても面白いストーリだったら
その小説は読んで面白いわけです。

ただの言葉遊びに長けた人の書いた文章なんか、
面白くも何ともないのと一緒で、

ただVBA言語に詳しいだけの人が書いたマクロは、
仕事でなんの役にも立ちません!

だから、特にの皆さんは、言語に詳しくなんかならなくて大丈夫ですから、
ストーリー(ロジック)が立てれることに力を入れて
マクロの勉強はして行ってくださいね。 

 

▼関連記事

「マクロの上級者」と「VBAの上級者」その違いとは・・・

 


固定→可変のコツで、らくらくマクロ作りしましょう!

2020-06-03 19:24:14 | マクロ作成のコツ
これぞ「マクロ作りの肝!」という話をしてみたいと
思います。


以前にも書きましたが、「マクロ」っていうのは
主にCAD(設計図を描く為のソフト)の世界で発展を
遂げてきたものであります。

読者の皆さんは、Excelの操作が大変だ!面倒だ!だから
マクロの勉強でもしてみるか、ということで、このような
メルマガを読んでくれているのだろうと思いますが、、

こう言っては何ですが、設計図を描くCADソフトの大変さ
と言ったら到底、Excel操作の比ではありません!

Excelが誕生するずっと以前から、そうしたCADの操作に
苦労してきた人達の間で、広く使われて広まったと言うのが
マクロ(操作の自動化)になるわけです。

で、よくExcelVBAの世界では、「マクロの記録」をただの
辞書だという認識で使ってる人が多くおられますが、、

それだと、辞書持ち歩いての学校英語の勉強と一緒なので、
ただ辛いだけですね。

それ故に、Excelの世界ではどうにもマクロが広まらない、
Excelではマクロの利用者極めて少ない現状になってる、
その原因なのだろうと思われます。


話戻しますが、

それで「マクロの記録」(CADで言う所のコマンド記録)
をうまく組み合わせて便利に使う方法いいますのが、Excel
の誕生以前から皆がやってきたマクロ作りの作法です。

その為の(マクロの記録をただの辞書ではなくー、便利な
活きた道具にする為の)肝となりますのが、以下にお話し
する

記録したコードの「固定部分の可変化」というものです。

今回お配りする構文集の最新版には、その様な、すなわち
「固定の部分」を「固定じゃない様に変える」その書き方
集というのをまとめて新たに掲載しましたので、これは

「固定→可変」の方法をまとめた構文集(コード集)です。

つまり、これが「マクロの記録」をフル活用してらくらく
マクロ作りをする為の肝となる、Excelが生まれるずっと前
の昔から、皆がやってきた正しいマクロの作り方の方法
になります。

で、「固定→可変」とは何か?と言うことなんですが、

この最新版にどんなものを載せのたかを、具体的に詳しく
以下に説明します。

まず、たとえば、ループを回す際の回数の場合です。

 For i = 1 To 20

これは、20回の固定です。ループは1~20回、回ります。

 For i = 1 To 100

これも100回の固定です。同様にループは100回回ります。

で、データ数がその都度変わるという場合には、これを

 For i = 1 To 100
↓
 n = Cells(Rows.Count, "B").End(xlUp).Row
 For i = 1 To n

この様に、いつもここのレッスンでやっているこの
構文(指定した列のデータのある最後の行までループを
回す処理の意味。)

これが、行方向に関するループ処理での「固定→可変」
のコードの基本的な直し方になりますので、

これで、データ数が毎回変わるシートを処理する際にも、
プログラムの修正は一切不要、そのまま(別のデータで)
データ処理が自動化できるようになります。


また、シートが固定名の場合には、たとえば、データの
並べ替え(ソート)をマクロの記録で記録した場合に、

 ActiveWorkbook.Worksheets("Sheet1").Sort・・・

といったコードが記録されてきますが、

ここに出てくるシート名の部分の"Sheet1"、
これは固定の名称となっていますので、このままだと
"Sheet1"上のデータしかソートはできないマクロです。

ですから、
ここも「固定→可変」にちょっと以下の修正をして

 ActiveWorkbook.Worksheets("Sheet1").Sort
↓
 ActiveWorkbook.ActiveSheet.Sort

(Worksheets("Sheet1")をActiveSheetに直すだけ)

数か所ある"Sheet1"の部分を探してこう直してやれば、
いま開いてるシートのデータに対してのソート処理を自動化
できるマクロに簡単に変身させることができます。

これが、シート名の「可変方法」の一つです。

でもう一つ、シートの「可変方法」として背番号を使います。

エクセルのBookに存在する各シートには、(名称に関わらず)
左から順番に内部的な番号が割り振られています。
一番左側にあるシートがSheets(1)です。

この番号を使って、たとえば

 ActiveWorkbook.Worksheets("Sheet1").Sort・・・
↓
 Sheets(i).Sort・・・

(ActiveWorkbook.Worksheets("Sheet1")をSheets(i)に直すだけ)

これで、iで回すループの中で、全てのシートを次々とソート
していく為のマクロが容易に組めます。これもシート名の
「可変化」です。

ちなみに、シートの数は Sheets.Count で取得できますので、
下記の使用例(構文集に掲載)を参考に、これで「シート数
の可変」に対応したマクロも容易に組むことが出来る思います。

使用例)
Sub Macro1()
    n = Sheets.Count
    For i = 1 To n
        Sheets(i).Select
        MsgBox ActiveSheet.Name
    Next i
End Sub

こうすると(シートの背番号を使うことで)、沢山のシートで
同じ処理をしたいと言った場合にも、マクロで全シートの一発
処理が可能となりますから、同様なデータのシートが沢山ある
Bookを扱っている人には、これは大変便利ですね。

初心者の方は、シートを複数作って(適当にシート名変更して
みてー)、ぜひこれ試してみてください。


以上のデータ数やシート数の「固定→可変」の例の他にも、

・Book数の可変のやり方だったり、
・図形やグラフについての可変だったり、

も、色々構文を載せています。