学習パート
本記事のパートでは『Chapter4 -深堀』を説明します。
これまでの学習パート
Chapter 4 - セル選択の応用
カレントリージョン(CurrentRegion)
キーボード上のショートカットCTRL+A と同じ効果を得られます。
<コードの説明>
Range("B2").CurrentRegion
Range("起点セル").CurrentRegion.Copy Range("対象セル")
Dim 変数名 As ObjectSet
変数名 = Range(“B2”).CurrentRegion
変数名.Copy Range("A1")
ユーズドレンジ(UsedRange)
Worksheets(“シート名”). UsedRange
Worksheets("シート名").UsedRange.Copy Worksheets("シート名").Range("貼付先セル")
Dim 変数名 As ObjectSet
変数名 = Worksheets("シート名").UsedRange
変数名.Copy Worksheets("シート名").Range("貼付先セル")
参考:全選択コピー貼付
全てのセルを値貼付けするためには下記のコードが最適です。
これは そのまま使用した方が良いのでマネしましょう。
Sub 全選択コピー貼付()
Worksheets("コピー元のシート名").Cells.Copy
Worksheets("コピー先のシート名").Cells.PasteSpecial xlPasteValues
Application.CutCopyMode = False
End Sub
Chapter 4 -Call(別のマクロを呼び出す)
復習:VBAのプログラムの単位はSub~EndSub
「Sub~EndSub」を1つの単位にプログラムは実行されます。
CallではSub~EndSubを呼び出せる
Call マクロ名
Callの注意点
◎Sub ~EndSub内で宣言(Dim)した変数
Sub ~End Sub で囲われた間で宣言した変数(Dim a As String)は、宣言したSub ~End Sub 内のみ、有効です。
◎Sub ~EndSubの外で宣言(Dim)した変数 の場合
Sub ~End Sub の外で宣言した変数(Dim a As String)は
宣言したモジュール内でのみ、有効です。
◎Publicで変数を宣言
Chapter 4 -ブレークポイント
Chapter 4 -IF文(条件式)
条件式が1つの場合
それではVBAだとどういった記載になるのかというと。
条件式が複数の場合
Chapter 4 -For Next(ループ系-回数上限タイプ)
同じ処理を X回処理したい
For Nextを使用するためには 変数(Long型)が必要です。
For Nextの構造理解
For Nextの基本的な構造は下記の内容を理解していればOKです。
For Nextを途中で抜け出したい時(Exit For)
'処理したい内容
Next
For Next の使用例
Sub ForNextとIF文()
Dim lastgyou As Long
Dim i As Long
'変数:lastgyou にA列の最終行(数値)を格納
lastgyou = Cells(Rows.Count, 1).End(xlUp).Row
For i = 0 To lastgyou
'★復習★:Cells(行,列)をあらわしている。
'条件式:A列が田中だったら、
If Cells(1 + i, 1).Value = "田中" Then
'B列にかっこいいと入力
Cells(1 + i, 2).Value = "かっこいい"
'条件式:A列が鈴木だったら、
ElseIf Cells(1 + i, 1).Value = "鈴木" Then
'B列に要確認と入力し、
Cells(1 + i, 2).Value = "要確認"
'ForNextから抜ける(end値まで処理しないで抜ける)
Exit For
End If
Next '←Nextに来るたびにiがカウントアップする。
End Sub
Chapter 4 -Do Loop(ループ系-条件合致までタイプ)
同じ処理を 〇〇になるまで処理したい
Do Loop には、大きく2つの書き方があります。
Do Loopの使用例
Sub Do_Loop_until型の説明()
Dim i As Long '変数 i を開始行として扱う
Dim c As Long '変数 c をカウンターとして扱う
'1行目からスタートの意味
i = 1
Do
'★復習★:Cells(行,列)をあらわしている。
'A列が田中だったら
If Cells(i, 1).Value = "田中" Then
'B列にかっこいいと入れる
Cells(i, 2).Value = "かっこいい"
'変数cをカウントアップしていく。
c = c + 1
End If
'iを1つカウントアップさせ行をずらす。
i = i + 1
Loop Until c = 100 '田中を100個カウントするまでループし続ける。
End Sub
Sub Do_Loop_while型の説明()
Dim i As Long '変数 i を開始行として扱う
Dim c As Long '変数 c をカウンターとして扱う
'1行目からスタートの意味
i = 1
Do
'★復習★:Cells(行,列)をあらわしている。
'A列が田中だったら
If Cells(i, 1).Value = "田中" Then
'B列にかっこいいと入れる
Cells(i, 2).Value = "かっこいい"
'変数cをカウントアップしていく。
c = c + 1
End If
'iを1つカウントアップさせ行をずらす。
i = i + 1
Loop while c < 100 ''田中のカウントが100個未満の間はループし続ける。
End Sub
Chapter 4 -メッセージボックス
Msgbox "文字列"
Chapter 4 -エラー処理
エラー回避
On Error Resume Next でエラー回避
エラー理由が分かっている場合にのみ使用しましょう。
On Error Resume Nextが解除されるまで、
<ソースコード>
Sub Macro1()
'エラースキップ
On Error Resume Next
‘ ここに処理をしたいコードを記載
End Sub
On Error GoTo エラー時の動作 でエラー回避
Sub Macro1() 'エラー検知時Err1を動作させる On Error GoTo Err1
‘ここに処理をしたいコードを記載
'Err1はExit Sub~End Subの間で記載する必要があるため、ExitSubを記載。 Exit Sub
'エラー時の動作。そのままEndSubへとびVBAが終了します。
Err1:
MsgBox "エラー発生。終了"
End Sub
On Error GoTo エラー時の動作後に処理を再開させる方法
◎エラー検知したコードを再実行したい場合
Sub Macro1() 'エラー検知時Err1を動作させる On Error GoTo Err1
‘ここに処理をしたいコードを記載
Exit Sub
Err1:
MsgBox "エラー発生"
Resume 'エラーしたコードを再実行させます。
End Sub
◎エラー検知した次のコードから再開したい場合
Sub Macro1() 'エラー検知時Err1を動作させる On Error GoTo Err1
‘ここに処理をしたいコードを記載
Exit Sub
Err1:
MsgBox "エラー発生"
Resume Next 'エラーしたコードの次のコードから処理再開させます。
End Sub
エラールーチンを解除する方法
<ソースコード>
Sub Macro1()
'エラースキップ
On Error Resume Next
‘ ここに処理をしたいコードを記載
'On Error Resume Nextを解除する
On Error GoTo 0
‘ここからエラー検知させないコードを記載
End Sub
Sub Macro1()
'エラー時 Err1へ飛ぶ
On Error GoTo Err1
‘ ここに処理をしたいコードを記載
'エラー時にErr1へ飛ばなくする
On Error GoTo 0
‘ここからエラー検知させたくないコードを記載
Exit Sub
Err1:
Msgbox "エラーを検知しました" Resume Next
End Sub
Chapter 4 -置換
置換のVBAコードの説明(Replace構文)
EXCEL関数では無く Replace構文を使うメリット
VBA-Replace構文の優位性は以下の通り。
Chapter 4 -VBAでEXCEL関数を使う
Application.WorksheetFunctionでEXCEL関数が使える
Sub macro1()
Range("A1").Value = Application.WorksheetFunction.Sum(Range("B1:B5"))
End Sub
Application.WorksheetFunctionで関数を使う優位性
Chapter 4 -EXCEL以外のファイルを開く
Workbooks.Open "フルパス\ファイル名.拡張子"
CreateObject("Shell.Application").ShellExecute “フルパス”
'メモ帳を開く
CreateObject("Shell.Application").ShellExecute “フルパス\メモ帳.txt”
'OfficeWordを開く
CreateObject("Shell.Application").ShellExecute “フルパス\Word.docx”
'PDFを開く
CreateObject("Shell.Application").ShellExecute “フルパス\〇〇.pdf”
'指定のURLを開く
CreateObject("Shell.Application").ShellExecute “https://nkmrdai.com/”




































