###広告
インディーズチームでAzraelという音ゲーを出しています。現在はiOSバージョンのみです。
Androidはできる次第リンク先を入れます。
有料ですが、音ゲーにご興味のある方是非遊んでみてください!。
TwitterAzrael公式
前言
この内容は、個人がよく使うものを勉強でマクロVBA応用編を参考に、簡単に整理したものに過ぎませんので、もっと、知りたい方はリンクからご覧になってください。
開発環境設定
ファイル->オプションからExcelオプションを開き、リボンのユーザー設定中の開発をチェックに入れます。
開発->Visual BasicでVBEを開きます。
中から挿入->標準モジュールでモジュール作成し、VBAを書くことができます。
VBAを始まる前に重要なオプションがあります。
ツール->オプションをクリック
自動構文チェックを外し、変数の宣言を強制するにチェックをいれます。
すると、モジュールにOption Explicitが追加されます。
この設定は
マクロを書き始める前に、出来れば設定しておいた方が良いオプションがあります。
いえ、絶対に設定しておかなければならないVBEのオプション設定です、
必ず、最初に設定しておいてください。
と書かれてありますので、従って間違いないでしょう!。
モジュールの名前変更は表示->プロパティウィンドウを開き変更できます。
練習Sub, End Sub
Sub 練習()
'範囲"列行:列行"
Range("A1:C2") = "こんにちは!"
End Sub
結果
A | B | C | |
---|---|---|---|
1 | こんにちは! | こんにちは! | こんにちは! |
2 | こんにちは! | こんにちは! | こんにちは! |
セルの指定方法
行:縦方向の行位置、1行目は1、3行目は3
列:横方向の列位置、A列は1、C列は3
'例:Cells(行, 列) = 値
Sub 練習()
Cells(1, 1) = 100
Cells(2, "C") = 200
End Sub
結果
A | B | C | |
---|---|---|---|
1 | 100 | こんにちは! | こんにちは! |
2 | こんにちは! | こんにちは! | 200 |
'例:Rows(行) = 値
Sub 練習()
Rows(1) = 100
Rows("2:3") = 200
End Sub
結果
A | B | C | 最後の列 | |
---|---|---|---|---|
1 | 100 | 100 | 100 | 100 |
2 | 200 | 200 | 200 | 200 |
3 | 200 | 200 | 200 | 200 |
4 |
'例:Columns(列) = 値
Sub 練習()
Columns(1) = 100
Columns("B:C") = 200
End Sub
結果
A | B | C | D | |
---|---|---|---|---|
1 | 100 | 200 | 200 | |
2 | 100 | 200 | 200 | |
3 | 100 | 200 | 200 | |
最後の行 | 100 | 200 | 200 |
変数宣言とデータ型
###Dim 変数宣言
####データ型
データ型 | 名称 | 格納できる範囲 |
---|---|---|
Integer | 整数型 | -32,768 ~ 32,767 |
Long | 長整数型 | -2,147,483,648 ~ 2,147,483,647 |
Single | 単精度浮動小数点数型 | -3.402823E38 ~ -1.401298E-45(負の値)1.401298E-45 ~ 3.402823E38(正の値) |
Double | 倍精度浮動小数点数型 | -1.79769313486232E308 ~ -4.94065645841247E-324(負の値) 4.94065645841247E-324 ~ 1.79769313486232E308(正の値) |
String | 文字列型 | 最大約20億文字まで |
Date | 日付型 | 西暦100 年1月1日~西暦9999年12月31日までの日付と時刻 |
Byte | バイト型 | 0~255の範囲の単精度の正の数値。8 ビット(1 バイト) |
Boolean | ブール型 | 真 (True) または偽 (False) |
Object | オブジェクト型 | オブジェクト |
Variant | バリアント型 | すべてのデータ |
####型宣言文字
型宣言文字 | 変数の型 |
---|---|
% | Integer(整数型) |
& | Long(長整数型) |
! | Single(単精度浮動小数点型) |
# | Double(倍精度浮動小数点型) |
@ | Currency(通貨型) |
^ | Longlong(64ビット符号付き数値)※64ビットExcelのみ有効 |
$ | String(文字列型) |
####変数宣言
'例1:Dim 変数名 As データ型 As データ型 は 省略可能
'ここでは i j k 変数を宣言しますが、iとjはVariant型で、kはLong型という意味になります。
Dim i, j, k As Long
'例2;Dim 変数名と型宣言文字
'型宣言文字を変数名の後ろに付け、型を指定
Dim i%
コメント、マルチステートメント、文字の結合、継続行、四則演算
###マルチステートメント
ステートメントを、**:(コロン)**でつなげることで1行にまとめることができます。
Sub 練習()
'Dim i, j
'i = 1
'j = 2 を一行にまとめます
Dim i, j: i = 1: j = 2
End Sub
###コメント
'(シングルクォーテーション)もしくはRemの後ろは、コメント(注釈)となります。
Sub 練習()
'シングルクォーテーション使う例
Cells(1, 1) = 0 'シングルクォーテーション使う例
Rem を使う例
Cells(1, 1) = 0: Rem をコードの後ろに使うときは : (コロン ステートメント)が必要になります。
End Sub
###文字の結合と継続行
**& (アンパサンド)**で値と値をつなげます。
Sub 練習()
Cells(1, 1).Value = "A00"
Cells(1, 2).Value = 100
Cells(1, 3).Value = 100
Cells(1, 4).Value = Cells(1, 1).Value & Cells(1, 2).Value & Cells(1, 3).Value
End Sub
**_ (アンダーバー)**で、次の行に続けて書く事が出来ます。
Sub 練習()
Cells(1, 1).Value = "A00"
Cells(1, 2).Value = 100
Cells(1, 3).Value = 100
Cells(1, 4).Value = Cells(1, 1).Value & _
Cells(1, 2).Value & _
Cells(1, 3).Value
End Sub
結果
A | B | C | D | |
---|---|---|---|---|
1 | A00 | 100 | 100 | A00100100 |
###四則演算
演算子 | 説明 |
---|---|
+ | 足し算 |
- | 引き算(符号反転) |
* | 掛け算 |
/ | 割り算 |
\ | 割り算の商 |
Mod | 割り算の余り |
^ | 指数(べき乗) |
条件分岐
###比較演算
比較演算子 | 意味 |
---|---|
= | 等しい |
<> | 等しくない |
> | より大きい |
>= | 以上 |
< | より小さい |
<= | 以下 |
###論理演算子
論理演算子 | 意味 | 条件例 | 結果 |
---|---|---|---|
And | 論理積 | True And True | TRUE |
- | - | True And False | FALSE |
- | - | False And True | FALSE |
- | - | False And False | FALSE |
Or | 論理和 | True Or True | TRUE |
- | - | True Or False | TRUE |
- | - | False Or True | TRUE |
- | - | False And False | FALSE |
Xor | 排他論理和 | True Xor True | FALSE |
- | - | True Xor False | TRUE |
- | - | False Xor True | TRUE |
- | - | False Xor False | FALSE |
Not | 論理否定 | Not True | FALSE |
- | - | Not False | TRUE |
###IfステートメントのElseIfの構文
If 条件式1 Then
条件式1が真の処理
ElseIf 条件式2 Then
条件式2が真の処理
ElseIf 条件式3 Then
条件式3が真の処理
Else
全ての条件式が偽の処理
End If
###Select Caseステートメントの構文
基本形
Select Case 変数
Case 条件式1
'条件式1が真の処理
Case 条件式2
'条件式2が真の処理
Case Else
'全ての条件式が偽の処理
End Select
Or条件
Select Case 変数
Case 1, 2
'変数=1 Or 変数=2の処理
Case 3, 4, 5
'変数=3 Or 変数=4 Or 変数=5の処理
Case Else
'変数が上記以外の処理
End Select
範囲指定
Select Case 変数
Case 1 To 2
'変数=1 ~ 2の処理
Case 3 To 5
'変数=3 ~ 5の処理
Case Else
'変数が上記以外の処理
End Select
不等号の使い方
Select Case 変数
Case Is <= 2 'Is は書かなければ自動挿入されます。
'変数<=2の処理
Case Is <= 5
'変数<= 5の処理
Case Else
'変数が上記以外の処理
End Select
繰り返し処理
###For Next構文
Sub 練習()
'例1
Dim i
For i = 1 To 3
Cells(i, i) = 1
Next i
'例2 Step 正負数値
For i = 2 To 1 Step -2
Cells(i, i) = 2
Next i
'例3 Exit Forを使って、ループを抜ける
For i = 1 To 10 Step 3
If i > 3 Then
Exit For
End If
Cells(i, i) = 3
Next i
End Sub
結果
A | B | C | |
---|---|---|---|
1 | 3 | ||
2 | 2 | ||
3 | 1 |
###Do Loop構文
Do [While 条件式]
・・・処理・・・
Loop
または、
Do [Until 条件式]
・・・処理・・・
Loop
Whileは、条件を満たす間、・・・処理・・・を実行します。
Untilは、条件を満たす迄、・・・処理・・・を実行します。
MsgBox関数
###MsgBox関数構文
MsgBox(prompt[, buttons] [, title] [, helpfile, context])
パラメータ | 説明 |
---|---|
prompt | **必ず指定します。**ダイアログ ボックス内にメッセージとして表示する文字列を示す文字列式を指定します。名前付き引数 prompt に指定できる最大文字数は、1 バイト文字で約 1,024 文字です。ただし、使う文字の文字幅に依存します。名前付き引数 prompt に複数行を指定する場合は、キャリッジ リターン (Chr(13))、ライン フィード (Chr(10))、またはキャリッジ リターンとライン フィードの組み合わせ (Chr(13) & Chr(10)) を改行する位置に挿入し、行を区切ってください。 |
buttons | 省略可能です。表示されるボタンの種類と個数、使用するアイコンのスタイル、標準ボタン、メッセージ ボックスがモーダルかどうかなどを表す値の合計値を示す数式を指定します。省略すると、名前付き引数 buttons の既定値 0 になります。 |
title | 省略可能です。ダイアログ ボックスのタイトル バーに表示する文字列を示す文字列式を指定します。名前付き引数 title を省略すると、タイトル バーにはアプリケーション名が表示されます。 |
helpfile | 省略可能です。ダイアログ ボックスに状況依存のヘルプを設定するために、使用するヘルプ ファイルの名前を示す文字列式を指定します。この引数は、表示するダイアログ ボックスの説明をヘルプを使って表示するときに指定します。名前付き引数 helpfile を指定した場合は、引数 context も指定する必要があります。 |
context | 省略可能です。ヘルプ トピックに指定したコンテキスト番号を表す数式を指定します。名前付き引数 context を指定した場合は、引数 helpfile も指定する必要があります。 |
###MsgBox関数のbuttonsの定数(一部のみ)
グループ | 定数 | 値 | 内容 |
---|---|---|---|
ボタンの種類 | vbOKOnly | 0 | [OK] ボタンのみを表示します。 |
- | vbOKCancel | 1 | [OK] ボタンと [キャンセル] ボタンを表示します。 |
- | vbAbortRetryIgnore | 2 | [中止]、[再試行]、および [無視] の 3 つのボタンを表示します。 |
- | vbYesNoCancel | 3 | [はい]、[いいえ]、および [キャンセル] の 3 つのボタンを表示します。 |
- | vbYesNo | 4 | [はい] ボタンと [いいえ] ボタンを表示します。 |
- | vbRetryCancel | 5 | [再試行] ボタンと [キャンセル] ボタンを表示します。 |
アイコンの種類 | vbCritical | 16 | 警告メッセージ アイコンを表示します。Windowsのシステムエラーの音が鳴ります。 |
- | vbQuestion | 32 | 問い合わせメッセージ アイコンを表示します。 |
- | vbExclamation | 48 | 注意メッセージ アイコンを表示します。Windowsのメッセージ(警告)の音が鳴ります。 |
- | vbInformation | 64 | 情報メッセージ アイコンを表示します。Windowsのメッセージ(情報)の音が鳴ります。 |
標準ボタン | vbDefaultButton1 | 0 | 第 1 ボタンを標準ボタンにします。 |
- | vbDefaultButton2 | 256 | 第 2 ボタンを標準ボタンにします。 |
- | vbDefaultButton3 | 512 | 第 3 ボタンを標準ボタンにします。 |
- | vbDefaultButton4 | 768 | 第 4 ボタンを標準ボタンにします。 |
###MsgBox関数の戻り値定数
定数 | 値 | 説明 |
---|---|---|
vbOK | 1 | [OK] |
vbCancel | 2 | [キャンセル] |
vbAbort | 3 | [中止] |
vbRetry | 4 | [再試行] |
vbIgnore | 5 | [無視] |
vbYes | 6 | [はい] |
vbNo | 7 | [いいえ] |
###練習
Sub 練習()
Dim rtn '戻り値記録用変数用意
'ループを使ってMsgBox関数を呼び出す処理を作る
Do
'開始ボックスで戻り値取得、そのため、()が
rtn = MsgBox ("内容", vbAbortRetryIgnore + vbDefaultButton2, "タイトル")
Select Case rtn
Case vbAbort '中止ボタンが押された時
MsgBox "中止されました!", vbCritical
Case vbRetry '再試行ボタン押された時
MsgBox "再試行されました!" & vbLf & "vbLfでラインフィードできます", vbOKCancel + vbQuestion, "再試行"
Case vbIgnore '無視ボタンが押された時
MsgBox "無視されました", Title:="名前付き引数指定" '名前付き引数:=値
End Select
Loop While rtn = vbRetry '再試行ボタンが押されるとループが回ります。
End Sub
InputBox関数
構文
InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])
パラメータ | 説明 |
---|---|
prompt | ** 必ず指定します。**ダイアログ ボックス内にメッセージとして表示する文字列を示す文字列式を指定します。名前付き引数 prompt に指定できる最大文字数は、1 バイト文字で約 1,024 文字です。ただし、使う文字の文字幅に依存します。名前付き引数 prompt に複数行を指定する場合は、キャリッジ リターン (Chr(13))、ライン フィード (Chr(10))、またはキャリッジ リターンとライン フィードの組み合わせ (Chr(13) & Chr(10)) を改行する位置に挿入し、行を区切ってください。 |
title | 省略可能です。ダイアログ ボックスのタイトル バーに表示する文字列式を指定します。名前付き引数 title を省略すると、タイトル バーにはアプリケーション名が表示されます。 |
default | 省略可能です。ユーザーが何も入力しない場合に、テキスト ボックスに既定値として表示する文字列式を指定します。名前付き引数 default を省略すると、テキスト ボックスには何も表示されません。 |
###練習
Sub 練習()
Dim strIn '戻り値記録用変数用意
'ループを使ってInputBox関数を呼び出す処理を作る
Do
'開始ボックスで戻り値取得、そのため、()が
strIn = InputBox("okと入力してください!", "タイトル", "ここに入力")
MsgBox strIn & "と" & vbLf & "入力しました!"
Loop While UCase(strIn) <> UCase("ok") 'UCaseを使い全部大文字に変換して比較する
End Sub
オブジェクト
###Workbookオブジェクト
####Workbook指定
**Workbooks("ブック名")**ブック名で指定されるブックです。
ThisWorkbook動作しているマクロが書いてあるブックです。
####Workbookプロパティとメソッド
定義 | 説明 | |
---|---|---|
プロパティ | Name | 名前 |
- | Names | 名前定義 |
- | Path | 保存パス |
- | FullName | 保存パス+名前 |
- | Saved | 最後の保存から変更されたかを取得・設定 |
- | ReadOnly | 読み取り専用かを取得・設定 |
- | Sheets | 全てのシート |
- | Worksheets | 全てのワークシート |
メソッド | ActiVate | アクティブにします |
- | Close | 閉じる |
- | Save | 上書き保存 |
- | SaveAs | 名前を付けて保存 |
- | SaveCopyAs | コピーを保存 |
- | PrintOut | 印刷 |
- | PrintPreview | 印刷プレビュー |
- | Protect | 保護 |
- | Unprotect | 保護を解除 |
####使用例
Sub 練習()
Dim wb As Workbook
Set wb = Workbooks("Book1.xlsx")
MsgBox wb.Name
End Sub
###WorkSheetsオブジェクト
**Worksheets(インデックス)**インデックスで指定されるワークシート
**Worksheets("シート名")**シート名で指定されるワークシート
####Worksheetのプロパティとメソッド
定義 | 説明 | |
---|---|---|
プロパティ | Name | 名前 |
- | Names | 名前定義 |
- | Cells | Rangeオブジェクト |
- | Range | Rangeオブジェクト |
- | Columns | Rangeオブジェクト |
- | Rows | Rangeオブジェクト |
- | FilterMode | フィルタ モード |
- | Hyperlinks | ハイパーリンク |
- | PageSetup | ページ設定 |
- | ScrollArea | スクロールが可能な領域 |
- | Shapes | すべての図形 |
- | Visible | 表示するかどうか |
メソッド | Activate | アクティブ |
- | Select | 選択 |
- | Copy | コピー |
- | Move | 移動 |
- | Paste | 貼り付け |
- | PasteSpecial | 形式を選択して貼り付け |
- | AutoFilter | フィルター |
- | PivotTables | ピボットテーブル |
- | PrintOut | 印刷 |
- | PrintPreview | 印刷プレビュー |
- | Protect | 保護 |
- | Unprotect | 保護解除 |
####使用例
Sub 練習()
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
MsgBox ws.Name
End Sub
###With、Set練習
Sub 練習()
Dim ws As Worksheet
'Setを使って参照を変数に代入し、変数を使って参照する事が出来ます。
Set ws = Worksheets("シートネーム")
'With使うことで、メソッドなど呼び出す時に毎回同じ参照しないで、一回で済めるようになります。
With ws
.Cells(1, 1) = 1
.Cells(2, 2) = 2
End With
End Sub
ファイル操作
###UTF-8でCSV読み書き
VBAでUTF-8を扱う為には、ADODB.Streamを使う必要があります。そのため、参照設定で、**「Microsoft ActiveX Data Objects 2.8 Library」**にチェックを入れます。
Sub Utf8csvCreate()
Dim i, j, strList As String, csvPath As String
'*パス指定
'ThisWorkbook.Path & "\newFile.txt"
'"D:\newFile.txt"
csvPath = "D:\newFile.txt"
Dim adoSt As Object
Set adoSt = CreateObject(ADODB.Stream)
With adoSt
.Type = adTypeText '既定値。Charset で指定された文字セットのテキスト データを示します。
.Charset = "UTF-8"
.Open
End With
With ActiveSheet.UsedRange
For i = 1 To .Rows.Count
strList = ""
For j = 1 To .Columns.Count
If j > 1 Then
strList = strList & ","
End If
strList = strList & .Cells(i, j)
Next
adoSt.WriteText strList, adWriteLine
Next
End With
adoSt.SaveToFile csvPath, adSaveCreateOverWrite
adoSt.Close
Set adoSt = Nothing
End Sub