引き続きドットインストールのお世話になります。
Excel VBAを書く機会が近々ありそうなので、ドットインストールで復習です。
手元に製品版のエクセルがない(Win版があるけどWinPCがめっさ重い)ため、
動作確認はできてません。復讐のため可とします。
メモ
- リファレンス
-
マイクロソフトのものはオススメしない
Office 田中がオススメ
テストセンターのOdyseyが運営しているmoug
あとはググれば大抵の問題は解決できます。書籍もたくさん出ているので適当に。 - コメント
- ’シングルクォートです。
- エディター・IDE
-
VBE
開発タブ(リボン)を表示させないと出てこないアレ - 用語
-
ワークブック
ワークシート
セル
オブジェクト:操作の対象
プロパティ:属性
メソッド:振る舞い
- よく使うウィンドウ
-
プロジェクトウィンドウ
プロパティウィンドウ - プロシージャのテンプレート
Sub WriteHello() MsgBox ("hello") End Sub
Sub:プロシージャの始まりを宣言 MsgBox:ポップアップでメッセージを表示するメソッド End Sub:プロシージャの終わり 改行:行の終わりを示す(;セミコロンじゃない) _(スペースとアンダーバー):行の途中で改行 最初の一文字:キーワードやメソッド、プロパティはだいたい最初の一文字は大文字(確かVBEが補正してくれたはず)
- セルの操作・値の代入
-
Worksheets("Sheet1").Range("A1").Value = "Hey" Range("A2").Value = "Hey" Cells(3,1).Value = "Hey" Cells(3.1).Offset(1,0).Value = "Hey"
上記の例では、A1 - A4にそれぞれHeyと入力される。 シートの指定がなければ、アクティブなシートに対して実行される。 また、最後のValueについては、セルの標準プロパティでもあるので、省略することが可能です。 実行速度も、省略してもしなくても差はないそうです。参照:Office 田中 Rangeはセル番地を文字列として指定するのに対し、CellsはCells(行番号、列番号)と数値で指定します。 僕は”行列”という言葉で順番を覚えています。Offsetは指定した行数と列数分、セルの指定をずらします。 数が増えるほど、右下に移ります。
- 複数のセルの操作
-
Range("A1","C3").Value = "Hey" Range("A1:C3").Value = "Hey"
どちらも、A1からC3までのセル範囲の全てのセルに、Heyと入力します。 下の書き方は変数入れづらかったような気がする。
Range("A:A").Value = "Hey" Range("1:1").Value = "Hey"
上はA列全てのセルに、下は1行目全てのセルに、Heyと入力します。
- Cells.Clear
-
全セルの内容と書式の消去です。 内容のみ:ClearContents 書式のみ:ClearFormats コメント:ClearComments アウトライン:ClearOutline
- With
-
対象をEnd Withまで操作対象を省略できる
Range("A1").Value = "Hey" Range("A1").Font.Bold = True Range("A1").Font.Size = 16 Range("A1").Interior.Color = vbRed
With Range("A1") .Value = "Hey" .Font.Bold = True .Font.Size = 16 .Interior.Color = vbRed
あと、Endブロックを入れ子にしてもオッケーです。 - Range("B2").Delete shift:=xlShiftLeft
-
セルの削除。
shift:はオプション
セルB2を削除して左に詰める - Worksheets.Add after:=Worksheets("Sheet1"), Count:=2
-
ワークシートの追加
複数のオプションが設定可能で、2個目以降のオプションはカンマで区切る
例の操作は、Sheet1のあとに2枚ワークシートを追加する。 - マクロの記憶
-
この機能のおかげで、全部を覚える必要はないため、助かる。
ただし、無駄な記録を削るのに少し調べる必要があったりする。 - Dim 変数 As データ型
-
変数の宣言。
VBAでは変数宣言は必須ではないが、見つけづらい文法エラーになるので、常に変数宣言したほうがいい。
モジュールの頭に(つまり、Subの宣言より上に)Option Explicitと書くと、変数の型を明示しろっていうオプションが付く。
これが付いていると変数を宣言せずに使うとエラーが発生する。
変数宣言しない怖さはOffice田中をご参照ください。 - Debug.Print 変数
- イミディエイトウィンドウに変数の値を表示する
- 数値演算
-
あまり:mod
べき乗:^ - 変数の型
-
Integer
Double
Data:"yyyy/mm/dd"
Variant
Boolean:True/False
Range:初期化時はSetをつける(Set ran = Range("A1")
- Excelの日付の扱い
-
シリアル値(連続した値)として内部的に保持している。
1900/1/1 0:00が内部値「1」で、1日ずつ「1」増えていきます。
これはVBAでも同じらしく 日付に「+1」すれば1日後の値となります。 - 配列
-
Excel VBAで配列を使うには、下記2つの方法があります。
Dim fruits(3) As String fruits(0) = "Apple" fruits(1) = "Banana" fruits(2) = "Orange"
Dim fruits As Variant fruits = Array("Apple", "Banana", "Orange")
- 条件分岐If
-
If Range("a1").Value = "Apple" Then MsgBox ("Apple") End if
- Select
-
他言語のswitch相当
Select Case fruit Case "apple" xxx Case "banana" xxx Case Else xxx End select
- Loop処理
-
Dim i As Integer i = 1 Do While i < 10 Cells(i, 1).Value = i i = i + 1 Loop
Dim i As Integer For i = 1 To 9 Step 1 Cells(i, 1).Value = i Next i
- Foreach
-
Dim fruits As Variant fruits = Array("apple", "banana", "orange") For Each fruit In fruits MsgBox (fruit) Next
- プロシージャの種類
- Subプロシージャ:戻り値を持たない Functionプロシージャ:値を戻す
- 引数の受け取り
-
Sub Greet(ByVal name As String)
値渡しだとByVal
参照渡しだとByRef - 引数の受け取り
-
Sub Greet(ByVal name As String)
値渡しだとByVal
参照渡しだとByRef - 判定式
-
等しい:=
等しくない:<>
0 件のコメント:
コメントを投稿