VBAのメモ

目標:以下のことが説明できるようになる。
1.EXCELとVBAの関係
2.[開発]タブをツールリボンに追加する方法
3.マクロ登録・実行方法
4.ボタンによるマクロ実行方法
5.ダブルクリックイベントによるマクロ実行方法
6.VBEの説明
7.エディタのショートカットキー操作
8.デバグの仕方
9.アドインの仕組み

キーボードを使って文字をきちんと入力できる
タイピング練習動画

キーボード入力、マウス操作の知識

<VBA事始め>マクロのデバグをできるようになろう!
3.VBEの各画面における操作とマクロのデバグの仕方

基本的なスキル

1.開発タブの設定
2.エクセルマクロブックの作成
3.マクロの実行
4.エクセルマクロの記録
5.VBE画面の表示
6.マクロ実行のボタンの作り方
7.ダブルクリックによるマクロ実行のやり方
8.ショートカットキーを駆使したマクロのコーディング
9.デバグの仕方(例外発生時)
10.アドインの仕組み

1.エクセルを開く➡エクセルマクロブックに変更する
2.VBE画面を開く
3.すべてのウィンドウを開いたり閉じたりする
4.VBAコードをコピーしてVBEの画面に張り付ける
5.

1.VBE画面の標準設定を実施する
2.実行時エラーのパターン
・オーバーフロー

1.VBEの起動
Alt+F11

2.プロシージャの移動
Ctrl+↑ :前のプロシージャに移動
Ctrl+↓ :次のプロシージャに移動

3.モジュールの先頭への移動/最後尾への移動
モジュールの先頭に一気に移動したいとき
Ctrl+Home :モジュールの先頭に移動
Ctrl+End :モジュールの最後尾に移動

4.単語の移動と選択
同じ行での単語の移動についてのショートカットキー
Ctrl+← :前の単語に移動
Ctrl+→ :次の単語に移動
Home :同じ行で行頭に移動
End :同じ行で行末に移動
同じ行での単語の選択についてのショートカットキー
Ctrl+Shift+← :前の単語を選択
Ctrl+Shift+→ :次の単語を選択
Shift+Home :同じ行で行頭まで選択
Shift+End :同じ行で行末まで選択

<マウスを使って単語を選択する場合>
目的とする単語の箇所へカーソルを移動してダブルクリックする
<マウスを使って行全体を選択する場合>
行の左端にカーソルを移動してクリックする

5.単語、行の削除と元に戻す
単語を選択した後にDeleteキー押下で単語削除

Ctrl+Y   : 現在行を削除する
Ctrl+Del : 単語の最後までを削除する
Ctrl+Z   : 元に戻す

5.変数やプロシージャを定義したところへ移動する
ある変数があったとして、その変数宣言している箇所に
ショートカットキー一発で移動することができる
そして、さらにそこから元の位置に戻ることもできる
この機能をVBEでは「定義の表示」という名前で呼んでいる
なおカーソルがプロシージャの呼び出しだった場合も同様にできる

Shift+F2      :定義の表示
Ctrl+Shift+F2 :定義の表示から元の位置へ戻る

1 画面下へ      Ctrl+PageDown
1 画面上へ      Ctrl+PageUp
直前の場所に戻る    Ctrl+Shift+F2

6.入力候補の表示
文字入力を途中までした時点で
Ctrl+Space
その文字からはじまる単語の候補一覧が表示される
一覧から上下キーで選択したら、Tab キーで確定する
候補がたった一つの場合は、一覧のウィンドウは出ずに、その単語がそのままコードウィンドウに入力される
宣言、定義されていればプロシージャ名や変数などでも使える

Ctrl+J       :プロパティ/メソッドの一覧
Ctrl+Shift+J :定数の一覧
Ctrl+Shift+I :パラメータ ヒント

7.インデント(字下げ)
<単一行の場合:打鍵のみの場合>
上下キーで字下げ/字上げしたい行の1行上に移動する
Endキー押下でその行の最後に移動する
→キーで次行の先頭に移動する
インデントをする Tab
インデントを戻す Shift+Tab
<単一行の場合:マウスを使う場合>
カーソルをインデントしたい行の頭に移動してクリック
インデントをする Tab
インデントを戻す Shift+Tab

