プログラムを動かすために

プログラムを動かすために

アクセス数:アクセスカウンター





ひとつ上のページへ


 


人気記事・・・

大人や小学生の体重が気になる方に...

 

子供の休日は何して遊ぶ?>スライム...

 

目薬の使用期限とか差し方、分かります?

 

ご好評企画合計金額が25,000円以上お買い上げのお客様に以下のいずれかをプレゼント!!

 

 


健康情報 ⇒ どこへ向かって・・・ ⇒ VBAトップ ⇒ プログラムを動かすために


難しいプログラム、簡単なプログラム、

どれも基本となるのは3つの動作です。


@実行順序

A条件分岐

B繰り返し処理(ループ)


プログラムとは、現実をシミュレートするもの。

現実といっても、ひとつひとつを細かく分解すると、結構単純なものです。

この三つのやり方さえ知っていれば、大概のことはできます。



@実行順序

どこから始まるか、どうやって処理が流れていくか、を、思ったとおりに制御する必要があります。

まず、何をキッカケにプログラムが始まるのか? ですが、通常のプログラムですと実行ファイル(.exe)を動かした時に始まりますが、Excel VBAでは、既にエクセルが動いているので、他にプログラムが動き出すキッカケを作ってやらないといけません。


VBAでは、様々なイベントをキッカケとしてプログラムが走り出すようになっています(イベントドリブン型と言います)。 ファイルを開いたとき、ボタンを押したときなど、又は、プログラムから明示的に他のプログラムを呼び出す場合もあります。



開始のためのプログラム(例)


●Microsoft Excelのファイルを開いた時に始まるプログラム


プロジェクトエクスプローラ(↑)で「ThisWorkbook」をダブルクリックすると、ワークブック全体に関するプログラムを書くことができるファイルが開きます。

このファイルで、「Workbookオブジェクト」の「Openイベント」を選択したところです。


Private Sub Workbook_Open()

End Sub


と自動的に出てくるので、「Private Sub Workbook_Open()」と「End Sub」の間にプログラムを書いて保存すると、このファイルを開いた時にそのプログラムは実行されます。



●シートをダブルクリックした時に始まるプログラム


プロジェクトエクスプローラ(↑)で「Sheet1(Sheet1)」をダブルクリックすると、ワークシート(Sheet1)に関するプログラムを書くことができるファイルが開きます。

このファイルで、「Worksheetオブジェクト」の「BeforeDoubleClickイベント」を選択したところです。


Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

End Sub


ここにプログラムを記述すると、Sheet1をダブルクリックすると実行されます。



●ボタンを押したときに始まるプログラム

 ⇒ボタンの作り方



↑ワークシートに貼り付ける場合と、ユーザーフォームに貼り付ける場合


デザインモード(三角定規ON)で、コマンドボタンをダブルクリックするとVBAの画面が開きます。



●コードの途中にタグを入れる

タグ名:

Goto タグ名

Goto で強制的にタグ(xxx:)にジャンプさせます。

 

これが入ると、読みにくく、改修しにくいダメなコードと言われる場合が多いですが、確実にその場限り、といった場合や、それ以上の機能を期待しない場合などには良いのかも。


※個人的には、私の書いたコードを他の誰かが見たり直したりということはなかったので、セオリー無視のスピード重視、当然ですが、昔のコードは意味不明です(完全にプログラムから離れていたからと思いたい)



A条件分岐

もしこうだったら、あの時ああしていれば・・・ 後になってくよくよしても仕方がありません。

前もって準備しておきましょう! 何いってんだか


条件分岐の王様は「If」

他にも、

IIf

Select Case

Switch

Do Loop の中でのWhile 又は Until


これらを組み合わせると更に強力になります。



まずは「If」から

使い方としては、以下のようになります。


If i = 1 Then
    j = 2
ElseIf i = 2 Then
    j = 3
Else
    j = 4
End If


i = 1 が条件式。

i = 1 が真(True)なら直下の命令を実行し、ElseIf やElseで指定されたプログラムは実行されません。

ElseIfはIf命令が偽(False)であった場合、別の条件式を判定します。

Trueであれば良いので、戻り値がBool型の関数などを使ってもいいです。(If CHECK_TRUE Then〜)


A = False や Not A としますと、条件が逆転します。

※True=False ⇒ False , False=False ⇒ True


Elseは、全ての条件が偽(False)だった場合に実行されます。


If文の中にIf文を入れて、入れ子(ネスト)状態にすることにより、より複雑な条件分岐を実現することもできます。



If (i = 1 or i = 3) And j = 1 Then

というように、複合的な条件を指定することもできます。


複合的な条件では>> If a = 1 And b = 1 Then

●a=1ではなかったらその時点でb=1かどうかまでは判定されません。ですから例えば、If a = 1 And fncCheck Then 〜 というように、関数fncCheckを後方に配置した場合、fncCheckは実行されるかどうか分からないので、必ず実行したい場合には別の方法による必要があります。




IIf

ifの真偽に分岐する一行版

