0
0

Excelのマクロ【VBAについて学ぶ】

Last updated at Posted at 2023-12-09

この記事は、【完走したい】楽しくいろいろやる Advent Calendar 202310日目の記事です。

はじめに

大学生です。大学の講義でVBAについて少しだけ触れました。
なので、その復習とまだ学んでいない部分も学習していきます。

そもそもVBAとは

Excelのマクロです。excel全般を自動で動かせるようになります。
使いこなせたら結構便利だと思います。ほかの言語と比べると、どんなことをしているのかが直感的にわかりやすい気がします。
スクリーンショット 2023-11-01 161511.png
開発タブにあります。ないなら、設定から増やせば出ます。
Visual Basic→挿入→標準モジュールで、コードが書けるようになります。

本題:VBAの基本

以下の動画をご覧ください

見てもらえばわかるとおり、

sub A()

と打って、Enterを押すと、

End Sub

が自動的に出てきて、しかも勝手に小文字を大文字にしてくれました。
Sub 〇〇()の、〇〇の部分がそのマクロの名前になります。
スクリーンショット 2023-11-01 161511.png
左から2番目のマクロを押してみると、
スクリーンショット 2023-11-11 001217.png
こんな感じで、さっきのAがちゃんと出ます。

基本的に、End Subまでで完結します。
End Subの下に新しいのを作ることもできます。
その場合、前のものと新しいものが区別しやすいように自動で線を引いてくれます。とっても使いやすいです。

VBAでは、使いたい変数をまず宣言します。
基本Dimを使います。大学の講義でも宣言はすべてDimを使ってました。
ちなみに、DimはDimensionの略だそうです。寸法とか、範囲とかいう意味があるそうです。(https://ejje.weblio.jp/content/dimension)

Dim 変数名 As 〇〇

丸の中は型が入るようです。

簡単な動く何かを作る

せっかくなのでなんか作ります。
とりあえず、A1からA10セルにそれぞれ1から10まで入れてみたいと思います。
↓書いたもの

Sub A()

Dim Num As Integer
For Num = 1 To 10
Cells(Num, 1) = Num
Next Num


End Sub

これで実行すると、A1からA10まで出ました。

解説

Dim Num As Integer

→NumをIntegerとかいう型として宣言しました。
いつもC#ではint型を使っていましたが、VBAにintはなく、Integerと長い名前を打つ必要があるっぽいです。

For Num =1 To 10

→Numが1から10になるまで動きます。
説明は、見ただけでなんとなくわかるので省略します。
For文が()なしで動きます。
↓C#でForを使うとこんな感じです。

for(int Num=1;Num<10;Num++){
}

全然違うことがわかると思います。

Cells(Num,1)=Num

→(Num,1)のセルにNumの中の数字が出ます。
()の中は、(横,縦)です。中にA1とか書いても、エラーが出ます。セルの位置を調べなければならないみたいです。ここはちょっと不便かもしれません。

Next Num

→今回はNumが1増えます。それだけ。

↓ちゃんと動いたので載せます。
スクリーンショット 2023-11-11 010022.png

追記 メッセージやグラフも出せる

内容が薄かったのでちょっと足します。
・メッセージボックス
MsgBoxを使って出せます。

Sub B()
MsgBox "VBAの勉強"

End Sub

MsgBoxの後、出したい文章を""で囲むとできるみたいです。簡単でした。

応用

Sub C()
Dim Question As VbMsgBoxResult
Dim F As Integer
Cells(1, 1) = Date
Question = MsgBox("今日、朝食を食べましたか?", Buttons:=vbYesNo)
If Question = vbYes Then
MsgBox "回答を記録しました。"
Cells(1, 2) = "〇"
Else
MsgBox "朝食はしっかり食べよう。"
Cells(1, 2) = "×"
End If
End Sub

今日朝食を食べたか記録できます。
これをちょっと改変すれば、毎日の朝食記録も作れるでしょう。(まだ知識が足りないけど。)

解説

Dim Question As VbMsgBoxResult

→分岐型のものはこの「VbMsgBoxResult」とかいうのを使うっぽいです。

Cells(1, 1) = Date

→Dateで日付を表示できるようです。

Question = MsgBox("今日、朝食を食べましたか?", Buttons:=vbYesNo)

→質問は、こんな感じで書くみたいです。何のボタンを出すかも選べるみたいです。

If Question = vbYes Then

→Yesの時の処理です。noの時はElseで十分でした。

Cells(1, 2) = "〇"

→セル内に文字を入れる場合、""で囲む必要があるようです。メッセージボックスの中の文章同様、ただの文字は""の中に入れる必要があるのかもしれません。

End If

→if終わり。

最後に

使いこなせれば社会人になった時に無双できると思ってます。(会社で禁止されている場合を除く)。
いい勉強(と復習)になりました。

参考

大学の講義

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0