これからExcelのマクロを勉強したいという方に!簡単な練習問題作りました。

これからExcelのマクロを勉強したいという方に!簡単な練習問題作りました。

何気なくアクセス解析を眺めていたら、“マクロ 勉強のコツ”というキーワードで検索してくださった方がいらっしゃいました。そういえば私は、一番最初はどんなふうにして覚えたんだっけか…と、当時出された問題を思い出しながら作ってみました。


下準備

120906-1
Sub test()
  'この中にこれからプログラムを書きます
End Sub

それではまず、このようなプログラムの箱を用意します。こちらの記事を参考にして、ボタンを押すとプログラムが起動するように設定してください。

問1. A1セルに1, A2セルに2…の要領で、A5セルまで埋めよう

120906-2

このようになれば正解です。いろいろな方法があります。

解1

Sub test()
  Range("A1").Value = 1 'A1セルに1
  Range("A2").Value = 2 'A2セルに2
  Range("A3").Value = 3 'A3セルに3
  Range("A4").Value = 4 'A4セルに4
  Range("A5").Value = 5 'A5セルに5
End Sub

ひとつずつセルと数値を指定して入れる方法です。プログラムが1行動くごとにセルに数値が入っていく様子を、ステップ実行しながら見てみると勉強になります。

※試験的に動画を撮ってみました。ブラウザによっては再生できないものもあるかもしれません。ダメだったらファイル名クリックしてみると見れるかも。

解2

Sub test()
  Dim i As Long '変数を宣言

  For i = 1 To 5 '1~5まで繰り返す
    Cells(i, 1).Value = i 'A列i行セルにiを入れる
  Next i '+1して繰り返し地点まで戻る
End Sub

解1より、ちょっとプログラム的な解答です。これなら、100だろうと1000だろうと簡単にセルを埋められます。

変数を使っていること、RangeCellで指定していること、繰り返し処理を使っていることで、解1よりも難しそうに見えますが、これらをマスターすることで幅がぐっと広がりますので、下記の記事を参考に、是非ひとつずつ、ゆっくり挑戦してみてください。

解3

Sub test()
  Dim i As Long '変数を宣言

  i = 1 'まず変数iに1を入れておく
  Do '繰り返す
    Cells(i, 1).Value = i 'A列i行セルにiを入れる
    i = i + 1 '変数iをひとつずつ増やす
    If i > 5 Then Exit Do 'iが5より大きくなったらDoを抜ける
  Loop '繰り返し地点まで戻る
End Sub

繰り返し処理をFor~Nextではなく、Do~Loopで行ってみたものです。今回のような数字がきっちり決まっている問題ならば、解2のほうがコードが少なくて済みますが、数値に依存しない問題ではDo~Loopを使って繰り返す方が良い場合もあります。

問2. A1セル~A5セルのクリアボタンを作ろう

120906-3

