マクロVBA講座ブログ

事務職をしていて身についたマクロVBAを紹介する人

【Excel】初めてのマクロVBA制作【基本編】  - For文 -

早いこと第4弾となりますが、今回はマクロを組むのに重要な For文を説明していきたいと思います。
リストや集計表ではかなり使用する動作ですので是非とも覚えていってください。
まぁ、覚えられなくともその都度調べて組むことができるようになれば正直問題はないのかなと思います。


For文とは?

マクロVBAを組むうえで繰り返し処理を行う時に使用される動作が For文となります。
必ず変数を使用することとなりますが、詳しい説明は今回はしません。なので、今回は For文の一部にこんなものを使う必要があると思っていてください。

また、基本的な動作としては For ~ Next の間の処理を決まった回数繰り返す動作となります。
コード例としては以下となります。

【コード例】

Sub Test_For()

Dim i As Long

For i = 1 To 10 Step 1
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'この間の処理を繰り返し行います。
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Next i

End Sub

入力の基本としては、「For i = 最低値 To 最大値」となります。
上記では「i = 1 To 10」にて 1 ~ 10 になるまで処理を行います。10よりも大きい数字になると繰り返し処理は終了となり Next 以降の処理が開始します。また、「Step 1」は 1 ~ 10 になるまで1ずつ足していく数字となり「Step 1」は省略することができます。また、1つ飛ばしの処理を行う場合は「Step 2」とすると1つ飛ばしが可能となります。
詳しい説明は次の項目を見ていただければと思います。

nekunomon.hatenablog.com

■For の使い方■

基本例①:通常処理

1つ目は通常の処理である、1つずつ処理を行う動作となります。
【コード】

Sub Test_For①()

Dim i As Long

    For i = 1 To 10

        Cells(i, 2) = i

    Next i

End Sub


【結果画面】

上記のマクロを起動するとセルの B1 ~ B10 に i の中身である 1 ~ 10 までの数字が入力される処理となります。最大値が決まっているリストや連続の番号を振るときによく使われます。また、横にも移動が可能となり上記のコードを Cells(2,i) に変更すると 2 行目に連続の数字が横に入力されます。

基本例②:Stepによる処理

2つ目は、1つ以上飛ばしの処理となります。
【コード】

Sub Test_For②()

Dim i As Long

    For i = 1 To 10 Step 2

        Cells(i, 2) = i

    Next i

End Sub


【結果画面】

上記では1つずつ飛ばした処理となります。奇数だけの条件で入力する場合は上記でもいいですが、偶数だけの条件としたい場合は 「For = 2 To 10」と最低値を偶数にするといいでしょう。また、Step数を 3 とすると 2つ飛ばしの処理を行う事ができます。

基本例③:縦横の処理

3つ目は For を2つ使った縦と横の移動処理となります。
【コード】

Sub Test_For③()

Dim i As Long
Dim j As Long

    For i = 1 To 10              '横の移動
        For j = 1 To 13          '縦の移動
        
            Cells(j, i) = j      'jの入力
        
        Next j                   '縦の繰り返し
    Next i                       '横の繰り返し

End Sub


【結果画面】

上記のコードは、縦の処理が終わった後に横へ移動する処理の流れとなります。
For を2回使う場合は、2回目のFor文の処理が終わるまで1回目のFor文は保留となります。

結果画面にて説明すると 「A列の 1 ~ 13 まで入力」「 B列へ移動し 1 ~ 13 を入力」...をA列から数えて10回繰り返しています。今回は表全体へ入力を行っていますが、条件を指定して入力を行うといった使い方がメインになるかと思います。

■実践応用■

応用例①

以下の表では点数を元に"赤点"を入力するマクロを組んでいます。

【表】


【コード例】

Sub Test_For_RED()

Dim i As Long

    For i = 1 To 10
        
        If Cells(i, 3) <= 30 Then
        
            Cells(i, 4) = "赤点"
        
        End If
    Next i

