2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

VBAマクロ 入門勉強メモ

Last updated at Posted at 2020-10-27

###広告
インディーズチームでAzraelという音ゲーを出しています。現在はiOSバージョンのみです。
Androidはできる次第リンク先を入れます。

有料ですが、音ゲーにご興味のある方是非遊んでみてください!。

TwitterAzrael公式

iOS:

前言
この内容は、個人がよく使うものを勉強でマクロVBA応用編を参考に、簡単に整理したものに過ぎませんので、もっと、知りたい方はリンクからご覧になってください。

開発環境設定

ファイル->オプションからExcelオプションを開き、リボンのユーザー設定中の開発をチェックに入れます。
222.png

すると、開発一覧が追加されます。
888.png

開発->Visual BasicVBEを開きます。
中から挿入->標準モジュールでモジュール作成し、VBAを書くことができます。
111.png

VBAを始まる前に重要なオプションがあります。
ツール->オプションをクリック
555.png

自動構文チェックを外し、変数の宣言を強制するにチェックをいれます。
666.png

すると、モジュールにOption Explicitが追加されます。
777.png

この設定は
マクロを書き始める前に、出来れば設定しておいた方が良いオプションがあります。
いえ、絶対に設定しておかなければならないVBEのオプション設定です、
必ず、最初に設定しておいてください。
と書かれてありますので、従って間違いないでしょう!。

モジュールの名前変更は表示->プロパティウィンドウを開き変更できます。
444.png

モジュールの解放
333.png

練習Sub, End Sub

 Sub 練習()
      '範囲"列行:列行"
      Range("A1:C2") = "こんにちは!"
 End Sub

実行
方法1
111.png
方法2
開発->マクロ->実行
222.png

結果

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
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?