EXCEL VBA

Excel-VBA 実例 この通りやれば動く、とにかく触ってみよう

EXCEL VBA

こんにちは! 健史(たけふみ)です。

パソコンをお使いの方の多くは、表計算ソフトExcelを利用されていると思います。

この記事は、Exceは知っているけれど
・Excel-VBAって何?
・Excel-VBAは取っ付きにくい!
・Excel-VBAって難しそう!
と言った方へ「Exce-VBAを始めるきっかけ」になればと思います。

記載したプログラムをそのままコピー・ペーストし、データを入力すれば、すぐに動作するようになっています。

見ているだけでは覚えせん。実際に自分の手を動かし、失敗しながらでもやらないと身に付きません。

やって見て、Excel-VBAの開き方、実行方法に慣れることが必要です。

そのため、手を動かしてほしいがための記事にしました。

ここにもう少し書きたいのですが、長くなってしまうので「3.イントロダクション(導入部)の続き」に分けました。

尚、当記事のExcelバージョンは「Excel2003」によるものです。

Excel2003より後のバージョンをお使いの方は、以下ご認識下さい。
・Excel起動後のシートが1つ(Sheet1)ですので、必要に応じて追加する
・Excel-VBAは動作しますが、保存するときに形式を'xslm'にする
 ('xlsx'形式で保存しようとするとメッセージが表示される)

スポンサーリンク

プログラムの作成と実行

とにかく、Excel-VBAに触って動かしてみましょう。

初回のサンプルプログラムは

セル[A1]~[A10]に10~100までを入力し、セル[A11]に合計「550」を計算するプログラム

です。

実行までの手順

1.Excelを起動

2.データ入力
Book1のセル[A1]~[A10]に10~100までを入力します。

3.Excel-VBAを起動
Altを押した状態でF8キーを押します。

4.[マクロ名(M):]に'test'と入力(''は不要、''内のtestを入力)
TESTでもSUMでも構いません。
だだし指定できない文字列もあります。例えば'select'は指定できず、'select1'とかにすればOKです。

5.[作成(C)]をクリック
私はマクロ名を入力したら、そのままEnterを押します。

6.以下のプログラムをドラッグ&コピー

    Dim i As Long
    Worksheets(1).Cells(11, 1) = 0
    For i = 1 To 10
        Worksheets(1).Cells(11, 1) = Worksheets(1).Cells(11, 1) + Worksheets(1).Cells(i, 1)
    Next

6.以下に貼り付け(ペースト)

Sub test()
ここに貼り付ける
End Sub

以下のようになればOKです。

Sub test()
    Dim i As Long
    Worksheets(1).Cells(11, 1) = 0
    For i = 1 To 10
        Worksheets(1).Cells(11, 1) = Worksheets(1).Cells(11, 1) + Worksheets(1).Cells(i, 1)
    Next
End Sub

7.F5キーで実行

8.実行結果の確認
Book1に切り替えて下さい。
Altを押した状態でTabキーを押して、Book1に位置づいたらTabキーを離すことで切り替わります。

Book1のセル[A11]に「550」が表示されていればOKです。

Excelシートとプログラムの関係

まず、Excelシートとプログラム内で定義されている項目名との関係を説明します。

Cells(1,1)はセル[A1]のことです。

()内1の番目は縦の行番号、2番目は横の列番号を表します。

Worksheets(1)は、1番左のシートで、(2)は2番目のシート、(3)は3番目のシート、以降同様です。

プログラム内では「Worksheets(1).Cells(11, 1)」とシートとセルを'.’(ピリオド)で繋げれば参照できます。


プログラム内でWorksheetsの指定を(1),(2)・・と書いた場合には注意が必要です。

プログラムを書いた後に手でExcelのシート1番目と2番目を入れた場合には、プログラムで参照するシート()内を変更する必要があります。

シート名は変更してもプログラムを修正する必要はありません。


()内を名称にしたい場合には、""で囲んで記述します。

例えば、「シート名1」というシート名であればWorksheets("シート名1")と記述します。

シート名であれば、プログラムを書いた後に手でシート1番目と2番目を入れた場合でも、プログラムで参照するシート()内を変更しなくてもOKです。

その代わり、シート名を変更した場合には、プログラムで参照するシート("")内を変更する必要があります。

フローチャート

最初から最後まで、全体のフローチャートです。

イエローでマーキングした処理は「For i = 1 To 10」の部分で、マーキングした処理が内部で自動生成されます。