<複数行の場合:打鍵のみの場合>
上下キーで字下げ/字上げしたい行の1行上に移動する
Endキー押下でその行の最後に移動する
→キーで次行の先頭に移動する
Shift+↓
Tab/Shift+Tab
<複数行の場合:マウスを使う場合>
カーソルをインデントしたい行の頭に移動してクリック
次にShiftキーを押しながらカーソルを複数行の最後に移動してクリック
Tab/Shift+Tab

8.コメント化/非コメント化
<事前にツールバーのアクセスキーの登録を行っておく>
なおVBEエディタ画面上にツールバーのコメント化/非コメント化の
アイコンとアクセスキーが見える状態でないとこのキーは効きません。

Alt+/  : コメント化
alt+\  : 非コメント化 *キーボード上は/の隣の\のキーでもOK

<事前にショートカットメニューの登録を行っておく>

Shift+F10のあと↓キーでコメント化アイコンを選択後Enterキー押下でコメント化する
Shift+F10のあと↓キー2回で非コメント化アイコンを選択後Enterキー押下でコメント化する

複数行の場合は複数行の選択操作後に同様の操作でコメント化、非コメント化ができる

9.実行とステップイン

実行したいプロシージャ(引数なしのもの)にカーソルがある状態で
F5 :実行
F8 :ステップイン
ステップインは一行ずつ実行する実行方法
デバッグの時に使用する

10.ステップオーバーとステップアウトとカーソルの前まで実行

サブルーチン処理に飛びたくないときはShift+F8を使います。
サブルーチン処理に飛んだ後に処理を呼び出し元へ戻る場合はCtrl+Shift+F8を使います。

ループ処理の中からループ処理後まで実行したい場合は
カーソルを実行を中断したいところまで移動してCtrl+F8を使います

自動データヒントは、ブレークポイントやStopステートメント、または実行時エラーなどで、
プログラムが中断しているときに、変数の上にマウスカーソルをホバーすることで、
その変数の値をポップアップ表示してくれる機能です

11.実行中断とブレークポイントの設定・解除

時間の途中で中断して様子を見たいとき
Ctrl+Break/Esc :中断

予め問題となるところまで実行を進めてそれからステップ実行で動作確認したい場合
F9:ブレークポイントの設定/解除
Ctrl+Shift+F9:すべてのブレークポイントを解除

12.クイックウォッチ/クイックヒント
その場で変数の値を見たい場合に使用する
Shift+F9 : クイック ウォッチ

その場で定義情報を見たい場合に使用する
Ctrl+I クイック ヒント

13.検索・置換
事前に検索/置換したい文字列を選択後に実行すると
ダイアログが出たときにはすでにその文字列が表示されている
Ctrl + F 検索
Ctrl + H 置換
次を検索 F3
前を検索 Shift + F3

14.ウィンドウ間の移動
<コードウィンドウとイミディエイトウィンドウの移動>
F7 :コードウィンドウの表示/移動
Ctrl+G :イミディエイトウィンドウの表示/移動
<プロジェクトエクスプローラーとプロパティウィンドウの移動>
Ctrl+R :プロジェクトエクスプローラーの表示、移動
F4 :プロパティウィンドウの表示、移動

15.別モジュールのコード表示をしたいとき
別のモジュールのコードを表示したいときは、Ctrl+R でプロジェクトエクスプローラーに移動、
モジュールを選択して Enter で開く

16.オブジェクト名を変更したいとき
オブジェクト名を変更したいときには、Ctrl+Rでプロジェクトエクスプローラーに移動、
オブジェクトを選択して F4 → Tab でオブジェクト名の編集が可能

  1. ターゲットのエクセルを開くと

2.一覧表を更新する場合の共有によるファイル破壊を防ぐために
3.

Function IsBookOpened(a_sFilePath) As Boolean
On Error Resume Next

'// 保存済みのブックか判定
Open a_sFilePath For Append As #1
Close #1

If Err.Number > 0 Then
    '// 既に開かれている場合
    IsBookOpened = True
Else
    '// 開かれていない場合
    IsBookOpened = False
End If

End Function

Sub CheckBookOpened()
Dim sFilePath
Dim ret As Boolean

sFilePath = "C:\test\a.xlsx"

'// ファイル存在チェック
ret = IsExistFileDir(sFilePath)
If (ret = False) Then
    Debug.Print "ファイルが存在しない"
    Exit Sub
