レッスン (1) あるワークシート中のあるセルを指定する Worksheets(" ワークシート名 ").Range(" セル ").Value ( 例 ) Worksheets(" データ収集 ").Range("A2").Value あるワークシートのセルから 別のワークシートのセルへ転記する Worksheets(" シート A").Range(" セル ").Value = Worksheets(" シート B").Range(" セル ").Value ( 例 ) Worksheets(" データ収集 ").Range("A2").Value = Worksheets(" 請求書 1").Range("E2").Value
レッスン (2) 最終行 (+1) を取得する Worksheets(" ワークシート名 ").Cells(Rows.Count, 1).End(xlUp).Row + 1 最大行数 End モードで上へ 行番号 変数を用意し 最終行を取得する 整数型 Dim MaxRow As Integer MaxRow = Worksheets(" ワークシート名 ").Cells(Rows.Count, 1).End(xlUp).Row + 1
レッスン (3) セル範囲のデータを削除する Worksheets(" ワークシート名 ").Range(" セル範囲 ").Value = "" 空白を代入 あるシートの 2 行目から最終行までを削除する 最終行を格納している変数 Worksheets(" ワークシート名 ").Range("2:" & MaxRow).Value = "" "2:" & MaxRow 結合
レッスン (4) With 構文を使って記述を省略する With Worksheets(" ワークシート名 ").Range("A1").Value = 10.Range("A2").Value = 20.Range("A3").Value = 30 End With Worksheets(" ワークシート名 ") を省略して.Range 以降を記述すればよい With Worksheets(" ワークシート名 ").Range("A1") ( 別例 ).Value = 10.Font.Bold = True.Font.Italic = True End With Worksheets(" ワークシート名 ").Range("A1") を省略してそれ以降の. プロパティ以降を記述すればよい
レッスン (5) Worksheet 変数を宣言し ワークシートを格納する ' 変数を宣言 Dim wstotal As Worksheet ' 変数にワークシートを格納 Set wstotal = Worksheets(" データ収集 ") Worksheet s ではないので注意 オブジェクト変数という分類なので 格納するとき Set が必要 Worksheet 変数に格納したワークシートを利用する ' 変数を宣言し ワークシートを格納 Dim wstotal As Worksheet Set wstotal = Worksheets(" データ収集 ") ' 数値を代入する wstotal.range("a1").value = 10 変数に続けて.Range 以降を記述すればよい
レッスン (6) Worksheet 変数を利用して 3 つのシートを順番に処理する ' 変数を宣言 Dim wstotal As Worksheet 変数を 1 つだけ宣言する ' 変数にワークシート 1 を格納し データを代入 Set wstotal = Worksheets(" ワークシート 1") wstotal.range("a1").value = 10 ' 同じ変数にワークシート 2 を格納し データを代入 Set wstotal = Worksheets(" ワークシート 2") wstotal.range("a1").value = 10 ' 同じ変数にワークシート 3 を格納し データを代入 Set wstotal = Worksheets(" ワークシート 3") wstotal.range("a1").value = 10 1 つ目のシート 2 つ目のシート 3 つ目のシート
レッスン (7) For ループを利用し 3 回反復処理する ' ループ変数を宣言 Dim i As Integer ' 繰り返し (i が 1~3 まで ) For i = 1 To 3 MsgBox i Next i For ループを利用し 請求書 1~3 を処理する ' 繰り返し (i が 1~3 まで ) Dim i As Integer For i = 1 To 3 Worksheets(" 請求書 " & i).range("a1").value = 10 Next i " 請求書 " & i 結合 請求書 1, 請求書 2, 請求書 3 を順番に処理
レッスン (8) For Each ループを利用し すべてのワークシートを順番に利用する ' ワークシート変数を宣言 Dim wsinv As Worksheet ' すべてのワークシートから 1 つずつ取り出し wsinv に格納 For Each wsinv In Worksheets ' ワークシート名を MsgBox で出力する MsgBox wsinv.name Worksheet s なので注意 Next wsinv.name プロパティ ワークシート名
レッスン (9) For Each ループの中で If 文を利用する ' ワークシート変数を宣言 Dim wsinv As Worksheet ' すべてのワークシートから 1 つずつ取り出し wsinv に格納 For Each wsinv In Worksheets ' もしワークシート名が データ収集 と一致しなければ If wsinv.name <> " データ収集 " Then ' ワークシート名を MsgBox で出力 MsgBox wsinv.name <> 等しくない ( 比較演算子 ) End If Next wsinv
レッスン (10) Workbooks.Open でファイルを開く ' 特定のパスにある Excel ブックを開く Workbooks.Open ("C: Users [ ユーザー名 ] Downloads 50Books 20190603VBA 商事様 _ 請求書.xlsx")
レッスン (11) Workbooks.Open でブックを選ぶ ' ダイアログからブックを選ぶ Application.GetOpenFilename("Microsoft Excel ブック,*.xls?") 表示させたい任意の文字列 ただし これでは選ぶだけであり ブックは開かれない ワイルドカードで絞り込む 記号 用例 抽出されるファイル名 * *.xlsx A.xlsx, B.xlsx, C.xlsx? *.xls? A.xlsx, D.xlsm, E.xlsb Workbooks.Open で選んだブックを開く ' パスを格納する変数を宣言 Dim openpath As String パスを格納するので 文字列型とする ' ダイアログからブックを選び そのパスを格納 openpath = Application.GetOpenFilename("Microsoft Excel ブック,*.xls?") ' パスにあるブックを開く Workbooks.Open (openpath)
レッスン (12) Workbook 型の変数を宣言し ワークブックを格納 'Workbook 型の変数を宣言 Dim openbook As Workbook Workbook s ではないので注意 ' 現在のワークブックを変数に格納する Set openbook = Application.ActiveWorkbook 現在開いている ( アクティブな ) ワークブック [Application. は省略可 ] ダイアログで開いたブックを Workbook 型の変数に格納する ' ダイアログからブックを選び パスを格納する Dim openpath As String openpath = Application.GetOpenFilename("Microsoft Excel ブック,*.xls?") 'Workbook 型の変数を宣言 Dim openbook As Workbook ' ファイルを開き 変数に格納する Set openbook = Workbooks.Open(openPath)
レッスン (13) ダイアログで キャンセル を押した場合のエラー対策 ' ダイアログからブックを選び パスを格納する Dim openpath As String openpath = Application.GetOpenFilename("Microsoft Excel ブック,*.xls?") ' もしパスが False でなければ処理を行う (False なら何もしない ) If openpath <> "False" Then End If MsgBox " キャンセルされませんでした "
レッスン (14) ダイアログで開いたブックのデータを扱う ' ダイアログからブックを選び パスを格納する Dim openpath As String openpath = Application.GetOpenFilename("Microsoft Excel ブック,*.xls?") ' 変数を用意し ブックを開いて格納 Dim openbook As Workbook Set openbook = Workbooks.Open(openPath) ' 開いたブックのデータを出力してみる MsgBox openbook.worksheets(1).range("a1").value Worksheets(1) で 一番目のワークシートを指す ( ワークシート名を指定しなくても済むので 使い勝手のいい方法 )
レッスン (15) ダイアログで複数のブックを選ぶ ' 配列のための変数を宣言 (Variant 型 ) Dim arraypath As Variant 複数選択を可にする ' ダイアログから複数のブックを選び 配列にパスを格納する arraypath = Application.GetOpenFilename("Microsoft Excel ブック,*.xls?", MultiSelect:=True) ダイアログで複数のブックを選び 1~3 番目を開く ' 配列のための変数を宣言 (Variant 型 ) Dim arraypath As Variant ' ダイアログから複数のブックを選び 配列にパスを格納する arraypath = Application.GetOpenFilename("Microsoft Excel ブック,*.xls?", MultiSelect:=True) ' 配列の要素 (1)(2)(3) に格納されたパスからブックを順に開く Workbooks.Open (arraypath(1)) Workbooks.Open (arraypath(2)) Workbooks.Open (arraypath(3))
レッスン (16) 配列の要素数を取得する UBound( 配列名 ) 配列の要素が 10 あるなら 10 を取得 配列の最後まで For ループで繰り返す 'For ループ (i が 1 から配列の要素数まで ) For i = 1 To UBound(arrayPath) 配列名だけを指定する Next i ' 配列の要素 (i 番目 ) のパスからブックを開く Workbooks.Open (arraypath(i)) 配列の i 番目を指定する
レッスン (17) 複数ブックを開き プロパティやメソッドを利用する 'For ループ (i が 1 から配列の要素数まで ) Dim i As Integer For i = 1 To UBound(arrayPath) ' 変数を用意し ブックを開いて格納 Dim openbook As Workbook Set openbook = Workbooks.Open(arrayPath(i)) ' ブックのプロパティやメソッドを利用 MsgBox openbook.name openbook.close Next i
レッスン (18) 配列であるかどうかチェックする IsArray( 配列名 ) 引数が配列であれば True を返す [ 複数ブック版 ] ダイアログのキャンセルに対するエラー処理 ' ダイアログから複数のブックを選び 配列にパスを格納する Dim arraypath As Variant arraypath = Application.GetOpenFilename("Microsoft Excel ブック,*.xls?", MultiSelect:=True) ' もし openpath が配列ならば 処理をする ( そうでなければ何もしない ) If IsArray(arrayPath) Then End If MsgBox " キャンセルされませんでした "
レッスン (19) ダイアログで開いた複数のブックのデータを利用する 'For ループ (i が 1 から配列の要素数まで ) Dim i As Integer For i = 1 To UBound(arrayPath) ' 変数を用意し ブックを開いて格納 Dim openbook As Workbook Set openbook = Workbooks.Open(arrayPath(i)) ' データを出力 MsgBox openbook.worksheets(1).range("a1").value Next i 'openbook を閉じる openbook.close Worksheets(1) で 一番目のワークシートを指す ( ワークシート名を指定しなくても済むので 使い勝手のいい方法 )
レッスン (20) 画面のチラつきを防止する ' 画面の描画を停止する Application.ScreenUpdating = False '--- ブックの開閉のような 画面がチラつく処理 --- ' 画面の描画を再開する Application.ScreenUpdating = True 画面の描画を再開するまで Excel 画面に結果が反映されないので注意