処理の中で例えば「i = 15」と記述すると、自動的に1がプラスされてNextの後のiは「16」になっています。

プログラムの詳細説明

    Dim i As Long	
        i という名前のデータをプログラム内に定義、長さはLongタイプ
        プログラム内に定義とは、「プログラム内のメモ領域」とご理解下さい
        Longタイプは「As Longと書いておけばOK」とご理解下さい
    Worksheets(1).Cells(11, 1) = 0		
        Worksheets(1)のCells(11, 1)にゼロをセット	
        (11,1)の11は縦の番号、1は横の番号でA=1,B=2で、(1,2)はセル[B2]です
    For i = 1 To 10		
        i に1をセットして1づつカウントアップしてiが10を超えるまで、
        Nextに囲まれた範囲までの処理を繰り返す
 
        Worksheets(1).Cells(11, 1) = Worksheets(1).Cells(11, 1) + Worksheets(1).Cells(i, 1)		
            Cells(11,1)の値とCells(i,1)の値をプラスした結果にCells(11,1)を置き換える
            i=1の時は、Cells(11,1)の0とCells(1,1)の10をプラスした10にCells(11,1)を置き換えます
            i=2の時は、Cells(11,1)の10とCells(2,1)の20をプラスした30にCells(11,1)を置き換えます
    Next		
        For の終わり

補足です。

・変数について
今回は1つだけ[i]という変数を定義しました。

使用する変数はフローチャートを作成する過程で、どんな変数が必要か分かります。

慣れてくればフローチャートを作成せずに、プログラムを書きながら必要な変数を都度定義していくようになれます。


・計算式について
Worksheets(1).Cells(11, 1) = Worksheets(1).Cells(11, 1) + Worksheets(1).Cells(i, 1)を「A = A + 1」に代え説明します。

これは、
1.右項[A + 1]をコンピュータ内の演算装置という場所で計算する
①.Aの内容を演算装置にセットして、②.1をプラス
2.その後、演算装置の内容を左項[A]にセットする
ということです。

この通りやれば動く、とにかく触ってみよう まとめ

とにかく、手を動かしてやってみて欲しいのです。

大したことはありませんから。

再度ポイントをおさらいします。

Excel-VBの起動と実行の流れ

1.Excelを起動後にExcel-VBAを起動
Altを押した状態でF8キーを押してExcel-VBAを起動し
[マクロ名(M):]にマクロ(=プログラム名)を入力して[作成(C)]をクリックする
です。

2.プログラムを記述
Sub マクロ名(=プログラム名) ()
ここにプログラムを書く
End Sub

3.F5キーを押して実行

プログラムの概要 再確認

1.プログラム内で使う変数をDim文で定義
2.参照するシートとセル、変数を使って処理を記述する
です。


参照するシートとセルの記述方法は、
Worksheets(n).Cells(x,y)
または、
Worksheets("シート名").Cells(x,y)


Worksheets(n)の'n'は、シートを左から数えた番号です。番号は数字を直接書いても変数でもOKです。

Worksheets("シート名")は、記述されているシート名、この場合は""で囲みます。

Cells(x,y)のxは、縦の行番号、yは横の列番号で、数字を直接書いても変数でもOKです。

イントロダクション(導入部)の続き

かく言う私、正直言ってExcel-VBAは、食わず嫌いでした。

Excelを15年以上使ってきて「せっかくパソコンを使っているのにデータを自由に扱えないかな?」と思い付き、あるサイトを見ながら学習しました。

そして活用してみたら、今は楽しくなりました。


そんな思いとまでいかなくても、「楽したい!」「こういう形にしたい!」、例えば、

・VLOOKUPを使って、IF関数で等しい・等しくないものに"〇,×"を入れて、そしてフィルタで"#N/A"や"〇,×"データを抽出・省いてとか、毎回面倒!

・条件が1つではなく、複数の条件を指定してデータを抽出したり省きたいんだけど

・対象シート内で加工編集・抽出するのではなく、別のシートにデータを抽出したい

など実現したい方は、一度やって頂ければと思います。

そして、慣れてくれば、現場で「こんなことできないかな?」といったことを実現できます。

自分で作ったプログラムが思い通りに動いた時は、どんな小さなことでも感動するものです。

EXCEL VBA
スポンサーリンク
- 面白かったらシェアお願いします! -
健史をフォローする
自分で改善

コメント