End Sub

※ If文 : 指定された条件を元に間の処理を行うか判定する動作


【結果画面】


上記のコードは For文と If文を使っての赤点判定となります。
このくらいの内容であれば関数を使用した方がいいと思いますが、入力と同時に変えたくないという場合はこのようなマクロがあると変わることがないので1つの方法としてはありかと思います。

応用例②

応用例①のさらに実用性を上げたバージョンが以下の表となります。
各教科の赤点判定と合計を算出するマクロとなります。

【表】


【コード例】

Sub Test_For_RED()

Dim i As Long

    For i = 4 To 13
        For j = 4 To 12 Step 2
        
            If Cells(i, j) <= 30 Then
        
                Cells(i, j + 1) = "赤点"
        
            End If
        
                Cells(i, 14) = Cells(i, 14) + Cells(i, j)   '合計の加算
        
        Next j
    Next i
End Sub


【結果画面】

上記では、For を2つ使い赤点の判定を行っており Step にて判定箇所を飛ばしながら"赤点"の入力を行っています。また、Cells 内に +1 の計算式を追加することで隣のセルを指定し"赤点"を入力しています。隣を指定する方法として offset もありますが範囲指定の場合はすべてずれてしまう点があるため今回は計算式を追加することで解決しています。

合計に関しては点数が書かれたセルと合計が書かれたセルを足して合計を算出しています。変わった計算式かと思いますが、この算出方法はマクロVBAでは他の処理で使用するため覚えておくといいでしょう。

まとめ

今回は For文を使った繰り返し処理を説明してきましたが、繰り返し処理はこれ以外にも存在しています。ただし、使い方を間違えると永遠に処理をし続けて Excel が落ちるなんてこともあります。
そういった意味では For文のように最大値を決めて動作させる方が安心できます。
ただ、最大値が決まっている事は少なくリストの追加が発生するため For文だけでは対応できない処理もあります。毎回、マクロを修正してもいいのですが作った人がいなくなった時に残された人のことを考えるとそれはおすすめできないためもっと拡張性が高いマクロを作る必要があるでしょう。
今後の記事ではマクロを組めない人でも設定をするだけで使いやすく拡張性があるものも紹介していきますので期待してお待ちいただけると幸いです。

では、今回の記事はここまでとなります。
次回は If文を使った分岐処理を説明していきます。

ここまで、見ていただきありがとうございました。

【Excel】初めてのマクロVBA制作【基本編】  -Range・Cells -

日に日に夏が近づいていますが、エアコンをつけるか悩んでいる今日この頃です。
皆さんは体調に気を付けてくださいね。

では早速、第3弾の内容はマクロを作るうえで必須の Range・Cells の使い方について説明していきます。


Range・Cellsとは?

前回の最後に少しだけ触れましたが、Range・Cells と言うのはどちらもセルを指定する動作です。
人の手で行う場合はセルをクリックする動作が一番近いかと思います。
この動作がなければ文字を入力したり、色を付けたりと Excel の他の動作を行う事ができません。

ではなぜ指定方法が2つもあるのか?

その疑問にお答えすべくそれぞれの特徴を説明していきましょう。

マクロを作る場所に関しては前回の記事をご覧ください。
nekunomon.hatenablog.com

■Range の使い方■

Range による単体指定

1つ目は Range の基本である単体を指定する以下コードをご覧ください。

【コード】

Sub Test_Range()

Range("B2") = "Test_Name①"

End Sub

※""(ダブルクオート):囲んだ範囲を文字として指定する。
※=(イコール):ここでは左のセルに対して右の内容を入力する動作。

【結果画面】

