変数の練習
変数の練習です。
シートにボタンを作り、Wクリックしてください。
こうなります。
この二行の間に挿入します。
シートにボタンを作り、Wクリックしてください。
こうなります。
Private Sub CommandButton1_Click()
End Sub
この二行の間に挿入します。
Dim m_str_Hensuu As String
m_str_Hensuu = "適当な文字列"
MsgBox m_str_Hensuu
【アルゴリズム】 配列データ内の最大値を求める
配列hairetuに"11","22","33","44","55"と入っています。
とします。
Private Sub CommandButton1_Click()
Dim hairetu As Variant
Dim i As Long
Dim maxnum As Long
hairetu = Array("11", "99", "22", "33", "44")
maxnum = -1
For i = 0 To UBound(hairetu)
If hairetu(i) > maxnum Then
maxnum = hairetu(i)
End If
Next i
MsgBox maxnum
End Sub
とします。
【アルゴリズム】 平均を取る
「Application.WorksheetFunction.Average」のようにワークシート関数を用いてしまうやり方もエクセルVBAらしいですが、ここではちゃんとプログラミングとして行います。
配列hairetuに"11","22","33","44","55"と5つの要素が入っています。
配列hairetuに"11","22","33","44","55"と5つの要素が入っています。
Private Sub CommandButton1_Click()
Dim hairetu As Variant
Dim i As Long
Dim n As Long
hairetu = Array("11", "22", "33", "44", "55")
For i = 0 To UBound(hairetu)
n = n + hairetu(i)
Next i
n = n / (UBound(hairetu) + 1)
MsgBox n
End Sub
【アルゴリズム】 配列に同じ値がいくつあるかカウントする
配列hairetuに「課長」「部長」「係長」「副課長」「課長」「部長」と6個の要素が入っています。
この配列hairetuに”課長”がいくつ含まれているかカウントします。
この配列hairetuに”課長”がいくつ含まれているかカウントします。
Private Sub CommandButton1_Click()
Dim hairetu As Variant
Dim i As Long
Dim n As Long
hairetu = Array("課長", "部長", "係長", "副課長", "課長", "部長")
i = 0
n = 0
For i = 0 To UBound(hairetu)
If hairetu(i) = "課長" Then
n = n + 1
End If
Next i
MsgBox n
End Sub
【アルゴリズム】 配列から特定の値を探す
配列hairetuに「a」「b」「c」「d」「e」「f」と6個の要素が入っています。
そこからアルファベットfを探してみましょう。
(1)配列を作り、そこに上記のアルファベットを代入します。
(2)次に、その配列の要素を順番に見ていきます。
そして、配列変数が「f」なら『見つかりました』と表示させます。 上の2つのコードをガッチャンコするとこうなります。
そこからアルファベットfを探してみましょう。
(1)配列を作り、そこに上記のアルファベットを代入します。
Dim hairetu As Variant hairetu = Array("a", "b", "c", "d", "e", "f")
(2)次に、その配列の要素を順番に見ていきます。
For i = 0 To 5
MsgBox hairetu(i)
Next
そして、配列変数が「f」なら『見つかりました』と表示させます。 上の2つのコードをガッチャンコするとこうなります。
Dim hairetu As Variant
Dim i As Long
hairetu = Array("a", "b", "c", "d", "e", "f")
For i = 0 To 5
If hairetu(i) = "f" Then
MsgBox "見つかりました"
End If
Next
【アルゴリズム】 1から5までの和
Private Sub CommandButton1_Click()
Dim i As Long
Dim wa As Long
' 初期化。
i = 0
wa = 0
' ループ開始。
For i = 1 To 5
wa = wa + i
Next
' セル番地A1に変数waの現在値を表示。
Range("A1").Value = wa
End Sub
配列の関数やステートメント
Array関数
※一括してバリアント型の変数に要素を代入します。
または
↓これはだめ
※要素数を指定しているので。
UBound(配列名)
※インデックス番号の上限を返します。
LBound(配列名)
※インデックス番号の下限を返します。
Redimステートメント
※動的配列の要素をあとから変更する。
※Redim前に格納された値はリセットされてしまう。
Preserveステートメント
※Redimステートメントで、既存の値を消さないで要素数を変更する。
※一括してバリアント型の変数に要素を代入します。
変数名 = Array(要素1,要素2,要素3...)
Dim 配列名() As Variant
配列名 = Array("要素1", "要素2", "要素3")
または
Dim 配列名 As Variant
配列名 = Array("要素1", "要素2", "要素3")
↓これはだめ
※要素数を指定しているので。
Dim 配列名(2) As Variant
配列名 = Array("要素1", "要素2", "要素3")
UBound(配列名)
※インデックス番号の上限を返します。
UBound(配列名)
LBound(配列名)
※インデックス番号の下限を返します。
LBound(配列名)
Redimステートメント
※動的配列の要素をあとから変更する。
※Redim前に格納された値はリセットされてしまう。
Redim 配列名(インデックス番号)
Preserveステートメント
※Redimステートメントで、既存の値を消さないで要素数を変更する。
Redim Preserve 配列名(インデックス番号)
IMEの辞書に制御構造やステートメントを登録してしまう
覚えにくいステートメントや制御構造はいちいち覚えたり打ち込むのは面倒なので、IMEに辞書登録をしてしまいましょう。
※「◆」とあるのは改行です。IMEには改行は登録できません。
※”読み”を打ち込むと”登録する文”に変換されるようにします。
※「◆」とあるのは改行です。IMEには改行は登録できません。
※”読み”を打ち込むと”登録する文”に変換されるようにします。
読み | 登録する文 | 構文 |
---|---|---|
いふぶん | If 条件式 Then◆条件が真の場合の処理◆End If | If 条件式 Then 条件が真の場合の処理 End If |
いふえる | If 条件1 Then◆条件1が真のときの処理◆ElseIf 条件2 Then◆条件2が真のときの処理◆Else◆デフォルトの処理◆End If | If 条件1 Then 条件1が真のときの処理 ElseIf 条件2 Then 条件2が真のときの処理 Else デフォルトの処理 End If |
せれけー | Select Case 判断対象◆Case 条件1◆処理1◆Case Else◆デフォルトの処理◆End Select | Select Case 判断対象 Case 条件1 処理1 Case 条件2 処理2 Case Else デフォルトの処理 End Select |
せれけーいず | Select Case 判断対象◆Case Is 条件1◆処理1◆Case Else◆デフォルトの処理◆End Select | Select Case 判断対象 Case Is 条件1 処理1 Case Is 条件2 処理2 Case Else デフォルトの処理 End Select |
どるぷまえ | Do While 条件◆処理◆Loop | Do While 条件 処理 Loop |
どるぷあと | Do◆処理◆Loop While 条件 | Do 処理 Loop While 条件 |
どあんまえ | Do Until 条件◆処理◆Loop | Do While 条件 処理 Loop |
どあんあと | Do◆処理◆Loop Until 条件 | Do 処理 Loop Until 条件 |
ふぉーぶん | For カウンタ変数 = 初期値 To 最終値◆処理◆Next | For カウンタ変数 = 初期値 To 最終値 処理 Next |
ふぉーいち | For Each 一時変数 In 配列◆処理◆Next | For Each 一時変数 In 配列 処理 Next |
Hello, World! ~その1~
※「エクセルマクロ/VBAを始める前に読む記事」のページを参照してください。
とします。
Range("A1").Value
というのはセル番地を指定するときの書き方です。「Range("B2").Value」とすればセルB2になります。
※ファイルのダウンロード
Range("A1").Value = "Hello, World!"
とします。
Range("A1").Value
というのはセル番地を指定するときの書き方です。「Range("B2").Value」とすればセルB2になります。
※ファイルのダウンロード
オブジェクト型変数
オブジェクト型変数に格納されるのは、「指定したオブジェクトへの参照」です。具体的な値ではありません。
【宣言】
【代入文】
名称 | オブジェクト |
---|---|
Application | エクセル自身 |
Workbook | ワークブック |
Worksheet | ワークシート |
Window | ウィンドウ |
Range | セルおよびセル範囲 |
Object | すべてのオブジェクト |
【宣言】
Dim 変数名 As オブジェクト名
【代入文】
Set 変数名 = オブジェクト
指定したセル範囲の空白セルだけ選択する
SpecialCellsメソッドに、引数として定数”xlCellTypeBlanks”を指定して使用します。
空白セルに文字列を入れるにはこうします。
Range("A1:A10").SpecialCells(xlCellTypeBlanks).Select
空白セルに文字列を入れるにはこうします。
Range("A1:a10").SpecialCells(xlCellTypeBlanks).Select
Selection.Value = "―"
終端セルを選択する
あるセルを基準にして「対象セルが含まれる領域の終端にあるセル」のことをいいます。
ショートカットキーでは「CTRL+(矢印キー)」です。
VBAでは、RangeオブジェクトのEndプロパティに対して、方向を指定する形で使用します。
【使用例】
Range("A1").End(XlDown).Select
【終端行の取得】
例えば、B列の終端行を取得するにはこうします。
しかし、Office2007以降では、行の制限が65,536行から1,048,576行へ大幅にアップしています。また、Office97以前では16,384行でした。
これらとの互換性を保つにはこうします。
”Rows.Count”で最大の行数が取得されます。それをCellsオブジェクトの引数としています。
【新規データの入力位置】
終端セルには当然、データが入っています。データを入力するのはその下の (空白の) セルであることが多いでしょう。
その場合はこうします。
ショートカットキーでは「CTRL+(矢印キー)」です。
VBAでは、RangeオブジェクトのEndプロパティに対して、方向を指定する形で使用します。
方向 | 記述 | ショートカットキー |
---|---|---|
上 | End(XlUp) | Ctrl + ↑ |
下 | End(XlDown) | Ctrl + ↓ |
右 | End(XlLeft) | Ctrl + → |
左 | End(XlRight) | Ctrl + ← |
【使用例】
Range("A1").End(XlDown).Select
【終端行の取得】
例えば、B列の終端行を取得するにはこうします。
Cells(65536, 2).End(xlUp).Select
しかし、Office2007以降では、行の制限が65,536行から1,048,576行へ大幅にアップしています。また、Office97以前では16,384行でした。
これらとの互換性を保つにはこうします。
Cells(Rows.Count, 2).End(xlUp).Select
”Rows.Count”で最大の行数が取得されます。それをCellsオブジェクトの引数としています。
【新規データの入力位置】
終端セルには当然、データが入っています。データを入力するのはその下の (空白の) セルであることが多いでしょう。
その場合はこうします。
Cells(Rows.Count,1).End(XlUp).Offset(1,0).Select
登録:
投稿 (Atom)