Excel VBAには、通常のExcelにはない独特の書き方があります。
Excelマクロの書き方
Excelとマクロ。
似ているけど、書き方はそれぞれです。
例えば、
「もし、A1セルの値が80以上なら『A』、そうでなければ『B』をF1セルに入れる」
通常はF1セルに
=if(A1>=80,”A”,”B”)
と算式を入力しますが、マクロの場合には、
1 2 3 4 5 6 7 8 9 |
Option Explicit Sub sample() '■ A1セルが80以上なら「A」を80未満なら「B」をF1セルに書く If Range("A1").Value >= 80 Then Range("F1").Value = "A" Else Range("F1").Value = "B" End If End Sub |
という書き方をします。
「if〜then〜else〜end if」構文を使った書き方です。
短いのはExcelの方で、「マクロで書かなくても、普通のExcelでいいのでは?」と思うかもしれません。
ただ、データ数が多ければ、コピペもそれなりに手間がかかります。
それにいつも使っているExcelではできないようなことが、マクロを使うことでできるといったことも特徴です。
マクロならではの記述もあり、それを知っておくと色々考えますし、視野が広がるのでおすすめです。
Excel マクロの『S=S+1』ってどういう意味?
マクロでは、どんなことができるのでしょうか?
例をあげて考えてみましょう。
例えば、こういった売上の年間データ(A列からD列)があったとして、1日の売上が15万円以上の日だけを別の表(H列からL列)に上から順番に書き出したいというケース、
何も入ってないセルに、値を書き込むということです。
これをマクロでこう書いてみました。(書き方は色々ありますので、一例として。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
Option Explicit Sub sample() '■変数の宣言 Dim i Dim S S = 2 '■売上が15万円以上の日の情報をピックアップする For i = 2 To Range("a" & Rows.Count).End(xlUp).Row If Range("D" & i).Value >= 150000 Then Range("H" & S).Value = Range("A" & i).Value Range("I" & S).Value = Range("B" & i).Value Range("J" & S).Value = Range("C" & i).Value Range("K" & S).Value = Range("D" & i).Value '■1日当たりの売上 Range("L" & S).Value = Range("K" & S).Value / Range("J" & S).Value '■次の行に変更する S = S + 1 End If Next End Sub |
これでF5をクリックして実行してみると、売上が15万円以上の日だけをピックアップしてくれます。
違うシートに書き出すこともできます。
個人的には、オートフィルタより便利なんじゃないかなと思っています。
ちなみに。売上の分析には、ピボットテーブルがおすすめです。
で、今回一番ネタにしたかったのは、マクロならではのこの記述です。
S=S+1
S=S+1って、左と右がイコールということですから、「この算式は成り立つの??」なんて思うわけです。
「『S』と『S + 1』は等しくないでしょ?」
「『S = S + 1』なんてあり得ないでしょ?」
と。ただ、これは等式のイコールじゃなく、代入するという意味。だそうです。
(あ、そうなの、でスルーしていただいて結構です。)
代入のわかりやすい例は、
Range(“A1”)=10+20
と書くと「A1セルには10+20の答えが入るよ。」という意味。
結果、A1セルには30が入ります。
ということで、「右側の式→左側(A1セル)に値を入れる」の順で考えるという感じです。
話を戻して、前述の
S=S+1
でいうと、一番最初の変数の宣言で「S=2(Sは『2』だよ。)」と言ってます。
で、変数「i」も「2」からとなっているので、まずは
Range(“H” & S).Value = Range(“A” & i).Value
は
Range(“H2“).Value = Range(“A2“).Value
となって、条件(売上15万円以上)に合えば、「H2セルにはA2セルの情報を書いてよ。」
ということなります。
S=S+1
の記述があるので、S(=2)+1=3として、セルに書き終わった段階で行を2行目から3行目に変更しているというわけです。
あとFor〜nextは、「繰り返してね」を意味しているので、売上15万円以上のデータに該当するものがあったら、1行ずつ下げて書いていく、ということになります。
『S=S+1』で自分に1を足していく
この
S=S+1
ですが、自分に1を足しているというようにも見ることができます。(私は)
日々足していることは『1』だとしても、繰り返すことで、『2』、『3』、『4』…と毎回『1』ずつ積み重なっていくわけです。
シンプルな「S=S+1」ですが、続けていることがある立場からすると、日々の積み重ねで大きくなる、と勇気をもらえる記述です。
このブログの場合で考えてみると「S=S+1」で「S=0」からスタートし、これで「S=820」ということになりますが、果たしてどこまで続くのやら。
【編集後記】
昨日は仕事のあと、夕方から歯医者へ行き、そのあとは子供たちと近所をランニング+歩き。子どもたちは途中のコンビニでお約束のジュースを買って充電してました。(これ目的で一緒に走ったというハナシも…)
【昨日の1日1新】
※「1日1新」→詳細はコチラ
INVOY