上記のマクロを起動するとセルの B2 に「Test_Name①」が入力されるコードとなっています。
内容はいたってシンプルで、 Range の後に ( ) で囲んだセルの位置に入力するコードとなっています。
また、注意点として""(ダブルクオート)に関しては必ず入力してください。理由を簡潔に説明すると文字として指定していないとどこに入力していいのか分からなくなりエラーとなってしまうのです。
(詳しくは変数についての記事を上げた際に説明いたします。)

Range による範囲指定

2つ目、Rangeで隣接した範囲を指定するコードは以下となります。

【コード】

Sub Test_Range()

Range("B2:C4") = "Test_Name②"

End Sub


【結果画面】

複数の指定の仕方として、( ) 内に指定したセルとセルを「:」(コロン)で繋げるとまとめて入力することが可能となっています。
上記コードだと、B2 ~ C4 までの範囲に文字を入力する動作をしています。
私の経験では文字をまとめて入力することはありませんでしたが、塗りつぶしやコピーまたは書類の一部の範囲を空白にするといった使い方をしていたコードになります。

Range による離れた範囲指定

3つ目は離れた単体の範囲を指定するコードとなります。
【コード】

Sub Test_Range()

Range("A2,B3,C4,C5,E8") = "Test_Name③"

End Sub


【結果画面】

複数の指定の仕方はもう一つあり、離れたセルに対して指定する場合は「,」(カンマ)で繋げると離れたセルにも同じ文字を入力することが可能です。
上記コードだと、A2・B3・C4・C5・E8 にそれぞれ同じ値を入力しています。
書類に名前を複数入力する場合や複数の同じタイトルを離れたセルに入力する際に応用できるコードになるかと思います。

■Range の特徴■

ここまでで、Range の使い方について説明を行いましたが Range のメリット・デメリットはもちろん存在します。ここでは特徴を交えて説明いたします。
メリットとしては、範囲が指定できる点・コードを見た場合の分かりやすい点があげられます。これから説明を行う Cells には範囲を指定する機能が無いためこれは Range 固有の使い方となります。もし、Cells で範囲を指定する場合は Range を使うことになるためあらかじめ覚えておくと良いでしょう。
逆にデメリットは、移動を行う動作は苦手としている点になります。
マクロを組む場合はセルを移動しながら処理を行っていく事を目的としている場合が大半を占めています。
そのため、Range を使う場合は入力セルが固定されてる状況が望ましいでしょう。
例えば日付を入力するセルだったり決まった場所に名前を入力する場合だったりと状況は様々ですが固定化されたセルのみを扱う様にしましょう。

メリット

 ・コードを確認した際にどのセルを対象としているのかが分かりやすい。
 ・まとまった範囲や離れた範囲を指定できる。

デメリット

 ・上下左右の動きを苦手としている。

■Cells の使い方■

Cells には使い方がほぼ1つしかないと言っていいほど範囲の狭いモノとなっています。
ですが、Cells が得意とする動作があるためそれを含めて説明していきます。

Cells による単体指定

まず、Cellsの使い方として以下のコードとなります。

【コード】

Sub Test_Cells()

Cells(2, 3) = "Test_Name①"

End Sub


【結果画面】

上記のコードだと C2 のセルに入力していることが分かります。
Cells の内容を一つずつ見ていくと 2に該当する箇所が "行" 、3に該当する箇所が "列" となります。
Range と違って2行目、3列目(C列)の交わるセルといった指定の仕方となります。
また、Range とは違う点として行と列の指定する順番が逆になっています。
仮に、Range("D7") とした場合は Cells(7,4) となります。

Cells による範囲指定

では、Cells で範囲を指定する場合はどうすればいいのか?
答えは以下のコードとなります。

【コード】

Sub Test_Cells()

Range(Cells(2, 4), Cells(3, 5)) = "Test_Name②"

End Sub


【結果画面】

指定方法としては、2行目、4列目と3行目、5列目をそれぞれ指定して範囲を Range で囲っている状況となります。Cells は1つのセルしか選択できない特性上、このように Range を使用しないと範囲指定ができません。

Cells による移動指定