End If

'// 読み取り専用チェック
ret = IsReadOnly(sFilePath)
If (ret = True) Then
    Debug.Print "読み取り専用である"
    Exit Sub
End If

'// 開いているかチェック
ret = IsBookOpened(sFilePath)
If (ret = True) Then
    Debug.Print "開いている"
    Exit Sub
End If

Debug.Print "開くことができるブックです"

End Sub

Sub Utf8ToSjis(a_sFrom, a_sTo)
Dim streamRead As New ADODB.Stream ‘// 読み込みデータ
Dim streamWrite As New ADODB.Stream ‘// 書き込みデータ
Dim sText ‘// ファイルデータ

'// ファイル読み込み
streamRead.Type = adTypeText
streamRead.Charset = "UTF-8"
streamRead.Open
Call streamRead.LoadFromFile(a_sFrom)

'// 改行コードLFをCRLFに変換
sText = streamRead.ReadText
sText = Replace(sText, vbLf, vbCrLf)
sText = Replace(sText, vbCr & vbCr, vbCr)

'// ファイル書き込み
streamWrite.Type = adTypeText
streamWrite.Charset = "Shift-JIS"
streamWrite.Open

'// データ書き込み
Call streamWrite.WriteText(sText)

'// 保存
Call streamWrite.SaveToFile(a_sTo, adSaveCreateOverWrite)

'// クローズ
streamRead.Close
streamWrite.Close

End Sub

Function IsBookOpened(a_sFilePath) As Boolean
On Error Resume Next

'// 保存済みのブックか判定
Open a_sFilePath For Append As #1
Close #1

If Err.Number > 0 Then
    '// 既に開かれている場合
    IsBookOpened = True
Else
    '// 開かれていない場合
    IsBookOpened = False
End If

End Function

Sub CheckBookOpened()
Dim sFilePath
Dim ret As Boolean

sFilePath = "C:\test\a.xlsx"

'// ファイル存在チェック
ret = IsExistFileDir(sFilePath)
If (ret = False) Then
    Debug.Print "ファイルが存在しない"
    Exit Sub
End If

'// 読み取り専用チェック
ret = IsReadOnly(sFilePath)
If (ret = True) Then
    Debug.Print "読み取り専用である"
    Exit Sub
End If

'// 開いているかチェック
ret = IsBookOpened(sFilePath)
If (ret = True) Then
    Debug.Print "開いている"
    Exit Sub
End If

Debug.Print "開くことができるブックです"

End Sub

Public Function IsExistFileDir(a_sFilePath) As Boolean
Dim a

a = Dir(a_sFilePath)
If (a <> "") Then
    IsExistFileDir = True
Else
    IsExistFileDir = False
End If

End Function

Sub IsExistFileDir利用例()
Dim a
Dim i
Dim bResult As Boolean

a = "C:\aaa\TextDocument.Txt"

For i = 0 To 100000
    bResult = IsExistFileDir(a)
Next

End Sub

Function IsReadOnly(a_sFilePath) As Boolean
Dim ret As VbFileAttribute

'// ファイルの属性を取得
ret = GetAttr(a_sFilePath)

'// 読み取り専用が設定されている場合
If (ret And vbReadOnly) = vbReadOnly Then
    IsReadOnly = True
Else
    IsReadOnly = False
End If

End Function

Sub IsReadOnlyTest()
Dim sFilePath
Dim ret As Boolean

sFilePath = "D:\test\a.txt"

'// ファイル存在チェック
ret = IsExistFileDir(sFilePath)
If (ret = False) Then
    Debug.Print "ファイルが存在しない"
    Exit Sub
End If

'// 読み取り専用チェック
ret = IsReadOnly(sFilePath)
If (ret = False) Then
    Debug.Print "読み取り専用ではない"
    Exit Sub
End If

Debug.Print "読み取り専用です"

End Sub

‘// ファイル存在チェック
Public Function IsExistFileDir(a_sFilePath) As Boolean
Dim a

a = Dir(a_sFilePath)
If (a <> "") Then
    IsExistFileDir = True
Else
    IsExistFileDir = False
End If

End Function

Sub ProcA()
For i = -5 To 5
Call ProcB(i)
Next
End Sub

VBASub ProcB(x)
Debug.Print 100 / x
End SubUncategorized

コメント

タイトルとURLをコピーしました