j = IIf(i = 1, 2, 3)

で、Excelシート関数の=IF([式],[真],[偽]) と使い方は同じです。


Select Case

Dim i As Integer
Dim j As Integer

i = InputBox("i=")

Select Case i
    Case 1 To 2 ’1〜2
        j = 1
    Case 3        ’3だけ
        j = 2
    Case 4, 5, 7 And 6    ’4,5,6,7
        j = 3
    Case i < 5    ’条件式付き
        MsgBox "i < 5"
    Case Else    ’条件に合致しなかった場合
        j = 4
End Select

MsgBox j   


このように、様々な分岐ができますが、実際に実行してみると、Case i < 5 が実行されていないので、上から順番に判定して、合致した時点でSelect文を抜けます。

C言語では確かbreak;と書いて抜けないと次の条件も判定されたような気がしますが、VBAでは基本的に一つの条件に合致したら他の条件式は判定しません。




Switch

j = Switch(i = 1, 2, i = 2, 3, i = 3 = 4)

i = 1 なら j = 2 , i = 2 なら j = 3 ・・・・

Switch関数の引数を左から評価していって、最初に合致した物が j に格納されます。


Do Loop の中でのWhile 又は Until

↓で解説



Bループ

For Next

For Each Next

Do Loop


For Next

For i = 1 to 10

    ・・・

Next

i の値が1〜10まで変化しながらループします。


For i = 1 to 10 Step 2

For i = 10 to 1 Step -1

Stepを使うことにより、変化の仕方を設定できます。省略したら+1です。


For i = 0 to UBound([配列])

上のように配列の上限までループさせる場合など、その都度値を変更させる場合にも適用できます。


Exit For を途中で入れるとループを強制的に抜けます。



For Each Next

For Each [Object型変数] In [Object]

    ・・・

Next

オブジェクトの内容の一つがオブジェクト型変数の中に格納された状態でループします。

Objectの型が分からなければ、Variant型変数を使うと確実



Do Loop

Do

    ・・・

Loop

とにかくループさせます。


ループを抜ける方法

・途中にExit Doを入れる

・Do While[Until] 条件式 ⇒ループが始まる前に条件判定

・Loop While[Until] 条件式 ⇒ループが終わってから条件判定


Do While [Trueになる式] ⇒ OK

Do Untile [Falseになる式] ⇒ OK


(例)

Do While i = 0

    j = InputBox("j=")

    if j = 1 then i = 1   

Loop


条件が偽(False)で処理を抜けます。



ひとつ上のページへ はじめに マクロを使う プログラムを動かすために 変数について エラーの場合の処理 計算あれこれ 文字列を操作しよう 命令の種類 コントロール 型について レジストリ Optional 計算結果を返す カタカナ→ローマ字 Option Explicit Application.ScreenUpdating = False Nバック脳トレ


取扱商品一覧へ  ご注文画面へ

 

本物商品、健康情報の「ほんもの冒険スタジオ」
カリカパパイヤ発酵食品、ペット用品の「パパナピ!」
インフォメーション


営業日

月〜土曜日(10:00am〜6:00pm) 日祝定休日


ご注文・お問い合わせについて

・ 当サイトにて随時(24時間)受付しております。
・ お電話、ファックス、メールでのご注文も随時受付しております。
・ 午後3時までのご注文分につきましては即日発送いたします。

※日曜、祝日のご注文分につきましては翌営業日発送となります。
なお、在庫の状況によって発送が遅れる場合もございますのでご了承願います。


〜当サイトからのご注文〜

取り扱い商品一覧画面より >>

※ 取り扱い商品一覧画面の画像をクリックすることにより各商品の詳しい説明画面に移ります。


〜配達日及び配達時間帯のご指定〜

・お届けの日及びお届け時間帯につきましては、ご都合の良い日時をお選びいただけます。

[午前中] [14〜16時] [16〜18時] [18〜20時] [19〜21時]


「ほんもの冒険スタジオ」運営


配送料、代金引換手数料について

〜配送料〜

・1回のお買い上げ金額が5,000円(税込み)以上の場合には、配送料は日本全国無料とさせていただきます。

・1回のお買い上げ金額が5,000円(税込み)に満たない場合には、配送料650円(税込み)をご負担願います。(一部例外もございます。)


〜代金引換手数料〜

・代金引換手数料につきましては、全額当方で負担させていただきます。


お支払い方法

〜代金引換のお客様〜

・現金、クレジットカード、デビットカードのいずれかでのお支払いとなります。

カード一覧


〜クレジットカード決済サービス〜

<直接決済は終了しました>

 ペイメント

・お客様登録画面(ご希望商品選択後)にて簡単決済

 カード一覧


〜銀行振込のお客様〜

・お振込確認後直ちに発送いたします。(お振込手数料はご負担願います)

お振込先:ジャパンネット銀行 (0033) ビジネス営業部 (005)

 (普通) 1 5 1 8 4 1 7  ヤマモトケンコウドウヤマモトマサハル


Copyright(C) 2005-2019 山本健康堂