Cells には移動しやすいといった特徴があり Range に比べると縦横の移動は簡単に行う事ができます。
ただし、この説明には For文や変数が含まれるため少し難しい内容となります。
For文や変数は次回以降に説明を行うのでここでは分からなくても問題ありません。

【コード】

Sub Test_Cells()

Dim i As Long

For i = 2 To 6
    Cells(i, 4) = "Test_Name③"

Next i

End Sub

※For :決まった回数を繰り返す処理

【結果画面】

上記の動作では For文や変数を使用していますが、注目すべきは Cells の ( ) 内の数字になります。
( ) 内の片方が変数となっており i には 2 ~ 6 までの数字が入る処理を行っています。
結果だけ見ると範囲を指定しているように見えますが、For文によって1つずつ文字を入力している処理を行っています。分かりやすく分解するなら以下のコードと同じになります。

【コード】

Sub Test_Cells()

Cells(2, 4) = "Test_Name③"
Cells(3, 4) = "Test_Name③"
Cells(4, 4) = "Test_Name③"
Cells(5, 4) = "Test_Name③"
Cells(6, 4) = "Test_Name③"

End Sub

上記のような指定方法だとマクロを組むのも億劫になってしまいますが、他の動作と合わせると縦横に動かしやすく1つずつセルを指定することができます。

■Cells の特徴■

Cells は少し使いずらい印象を持たれますが、Cells にもメリットがあります。
メリットとしては、縦横へ動きやすい点・セルを1つずつ処理しやすい点があげられます。
1つずつ入力処理が必要な時に使いやすく移動しやすいといった特徴があるためマクロを組むほとんどの場合に使用されるかと思います。また、デメリットとしては範囲を指定できない点になります。
範囲を指定する場合は必ずと言っていいほど Range を使う必要があります。使い方の3つ目のように1つずつ入力するやり方もありますが、処理時間が掛かってしまうためできる限り Range を使うといいでしょう。

メリット

 ・縦横へ動かしやすい
 ・セルを1つずつ処理できる

デメリット

 ・Cells 単体では範囲指定ができない

まとめ

今回はマクロの基礎中の基礎を説明しました。
2種類ほど指定の仕方がありそれぞれに特徴がありますが、人によって「コードは Range で統一した方がいい」「Cells で統一した方がいい」と言われています。ですが、私としてはコード内でも使い分けができていれば混ざっていても問題ないかと思っています。
Range はコード内でも見やすいですし、Cells は動かしやすいためそれぞれの特徴をもとに組むことができれば逆に見やすいコードを作る事ができると思います。
なので、見やすいコードを見つけるためにも是非とも自分なりに工夫したマクロを組んでみてください。

では、今回はここまでとなります。
次回は For文について説明をしていくので良かったら次回も見ていってください。

ここまで見ていただきありがとうございました。

【Excel】初めてのマクロVBA制作【基本編】  - 制作準備 -

ご訪問ありがとうございます!

第2弾はマクロVBAの準備をする内容になります!

前回の記事ではマクロVBAとはどんなものなのかを説明したので早速、制作場所の説明と簡単なマクロVBAを書く内容を説明していきたいと思います!

 

 

 

普段Excelを使う中でマクロVBAの制作場所はどこにあるのかから2つご説明いたします!

Excelの設定によっては場所が違う事もありますが、個人的におすすめは②の方法なので是非とも参考にしてみてね!

 

①リボンからマクロ制作画面を表示する方法

上部リボンから「開発」⇒「Visual Basicという場所を探しそこをクリックしてください。

※もし「開発」が見つからない場合は以下の方法を試してみてください。

 1.「ファイル」タブ⇒「オプション」⇒「リボンのカスタマイズ」

 2.[リボンのユーザー設定] の [メイン タブ] の下 [開発] チェック ボックスにチェック

 

 

そうすると、別ウィンドウで「Microsoft Visual Basic for Aplication」が表示されます。

