エクセルVBA セル(1)

第1問
セルをアクティブにするには?
Range("A1").
第2問
セルを選択するには?
Range("A1").
第3問
セルを挿入するには?
Range("A1").
第4問
セルを削除するには?
Range("A1").
第5問
セルを切り取るには?
Range("A1").

あなたの得点は?

変数の練習

変数の練習です。

シートにボタンを作り、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つの要素が入っています。


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に”課長”がいくつ含まれているかカウントします。

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)配列を作り、そこに上記のアルファベットを代入します。
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関数
※一括してバリアント型の変数に要素を代入します。

変数名 = 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 配列名(インデックス番号)


2次元配列


Dim 配列名(3,3)

とした場合。

0,0 0,1 0,2 0,3
1,0 1,1 1,2 1,3
2,0 2,1 2,2 2,3
3,0 3,1 3,2 3,3

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 = "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プロパティに対して、方向を指定する形で使用します。


方向に対応する定数
方向 記述 ショートカットキー
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

rとc

rが行(Row)
cが列 (Column)

セルの参照

Range("A1")
Range("A1,B4")
Range("A1:B4")