非表示にできる< 目次 >
学習パート
本記事のパートでは『Chapter4 -深堀』を説明します。
これまでの学習パート
Chapter 4 - セル選択の応用
カレントリージョン(CurrentRegion)
キーボード上のショートカットCTRL+A と同じ効果を得られます。
<コードの説明>
1 |
Range("B2").CurrentRegion |
1 |
Range("起点セル").CurrentRegion.Copy Range("対象セル") |
1 2 3 |
Dim 変数名 As ObjectSet 変数名 = Range(“B2”).CurrentRegion 変数名.Copy Range("A1") |
ユーズドレンジ(UsedRange)
1 |
Worksheets(“シート名”). UsedRange |
1 |
Worksheets("シート名").UsedRange.Copy Worksheets("シート名").Range("貼付先セル") |
1 2 3 |
Dim 変数名 As ObjectSet 変数名 = Worksheets("シート名").UsedRange 変数名.Copy Worksheets("シート名").Range("貼付先セル") |
参考:全選択コピー貼付
全てのセルを値貼付けするためには下記のコードが最適です。
これは そのまま使用した方が良いのでマネしましょう。
1 2 3 4 5 6 7 |
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を呼び出せる
1 |
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 の使用例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
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の使用例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
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 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
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 -メッセージボックス
1 |
Msgbox "文字列" |
Chapter 4 -エラー処理
エラー回避
On Error Resume Next でエラー回避
エラー理由が分かっている場合にのみ使用しましょう。
On Error Resume Nextが解除されるまで、
<ソースコード>
1 2 3 4 5 6 |
Sub Macro1() 'エラースキップ On Error Resume Next ‘ ここに処理をしたいコードを記載 End Sub |
On Error GoTo エラー時の動作 でエラー回避
1 2 3 4 5 6 7 8 9 |
Sub Macro1() 'エラー検知時Err1を動作させる On Error GoTo Err1 ‘ここに処理をしたいコードを記載 'Err1はExit Sub~End Subの間で記載する必要があるため、ExitSubを記載。 Exit Sub 'エラー時の動作。そのままEndSubへとびVBAが終了します。 Err1: MsgBox "エラー発生。終了" End Sub |
On Error GoTo エラー時の動作後に処理を再開させる方法
◎エラー検知したコードを再実行したい場合
1 2 3 4 5 6 7 8 |
Sub Macro1() 'エラー検知時Err1を動作させる On Error GoTo Err1 ‘ここに処理をしたいコードを記載 Exit Sub Err1: MsgBox "エラー発生" Resume 'エラーしたコードを再実行させます。 End Sub |
◎エラー検知した次のコードから再開したい場合
1 2 3 4 5 6 7 8 |
Sub Macro1() 'エラー検知時Err1を動作させる On Error GoTo Err1 ‘ここに処理をしたいコードを記載 Exit Sub Err1: MsgBox "エラー発生" Resume Next 'エラーしたコードの次のコードから処理再開させます。 End Sub |
エラールーチンを解除する方法
<ソースコード>
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub Macro1() 'エラースキップ On Error Resume Next ‘ ここに処理をしたいコードを記載 'On Error Resume Nextを解除する On Error GoTo 0 ‘ここからエラー検知させないコードを記載 End Sub |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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関数が使える
1 2 3 |
Sub macro1() Range("A1").Value = Application.WorksheetFunction.Sum(Range("B1:B5")) End Sub |
Application.WorksheetFunctionで関数を使う優位性
Chapter 4 -EXCEL以外のファイルを開く
1 |
Workbooks.Open "フルパス\ファイル名.拡張子" |
1 |
CreateObject("Shell.Application").ShellExecute “フルパス” |
1 2 3 4 5 6 7 8 9 10 11 |
'メモ帳を開く 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/” |