基本的にはここでマクロVBAを制作していく画面となります。すぐに開けるようにリボンのカスタマイズ設定をすることをお勧めします。

 

次に入力するための空白のモジュールを作成していきましょう。

モジュールとは、マクロVBAを入力する入れ物となります。例として時計の外側だけの部分と考えてみると分かりやすいかもしれません。

 

左側の上部、「白い枠を右クリック」⇒「挿入」⇒「標準モジュール」から空白のモジュールを作成します。

 

そうすると、灰色だった枠に入力画面が表示されます。これでマクロVBAを制作する準備が整いました。

※灰色の枠で小さいウィンドウ状態の場合は最大化すれば以下の状態となります。

 

②ボタンを作成してからマクロ制作画面を開く方法

まずは「挿入」⇒「図形」からボタンになりそうな好みの図形を挿入してください。

次に作成した「図形の上で右クリック」⇒「マクロの登録」からポップアップを表示します。

 

マクロの登録ポップアップが表示されたら「新規作成」があるのでそれをクリックすると直接Visual Basic画面を開くことができます。

 

すると以下画像のようにモジュールを作成する手間が少しだけ無くなり入力画面が直接開かれた状態から始めることができます。

 

③実際に動くマクロVBAを書いてみよう!

今回は複雑なマクロVBAは作成しませんが、これから開発を行うに当たっての儀式を皆さんには行ってもらいます。

それはマクロVBAを使って「Hallo,world!」をセルに入力するといった内容です。

初めてプログラムに触る人でも、新しい言語に触る人でも、このテストは欠かせません。いわゆる、通例の儀といったところです。

 

プログラムの内容は以下になります。

Sub テスト()

    Range("B2") = "Hallo,world!"

End Sub

※②から作成した人はすでに Sub ~ End Sub が入力されているのでそのまま間に入力してもOK。

 

次にボタンへと動作の割り当てを行います。

②の説明にも被るので若干省略、「図形の上で右クリック」⇒「マクロの登録」⇒「マクロ名の下の一覧から該当のマクロ」を選択  ⇒「OK」

 

これで図形にマクロを割り当てることができました。

では、図形の選択状態を解除(セルなどをクリックして解除)してから図形をクリックしてみましょう。

 

B2のセルに入力されていれば成功です!

これであなたもプログラムの世界へ一歩踏み入れました!

おめでとうございます!

 

まとめ

今回の重要ポイントは以下

・マクロVBAを組む時はVisual Basic画面

・ボタンから作成すると少しだけ楽に作れる

・簡単なマクロを使って儀式を行った

 

今回はマクロの事前準備と儀式を行ってもらいました。

プログラムを組む時の一番分からないところとすれば「どこに書けばいいのか分からないから作れない!」かと思ったため今回のメインで説明しました。②のやり方に関しては自分で作った時にちょっとだけ楽できるじゃん!と思ったため取り入れた内容となっています。

 

では、次回は Range、Cells の使い方について説明していきます!

ここまで読んでいただきありがとうございました!次回も見てもらえれば幸いです!

 

 

【Excel】マクロVBAとは?【基本編】

ご訪問ありがとうございます!

第1弾はマクロVBAとは何の事か分からない人へ分かりやすい説明をしていく内容となります!

もし、過去にマクロVBAに挑戦してみたけど断念した人や初めて聞いた人は是非最後まで見ていってもらえると幸いです!



マクロVBAとはいったい何?

そもそもマクロ『複数の操作を呼び出す機能』と言われています。

意味としては、複数の手作業をまとめて自動で行う事を指しています。

例えるならコンビニのコーヒーマシンをイメージしてもらうと分かりやすいかと思います。

カフェオレの場合ですとボタンを押した後に豆を挽く、お湯を注ぐ、ミルクを注ぐ、出来上がるといった一連の『動作』を自動で行ってくれる機能がマクロに近いです。