もうひとつボタンをつくって、それを押すとA1~A5のセルがクリアされるボタンを作ります。いちいち次のプログラムを起動させる前に手で消すの、面倒ですもんね(´ω`)

あ、これは、Sub test~End Subとは違うものなので、今まで書いてきたコードの、End Subの下に書いてくださいね!

解1

Sub clearValue()
  Range("A1:A5").Clear
End Sub

範囲を指定して、クリア。覚えてしまえばそんなに難しくないですね。

解2

Sub clarValue()
  Range("A1:A5").ClearContents
End Sub

ちなみにこのように書くと、書式設定を残してクリアすることができます。キーボードでDelete押すのと同じ感じです。先程の.Clearだけだと、色の設定や罫線まで全て消えてしまうので、注意しましょう。

120906-4

忘れずに、ボタンから起動するようにしておきましょう。いかがでしょう、消えましたか?クリアボタン、起動ボタン、交互に押して動作を確かめてみてください!

問3. 入力された数値より大きいものを赤くしよう

まずはA1~A5セルにランダムに数値を入れておいてください。

120906-5

解1

Sub test()
  Dim i As Long, n As Long '変数を宣言

  n = InputBox("数値を入力してください") '入力要求

  For i = 1 To 5 '1~5まで繰り返す
    If Cells(i, 1).Value > n Then 'A列i行セルの値がnより大きいとき
      Cells(i, 1).Font.ColorIndex = 3 'フォントを赤に
    End If
  Next i '繰り返し地点まで戻る
End Sub

変数がふたつになりました。nが入力された数値を格納する変数で、iがセルの位置をひとつずつループさせる変数です。セルの値をひとつずつずらしながらnより大きいか確認して、大きければ色を変えています。

Cells(i, 1).Font.ColorIndex = 3 'ColorIndexでの赤指定
Cells(i, 1).Font.Color = RGB(255, 0, 0) 'Colorでの赤指定

上記ではColorIndexで1=黒、2=白、3=赤…のように、あらかじめ数値に色が割り振られているものを利用していますが、RGBで指定することもできます。

120906-6

InputBoxに10を入力してみると、こんな感じになりました。いろんな数値で試してみてください!

クリアボタンの改造

今のままのクリアボタンだと、いろいろ試したいのにいちいち消えてしまいますよね。フォントの色だけ自動に戻すようにしてみましょう。

Sub clearValue()
  Range("A1:A5").Font.ColorIndex = xlAutomatic 'フォント色を自動へ戻す
End Sub

これでフォントの色が戻ります。InputBoxに入れる数値を変えてみて、色々試してみてくださいー。

自分の作りたいものをプログラミングするには

いかがでしょうか、ここまでなんとなくでもわかってきたら、基本はだいたいOKです。自分の作りたいものをイメージしてみてください。それは、どんなものでしょう?

イメージを細分化

全て箇条書きで紙に書き出すのが効果的です。

  1. ○○というファイルを××という名前でコピー
  2. ××というファイルを開く
  3. E1セルに今日の日付を入れる
  4. A1~A31セルに今月の日付を入れる
  5. B1~B31セルに今月の曜日を入れる
  6. B1~B31セルが日曜日ならフォントを赤に
  7. ・・・

検索→コピペの繰り返し

「ExcelVBA ファイル コピー」で検索してみましょう。たくさんやり方が載っているはずです。次は、「ExcelVBA ファイル 開く」です。連続した日付を入れるなら、さっきやったFor~Nextでできそうですよね?曜日の判定はIf~End Ifですね。

こんな感じで、細分化した目的をひとつずつ検索すれば、それに適したコード(スニペットと言います)が必ず見つかりますので、それをコピーして繋げていきます。検索スキルというものも必要ですが、できるだけ汎用的な単語をスペースで区切って検索するのがコツです。

「マクロの記録」を使って、やりたい動きをコード化するのも有効です。記録したコードはだいたい必要ないもの含まれてしまうので(何行スクロールしたとか、どのセルをアクティブにしたとか)、必要なところだけをコピーして組み込むのがおすすめです。

1行ずつの積み重ねでできている

プログラムの大きな塊を想像すると、「どうせ自分にはできっこない」と思ってしまいがちですが、1行1行は決して難しいものではありません。根気のいる作業ですが、自分の仕事が楽になると思えば、ちょっと楽しくなってきませんか?

エラーにビビらない!

エラーは、「ここがこういうふうに間違ってるよ」ということをきちんと教えてくれています。頭から「自分には分からない」と決め付けてしまっては前に進むことはできません。是非、読んでみて、分からなければ調べてみて、自分で解決する癖をつけていきましょう。

エラー対処方を書いてみたので、こちらも参考にして頂ければ。

最後に

プログラムは、ちょっと乱暴な言い方をすると「目的が達成できればOK」です。人それぞれ癖というものがありますし、正解は一つではありません。最初のうちから、スマートなコード、短いコードを目指さなくても、ある程度知識がついてくれば、「あ、ここはもっと短くできるな」ということが分かってくると思います。

私も、過去のコードを見て「よくもまぁこれだけの遠回りを…」と思うようなもの、いっぱいありますw そんな風に思えることができることこそが、自分が成長している証なのかもしれません。

Excelというものは、かなりの確率で仕事をするPCには入っているソフトです。それだけ、Excelのマクロは特殊な環境がいらなくて、誰でも、簡単に始められるものです。“興味を持ってるけどなかなか踏み出せない”、そんな方が一人でも多く、自分の仕事を効率化できるようになってくれたらいいなと思っています。

公開日:2012/09/06
更新日:2014/02/26

1件のピンバック


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)

YouTubeでQ&Aコンテンツを企画しています

運営しているYouTubeチャンネルで、ご相談やご質問を募集しています。動画のコメントやお問い合わせページからお気軽にご相談をお寄せください。