手作業でカフェオレを作ろうとするとお湯を沸かすところから必要になりますし、豆を挽くのにも時間がかかります。そのすべての動作を出来上がるところまで行っているため広い意味ではコーヒーマシンはマクロと言えます。

つまりマクロは自動で完成品を作る機能 であり人の手で行う作業を代わりに行ってくれる存在です。

 

それではVBAとは何なのか?

こちらはVisual Basic for Applicationsの略称でExcelでマクロを作る事ができる機能でありプログラム言語の一つです。

一般的にExcel上でのマクロと呼ばれているのはVBAで組んだプログラムを指している場合がほとんどなので名前を憶えてもらえていないちょっと不憫な子ではあります。

不憫ではありますが、プログラムを組めんでしまえばExcelの作業を自動で行ってくれるとっても便利な機能です。

 

私の経験上で便利だと感じたポイントは何よりも作業時間を短縮できる所です。

3時間かかる作業を10分にしたり、データサイズが大きくExcelの読み込みに時間がかかる内容もVBAで数秒にしたりと非常に便利かつ楽にデータを作成することができます。

私はこれで毎日定時で帰っています(笑)

 

どんな事ができるの?

時短ができると前述しましたが具体的にどんなことができるかと言うとExcelで行っている手作業がほぼすべて可能です。

例えば、入力・転記・計算・検索・集計etc...を行う事ができます。

...これなら関数でもできるのでは?と思った人もいるかもしれませんがこれだけではありません。完成したデータをテキスト、PDF化したり、他のExcelとして保存を行ったり、さらにはフォルダを作成して完成データを格納したりと関数ではできない作業まで行ってくれます。

 

また、関数を大量に入力したExcelとマクロで入力したExcelとではデータのサイズも大幅に異なります。例えば関数含みのデータ20MBをマクロで作成すると約1MBまで小さくできます。サイズが小さいとExcelを開くまでの時間も短いですし、PCの容量も減らすことができます。

 

プログラムだから難しい?

最初にプログラム言語と聞いてマクロを作るのは難しいと感じた人はいるかもしれませんが、そんなことは全くありません。

例としてコーヒーマシンを挙げましたが、『複数の動作』をまとめてみると難しく感じてしまいます。さすがの私も全体を見るのは難しいと感じます。

ですが、1つの動作ならどうでしょうか?

「挽く」と聞いて難しいと感じるでしょうか?

「注ぐ」と聞いて難しいと感じるでしょうか?

一つ一つ取り出してみると動作自体は簡単な事に気づくかと思います。

プログラムも同じです。一つ一つの動作は非常に単純な塊にすぎないのです

なのでプログラムを作るときは『一つの動作を一つずつ作る』が基本となり、それが積み重なって一つのプログラムもといマクロとなるのです。

 

まとめ

今回の記事で重要なポイントは以下の通り

・マクロは自動で行う便利な存在

VBAExcelで行う手作業を代わりに行ってくれるプログラム言語

・プログラムは単純な動作の塊

 

第1弾はどれだけマクロVBAが便利な物かをお伝えしてきましたが、次回は本格的にマクロVBAの事前準の内容となります。マクロVBAに興味はあるけど分からない、どうすればいいのかも分からない、( ᐛ)バナナ、という人にもわかりやすく解説していくのでよかったら次回も見てくれたら嬉しいです!

 

 

マクロVBA講座ブログを開設しました!

初めまして!もぉんといいます!

 

現在は事務職をしながらマクロを作っている社会人です!

Excelの作業を楽にすることを考えて早4年...この経験をみなさんに共有できるよう分かりやすく解説していきたいと思います!

マクロだけでなく関数に関する豆知識や応用の他に実際に役に立った・使いやすくする工夫などを主に書いていくのでよかったら見ていってくれたら嬉しいです!

 

短い挨拶ですが、どうぞよろしくお願いいたします!