'(1)ワークシートどうしのやりとり 'ワークシート「請求書1」から、ワークシート「データ収集」にデータを転記しましょう。 Sub example01() '請求書番号 (請求書1のE2からデータ収集のA2へ) Worksheets("データ収集").Range("A2").Value = Worksheets("請求書1").Range("E2").Value '発行日 (請求書1のE1からデータ収集のB2へ) Worksheets("データ収集").Range("B2").Value = Worksheets("請求書1").Range("E1").Value '会社名 (請求書1のB4からデータ収集のC2へ) Worksheets("データ収集").Range("C2").Value = Worksheets("請求書1").Range("B4").Value '担当者名 (請求書1のB5からデータ収集のD2へ) Worksheets("データ収集").Range("D2").Value = Worksheets("請求書1").Range("B5").Value '請求金額 (請求書1のE31からデータ収集のE2へ) Worksheets("データ収集").Range("E2").Value = Worksheets("請求書1").Range("E31").Value End Sub ?? ?? ?? ?? ?? 演習課題 レッスン(1)
'(1)ワークシートどうしのやりとり 'ワークシート「請求書1」から、ワークシート「データ収集」にデータを転記しましょう。 Sub example01() '請求書番号 (請求書1のE2からデータ収集のA2へ) Worksheets("データ収集").Range("A2").Value = Worksheets("請求書1").Range("E2").Value '発行日 (請求書1のE1からデータ収集のB2へ) Worksheets("データ収集").Range("B2").Value = Worksheets("請求書1").Range("E1").Value '会社名 (請求書1のB4からデータ収集のC2へ) Worksheets("データ収集").Range("C2").Value = Worksheets("請求書1").Range("B4").Value '担当者名 (請求書1のB5からデータ収集のD2へ) Worksheets("データ収集").Range("D2").Value = Worksheets("請求書1").Range("B5").Value '請求金額 (請求書1のE31からデータ収集のE2へ) Worksheets("データ収集").Range("E2").Value = Worksheets("請求書1").Range("E31").Value End Sub 解答
'(2)最終行に転記する
'「データ収集」へデータを転記する際、必ず最終行へ転記するようにしましょう。 Sub example02()
'「データ収集」の最終行を変数に取得 Dim MaxRow As Integer
'[請求書番号,発行日,会社名,担当者名,請求金額]をそれぞれ転記する Worksheets("データ収集").Range("A2").Value = Worksheets("請求書1").Range("E2").Value Worksheets("データ収集").Range("B2").Value = Worksheets("請求書1").Range("E1").Value Worksheets("データ収集").Range("C2").Value = Worksheets("請求書1").Range("B4").Value Worksheets("データ収集").Range("D2").Value = Worksheets("請求書1").Range("B5").Value Worksheets("データ収集").Range("E2").Value = Worksheets("請求書1").Range("E31").Value End Sub ?? 演習課題 レッスン(2) 修正
'(2)最終行に転記する
'「データ収集」へデータを転記する際、必ず最終行へ転記するようにしましょう。 Sub example02()
'「データ収集」の最終行を変数に取得 Dim MaxRow As Integer
MaxRow = Worksheets("データ収集").Cells(Rows.Count, 1).End(xlUp).Row + 1 '[請求書番号,発行日,会社名,担当者名,請求金額]をそれぞれ転記する
Worksheets("データ収集").Range("A" & MaxRow).Value = Worksheets("請求書1").Range("E2").Value Worksheets("データ収集").Range("B" & MaxRow).Value = Worksheets("請求書1").Range("E1").Value Worksheets("データ収集").Range("C" & MaxRow).Value = Worksheets("請求書1").Range("B4").Value Worksheets("データ収集").Range("D" & MaxRow).Value = Worksheets("請求書1").Range("B5").Value Worksheets("データ収集").Range("E" & MaxRow).Value = Worksheets("請求書1").Range("E31").Value End Sub
'(3)データ収集結果を削除する
'転記されたデータを削除するマクロを作っておきましょう。 Sub clear03()
'最終行を変数に取得 Dim MaxRow As Integer
MaxRow = Worksheets("データ収集").Cells(Rows.Count, 1).End(xlUp).Row + 1 '2行目から最終行までのデータを削除する
End Sub
?? 演習課題 レッスン(3)
'(3)データ収集結果を削除する
'転記されたデータを削除するマクロを作っておきましょう。 Sub clear03()
'最終行を変数に取得 Dim MaxRow As Integer
MaxRow = Worksheets("データ収集").Cells(Rows.Count, 1).End(xlUp).Row + 1 '2行目から最終行までのデータを削除する
Worksheets("データ収集").Range("2:" & MaxRow).Value = "" End Sub
'(4)With構文を使って省略する
'With構文を使って、ワークシート名を省略して入力しましょう。 Sub example04()
'最終行を取得しておく Dim MaxRow As Integer
MaxRow = Worksheets("データ収集").Cells(Rows.Count, 1).End(xlUp).Row + 1 '[請求書番号,発行日,会社名,担当者名,請求金額]をそれぞれ転記する
Worksheets("データ収集").Range("A" & MaxRow).Value = Worksheets("請求書1").Range("E2").Value Worksheets("データ収集").Range("B" & MaxRow).Value = Worksheets("請求書1").Range("E1").Value Worksheets("データ収集").Range("C" & MaxRow).Value = Worksheets("請求書1").Range("B4").Value Worksheets("データ収集").Range("D" & MaxRow).Value = Worksheets("請求書1").Range("B5").Value Worksheets("データ収集").Range("E" & MaxRow).Value = Worksheets("請求書1").Range("E31").Value End Sub
演習課題 レッスン(4)
'(4)With構文を使って省略する
'With構文を使って、ワークシート名を省略して入力しましょう。 Sub example04()
'最終行を取得しておく Dim MaxRow As Integer
MaxRow = Worksheets("データ収集").Cells(Rows.Count, 1).End(xlUp).Row + 1 '[請求書番号,発行日,会社名,担当者名,請求金額]をそれぞれ転記する
With Worksheets("データ収集")
.Range("A" & MaxRow).Value = Worksheets("請求書1").Range("E2").Value .Range("B" & MaxRow).Value = Worksheets("請求書1").Range("E1").Value .Range("C" & MaxRow).Value = Worksheets("請求書1").Range("B4").Value .Range("D" & MaxRow).Value = Worksheets("請求書1").Range("B5").Value .Range("E" & MaxRow).Value = Worksheets("請求書1").Range("E31").Value End With
End Sub
'(5)Worksheet変数を利用する
'Worksheet変数を宣言して、ワークシートを格納して利用しましょう。 Sub example05()
'Worksheet変数を宣言する Dim wsTotal As Worksheet Dim wsInv As Worksheet
'「データ収集」と「請求書1」を変数に格納する
'最終行を取得しておく Dim MaxRow As Integer
MaxRow = Worksheets("データ収集").Cells(Rows.Count, 1).End(xlUp).Row + 1 '[請求書番号,発行日,会社名,担当者名,請求金額]をそれぞれ転記する
Worksheets("データ収集").Range("A" & MaxRow).Value = Worksheets("請求書1").Range("E2").Value Worksheets("データ収集").Range("B" & MaxRow).Value = Worksheets("請求書1").Range("E1").Value Worksheets("データ収集").Range("C" & MaxRow).Value = Worksheets("請求書1").Range("B4").Value Worksheets("データ収集").Range("D" & MaxRow).Value = Worksheets("請求書1").Range("B5").Value Worksheets("データ収集").Range("E" & MaxRow).Value = Worksheets("請求書1").Range("E31").Value End Sub
?? 演習課題 レッスン(5)
'(5)Worksheet変数を利用する
'Worksheet変数を宣言して、ワークシートを格納して利用しましょう。 Sub example05()
'Worksheet変数を宣言する Dim wsTotal As Worksheet Dim wsInv As Worksheet
'「データ収集」と「請求書1」を変数に格納する Set wsTotal = Worksheets("データ収集")
Set wsInv = Worksheets("請求書1") '最終行を取得しておく
Dim MaxRow As Integer
MaxRow = Worksheets("データ収集").Cells(Rows.Count, 1).End(xlUp).Row + 1 '[請求書番号,発行日,会社名,担当者名,請求金額]をそれぞれ転記する
wsTotal.Range("A" & MaxRow).Value = wsInv.Range("E2").Value wsTotal.Range("B" & MaxRow).Value = wsInv.Range("E1").Value wsTotal.Range("C" & MaxRow).Value = wsInv.Range("B4").Value wsTotal.Range("D" & MaxRow).Value = wsInv.Range("B5").Value wsTotal.Range("E" & MaxRow).Value = wsInv.Range("E31").Value End Sub
'(6)3つのシートを順番に転記 (ループなし)
'請求書1、請求書2、請求書3の順にデータを転記しましょう。 Sub example06()
'変数にワークシートを格納する Dim wsTotal As Worksheet
Dim wsInv As Worksheet
Set wsTotal = Worksheets("データ収集") Set wsInv = Worksheets("請求書1")
'最終行を取得しておく Dim MaxRow As Integer
MaxRow = Worksheets("データ収集").Cells(Rows.Count, 1).End(xlUp).Row + 1 '[請求書番号,発行日,会社名,担当者名,請求金額]をそれぞれ転記する
wsTotal.Range("A" & MaxRow).Value = wsInv.Range("E2").Value wsTotal.Range("B" & MaxRow).Value = wsInv.Range("E1").Value wsTotal.Range("C" & MaxRow).Value = wsInv.Range("B4").Value wsTotal.Range("D" & MaxRow).Value = wsInv.Range("B5").Value wsTotal.Range("E" & MaxRow).Value = wsInv.Range("E31").Value '次の処理のため、最終行を+1しておく
MaxRow = MaxRow + 1??
演習課題 レッスン(6)
'---請求書2の処理---'請求書2を変数に代入
Set wsInv = Worksheets("請求書2")
'[請求書番号,発行日,会社名,担当者名,請求金額]をそれぞれ転記する wsTotal.Range("A" & MaxRow).Value = wsInv.Range("E2").Value
wsTotal.Range("B" & MaxRow).Value = wsInv.Range("E1").Value wsTotal.Range("C" & MaxRow).Value = wsInv.Range("B4").Value wsTotal.Range("D" & MaxRow).Value = wsInv.Range("B5").Value wsTotal.Range("E" & MaxRow).Value = wsInv.Range("E31").Value '次の処理のため、最終行を+1しておく MaxRow = MaxRow + 1 ?? ?? 演習課題 つづき '(次のページへ)
'---請求書3の処理---'請求書3を変数に代入
Set wsInv = Worksheets("請求書3")
'[請求書番号,発行日,会社名,担当者名,請求金額]をそれぞれ転記する wsTotal.Range("A" & MaxRow).Value = wsInv.Range("E2").Value
wsTotal.Range("B" & MaxRow).Value = wsInv.Range("E1").Value wsTotal.Range("C" & MaxRow).Value = wsInv.Range("B4").Value wsTotal.Range("D" & MaxRow).Value = wsInv.Range("B5").Value wsTotal.Range("E" & MaxRow).Value = wsInv.Range("E31").Value End Sub
?? 演習課題 つづき
'(6)3つのシートを順番に転記 (ループなし)
'請求書1、請求書2、請求書3の順にデータを転記しましょう。 Sub example06()
'変数にワークシートを格納する Dim wsTotal As Worksheet
Dim wsInv As Worksheet
Set wsTotal = Worksheets("データ収集") Set wsInv = Worksheets("請求書1")
'最終行を取得しておく Dim MaxRow As Integer
MaxRow = Worksheets("データ収集").Cells(Rows.Count, 1).End(xlUp).Row + 1 '[請求書番号,発行日,会社名,担当者名,請求金額]をそれぞれ転記する
wsTotal.Range("A" & MaxRow).Value = wsInv.Range("E2").Value wsTotal.Range("B" & MaxRow).Value = wsInv.Range("E1").Value wsTotal.Range("C" & MaxRow).Value = wsInv.Range("B4").Value wsTotal.Range("D" & MaxRow).Value = wsInv.Range("B5").Value wsTotal.Range("E" & MaxRow).Value = wsInv.Range("E31").Value '次の処理のため、最終行を+1しておく
MaxRow = MaxRow + 1
解答
'---請求書2の処理---'請求書2を変数に代入
Set wsInv = Worksheets("請求書2")
'[請求書番号,発行日,会社名,担当者名,請求金額]をそれぞれ転記する wsTotal.Range("A" & MaxRow).Value = wsInv.Range("E2").Value
wsTotal.Range("B" & MaxRow).Value = wsInv.Range("E1").Value wsTotal.Range("C" & MaxRow).Value = wsInv.Range("B4").Value wsTotal.Range("D" & MaxRow).Value = wsInv.Range("B5").Value wsTotal.Range("E" & MaxRow).Value = wsInv.Range("E31").Value '次の処理のため、最終行を+1しておく
MaxRow = MaxRow + 1
つづき 解答
'---請求書3の処理---'請求書3を変数に代入
Set wsInv = Worksheets("請求書3")
'[請求書番号,発行日,会社名,担当者名,請求金額]をそれぞれ転記する wsTotal.Range("A" & MaxRow).Value = wsInv.Range("E2").Value
wsTotal.Range("B" & MaxRow).Value = wsInv.Range("E1").Value wsTotal.Range("C" & MaxRow).Value = wsInv.Range("B4").Value wsTotal.Range("D" & MaxRow).Value = wsInv.Range("B5").Value wsTotal.Range("E" & MaxRow).Value = wsInv.Range("E31").Value End Sub
つづき 解答
'(7)3つのシートを順番に転記(ループあり) 'Forループを利用し、請求書1~3の順にデータを転記しましょう。 Sub example07() 'ループ変数iを宣言 Dim i As Integer 'Forループ(iが1~3まで繰り返す) For i = 1 To 3 '請求書iを変数に格納する
Set wsInv = Worksheets("請求書" & i)
'[請求書番号,発行日,会社名,担当者名,請求金額]をそれぞれ転記する
wsTotal.Range("A" & MaxRow).Value = wsInv.Range("E2").Value wsTotal.Range("B" & MaxRow).Value = wsInv.Range("E1").Value wsTotal.Range("C" & MaxRow).Value = wsInv.Range("B4").Value wsTotal.Range("D" & MaxRow).Value = wsInv.Range("B5").Value wsTotal.Range("E" & MaxRow).Value = wsInv.Range("E31").Value
'次のループのため、最終行を+1しておく MaxRow = MaxRow + 1 Next i End Sub ~~~~~~~(途中省略)~~~~~~~~~~~~~~~~ ?? ?? ?? ?? 演習課題 レッスン(7)
'(7)3つのシートを順番に転記(ループあり) 'Forループを利用し、請求書1~3の順にデータを転記しましょう。 Sub example07() 'ループ変数iを宣言 Dim i As Integer 'Forループ(iが1~3まで繰り返す) For i = 1 To 3 '請求書iを変数に格納する
Set wsInv = Worksheets("請求書" & i)
'[請求書番号,発行日,会社名,担当者名,請求金額]をそれぞれ転記する
wsTotal.Range("A" & MaxRow).Value = wsInv.Range("E2").Value wsTotal.Range("B" & MaxRow).Value = wsInv.Range("E1").Value wsTotal.Range("C" & MaxRow).Value = wsInv.Range("B4").Value wsTotal.Range("D" & MaxRow).Value = wsInv.Range("B5").Value wsTotal.Range("E" & MaxRow).Value = wsInv.Range("E31").Value
'次のループのため、最終行を+1しておく MaxRow = MaxRow + 1 Next i End Sub ~~~~~~~(途中省略)~~~~~~~~~~~~~~~~ 解答
'(8)For Eachを使い、全シートを扱う
'For Eachループを使い、全シートのシート名を順番に出力してみましょう。 Sub example08()
'ワークシート変数を宣言 Dim wsInv As Worksheet
'すべてのワークシートから1つずつ取り出し、wsInvに格納 'ワークシート名をMsgBoxで出力する MsgBox wsInv.Name End Sub ?? ?? 演習課題 レッスン(8)
'(8)For Eachを使い、全シートを扱う
'For Eachループを使い、全シートのシート名を順番に出力してみましょう。 Sub example08()
'ワークシート変数を宣言 Dim wsInv As Worksheet
'すべてのワークシートから1つずつ取り出し、wsInvに格納 For Each wsInv In Worksheets
'ワークシート名をMsgBoxで出力する MsgBox wsInv.Name
Next wsInv End Sub
'(9)For Eachを使い、全シートを順番に転記する 'For Eachループを使い、全シートから順番にデータを転記しましょう。 Sub example09() 'すべてのワークシートから1つずつ取り出し、wsInvに格納 'もしワークシート名が「データ収集」と一致しなければ '[請求書番号,発行日,会社名,担当者名,請求金額]をそれぞれ転記する wsTotal.Range("A" & MaxRow).Value = wsInv.Range("E2").Value
wsTotal.Range("B" & MaxRow).Value = wsInv.Range("E1").Value wsTotal.Range("C" & MaxRow).Value = wsInv.Range("B4").Value wsTotal.Range("D" & MaxRow).Value = wsInv.Range("B5").Value wsTotal.Range("E" & MaxRow).Value = wsInv.Range("E31").Value '次のループのため、最終行を+1しておく MaxRow = MaxRow + 1 End Sub ~~~~~~~(途中省略)~~~~~~~~~~~~~~~~ ?? ?? ?? ?? 演習課題 レッスン(9)
'(9)For Eachを使い、全シートを順番に転記する
'For Eachループを使い、全シートから順番にデータを転記しましょう。 Sub example09()
'すべてのワークシートから1つずつ取り出し、wsInvに格納 For Each wsInv In Worksheets
'もしワークシート名が「データ収集」と一致しなければ If wsInv.Name <> wsTotal.Name Then
'[請求書番号,発行日,会社名,担当者名,請求金額]をそれぞれ転記する wsTotal.Range("A" & MaxRow).Value = wsInv.Range("E2").Value
wsTotal.Range("B" & MaxRow).Value = wsInv.Range("E1").Value wsTotal.Range("C" & MaxRow).Value = wsInv.Range("B4").Value wsTotal.Range("D" & MaxRow).Value = wsInv.Range("B5").Value wsTotal.Range("E" & MaxRow).Value = wsInv.Range("E31").Value '次のループのため、最終行を+1しておく MaxRow = MaxRow + 1 End If Next wsInv End Sub ~~~~~~~(途中省略)~~~~~~~~~~~~~~~~ 解答
'(10)Workbooks.Openでファイルを開く '特定のパスにあるExcelブックを開きましょう。 Sub example10() '特定のパスにあるExcelブックを開く Workbooks.Open (" ") End Sub ?? 演習課題 レッスン(10) 解答 ※特定のパスを自分で調べて入力してください。
'(11)ダイアログで選んだブックを開く(単一)
'ダイアログ画面で選んだExcelブックを開きましょう。 Sub example11()
'パスを格納する変数を宣言 Dim openPath As String
'ダイアログからブックを選び、そのパスを格納 openPath = 'パスにあるブックを開く Workbooks.Open (openPath) End Sub ?? 演習課題 レッスン(11)
'(11)ダイアログで選んだブックを開く(単一)
'ダイアログ画面で選んだExcelブックを開きましょう。 Sub example11()
'パスを格納する変数を宣言 Dim openPath As String
'ダイアログからブックを選び、そのパスを格納
openPath = Application.GetOpenFilename("Microsoft Excelブック,*.xls?") 'パスにあるブックを開く
Workbooks.Open (openPath) End Sub
'(12)ダイアログからブックを開き、操作する(単一)
'開いたブックのプロパティやメソッドを利用してみましょう。 Sub example12()
'ダイアログからブックを選び、パスを格納する Dim openPath As String
openPath = Application.GetOpenFilename("Microsoft Excelブック,*.xls?") 'Workbook型の変数を宣言
Dim openBook As Workbook
'ファイルを開き、変数に格納する
Set openBook = Workbooks.Open(openPath) 'ブックの名前をMsgboxで出力(.Nameプロパティ) MsgBox openBook.Name 'ブックのパスをMsgBoxで出力(.Pathプロパティ) MsgBox openBook.Path 'ブックを閉じる(.Closeメソッド) openBook.Close End Sub ?? ?? ?? ?? ?? 演習課題 レッスン(12)
'(12)ダイアログからブックを開き、操作する(単一)
'開いたブックのプロパティやメソッドを利用してみましょう。 Sub example12()
'ダイアログからブックを選び、パスを格納する Dim openPath As String
openPath = Application.GetOpenFilename("Microsoft Excelブック,*.xls?") 'Workbook型の変数を宣言
Dim openBook As Workbook
'ファイルを開き、変数に格納する
Set openBook = Workbooks.Open(openPath) 'ブックの名前をMsgboxで出力(.Nameプロパティ) MsgBox openBook.Name 'ブックのパスをMsgBoxで出力(.Pathプロパティ) MsgBox openBook.Path 'ブックを閉じる(.Closeメソッド) openBook.Close End Sub 解答
'(13)ダイアログのキャンセルに対するエラー処理
'ダイアログで「キャンセル」を押した場合のエラー対策をしましょう。 Sub example13()
'ダイアログからブックを選び、パスを格納する Dim openPath As String
openPath = Application.GetOpenFilename("Microsoft Excelブック,*.xls?") 'もしパスが「False」でなければ処理を行う(Falseなら何もしない)
If openPath <> "False" Then
'変数を用意し、ブックを開いて格納 Dim openBook As Workbook
Set openBook = Workbooks.Open(openPath) 'ブックのプロパティやメソッドを利用 MsgBox openBook.Name MsgBox openBook.Path openBook.Close End If End Sub 演習課題 レッスン(13) ?? ??
'(13)ダイアログのキャンセルに対するエラー処理
'ダイアログで「キャンセル」を押した場合のエラー対策をしましょう。 Sub example13()
'ダイアログからブックを選び、パスを格納する Dim openPath As String
openPath = Application.GetOpenFilename("Microsoft Excelブック,*.xls?") 'もしパスが「False」でなければ処理を行う(Falseなら何もしない)
If openPath <> "False" Then
'変数を用意し、ブックを開いて格納 Dim openBook As Workbook
Set openBook = Workbooks.Open(openPath) 'ブックのプロパティやメソッドを利用 MsgBox openBook.Name MsgBox openBook.Path openBook.Close End If End Sub 解答
'(14)開いたブックからデータを転記(単一)
'開いたブックから請求データを転記しましょう。 Sub example14()
'パスが「False」でなければ処理を行う If openPath <> "False" Then
'変数を用意し、ブックを開いて格納 Dim openBook As Workbook
Set openBook = Workbooks.Open(openPath)
'[請求書番号,発行日,会社名,担当者名,請求金額]をそれぞれ転記する '※openBookの最初のワークシート(1)から
wsTotal.Range("A" & MaxRow).Value = openBook.Worksheets(1).Range("E2").Value wsTotal.Range("B" & MaxRow).Value = openBook.Worksheets(1).Range("E1").Value wsTotal.Range("C" & MaxRow).Value = openBook.Worksheets(1).Range("B4").Value wsTotal.Range("D" & MaxRow).Value = openBook.Worksheets(1).Range("B5").Value wsTotal.Range("E" & MaxRow).Value = openBook.Worksheets(1).Range("E31").Value 'openBookを閉じる openBook.Close End If End Sub ~~~~~~~(途中省略)~~~~~~~~~~~~~~~~ ?? 演習課題 レッスン(14)
'(14)開いたブックからデータを転記(単一)
'開いたブックから請求データを転記しましょう。 Sub example14()
'パスが「False」でなければ処理を行う If openPath <> "False" Then
'変数を用意し、ブックを開いて格納 Dim openBook As Workbook
Set openBook = Workbooks.Open(openPath)
'[請求書番号,発行日,会社名,担当者名,請求金額]をそれぞれ転記する '※openBookの最初のワークシート(1)から
wsTotal.Range("A" & MaxRow).Value = openBook.Worksheets(1).Range("E2").Value wsTotal.Range("B" & MaxRow).Value = openBook.Worksheets(1).Range("E1").Value wsTotal.Range("C" & MaxRow).Value = openBook.Worksheets(1).Range("B4").Value wsTotal.Range("D" & MaxRow).Value = openBook.Worksheets(1).Range("B5").Value wsTotal.Range("E" & MaxRow).Value = openBook.Worksheets(1).Range("E31").Value 'openBookを閉じる openBook.Close End If End Sub ~~~~~~~(途中省略)~~~~~~~~~~~~~~~~ 解答
'(15)複数のブックを次々に開く!
'複数のブックのパスを配列に格納し、次々に開きましょう。 Sub example15()
'配列のための変数を宣言 (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)) End Sub 配列になって受け取る (1) (2) (3) … 最後 Variant型変数 ?? ?? ?? 演習課題 レッスン(15)
'(15)複数のブックを次々に開く!
'複数のブックのパスを配列に格納し、次々に開きましょう。 Sub example15()
'配列のための変数を宣言 (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)) End Sub 配列になって受け取る (1) (2) (3) … 最後 Variant型変数 解答
'(16)複数のブックを最後まで全て順番に開く
'配列の1番目から要素の最大数まで、順番に開きましょう。 Sub example16()
'ダイアログから複数のブックを選び、配列にパスを格納する Dim arrayPath As Variant
arrayPath = Application.GetOpenFilename("Microsoft Excelブック,*.xls?", MultiSelect:=True) 'ループ変数iを宣言 Dim i As Integer 'Forループ(iが1から配列の要素数まで) For i = 1 To UBound(arrayPath) '配列の要素(i番目)のパスからブックを開く Workbooks.Open (arrayPath(i)) Next i End Sub ?? ?? 演習課題 レッスン(16) ??
'(16)複数のブックを最後まで全て順番に開く
'配列の1番目から要素の最大数まで、順番に開きましょう。 Sub example16()
'ダイアログから複数のブックを選び、配列にパスを格納する Dim arrayPath As Variant
arrayPath = Application.GetOpenFilename("Microsoft Excelブック,*.xls?", MultiSelect:=True) 'ループ変数iを宣言 Dim i As Integer 'Forループ(iが1から配列の要素数まで) For i = 1 To UBound(arrayPath) '配列の要素(i番目)のパスからブックを開く Workbooks.Open (arrayPath(i)) Next i End Sub 解答
'(17)複数のブックを開き、操作する
'開いた複数ブックのプロパティやメソッドを利用してみましょう。 Sub example17()
'ダイアログから複数のブックを選び、配列にパスを格納する Dim arrayPath As Variant
arrayPath = Application.GetOpenFilename("Microsoft Excelブック,*.xls?", MultiSelect:=True)
'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 End Sub ?? ?? 演習課題 レッスン(17)
'(17)複数のブックを開き、操作する
'開いた複数ブックのプロパティやメソッドを利用してみましょう。 Sub example17()
'ダイアログから複数のブックを選び、配列にパスを格納する Dim arrayPath As Variant
arrayPath = Application.GetOpenFilename("Microsoft Excelブック,*.xls?", MultiSelect:=True)
'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 End Sub 解答
'(18)[複数ブック版]ダイアログのキャンセルに対するエラー処理
'ダイアログで「キャンセル」を押した場合のエラー対策をしましょう。 Sub example18()
'ダイアログから複数のブックを選び、配列にパスを格納する Dim arrayPath As Variant
arrayPath = Application.GetOpenFilename("Microsoft Excelブック,*.xls?", MultiSelect:=True) 'もしopenPathが配列ならば、処理をする(そうでなければ何もしない) If IsArray(arrayPath) Then 'Forループ(iが1から配列の要素数まで) Dim i As Integer For i = 1 To UBound(arrayPath) Next i End If End Sub ~~~~~~~(途中省略)~~~~~~~~~~~~~~~~ ?? 演習課題 レッスン(18) ??
'(18)[複数ブック版]ダイアログのキャンセルに対するエラー処理
'ダイアログで「キャンセル」を押した場合のエラー対策をしましょう。 Sub example18()
'ダイアログから複数のブックを選び、配列にパスを格納する Dim arrayPath As Variant
arrayPath = Application.GetOpenFilename("Microsoft Excelブック,*.xls?", MultiSelect:=True) 'もしopenPathが配列ならば、処理をする(そうでなければ何もしない) If IsArray(arrayPath) Then 'Forループ(iが1から配列の要素数まで) Dim i As Integer For i = 1 To UBound(arrayPath) Next i End If End Sub ~~~~~~~(途中省略)~~~~~~~~~~~~~~~~ 解答
'(19)複数のブックを順番に開き、データ収集 '次々に開いたブックから請求データを転記しましょう。 Sub example19() 'Forループ(iが1から配列の要素数まで) Dim i As Integer For i = 1 To UBound(arrayPath) '変数を用意し、ブックを開いて格納
Dim openBook As Workbook
Set openBook = Workbooks.Open(arrayPath(i))
'[請求書番号,発行日,会社名,担当者名,請求金額]をそれぞれ転記する '※openBookの最初のワークシート(1)から
wsTotal.Range("A" & MaxRow).Value = openBook.Worksheets(1).Range("E2").Value wsTotal.Range("B" & MaxRow).Value = openBook.Worksheets(1).Range("E1").Value wsTotal.Range("C" & MaxRow).Value = openBook.Worksheets(1).Range("B4").Value wsTotal.Range("D" & MaxRow).Value = openBook.Worksheets(1).Range("B5").Value wsTotal.Range("E" & MaxRow).Value = openBook.Worksheets(1).Range("E31").Value
'openBookを閉じる openBook.Close '次のループのため、最終行を+1しておく MaxRow = MaxRow + 1 Next i ~~~~~~~(途中省略)~~~~~~~~~~~~~~~~ ?? ?? 演習課題 レッスン(19)
'(19)複数のブックを順番に開き、データ収集 '次々に開いたブックから請求データを転記しましょう。 Sub example19() 'Forループ(iが1から配列の要素数まで) Dim i As Integer For i = 1 To UBound(arrayPath) '変数を用意し、ブックを開いて格納
Dim openBook As Workbook
Set openBook = Workbooks.Open(arrayPath(i))
'[請求書番号,発行日,会社名,担当者名,請求金額]をそれぞれ転記する '※openBookの最初のワークシート(1)から
wsTotal.Range("A" & MaxRow).Value = openBook.Worksheets(1).Range("E2").Value wsTotal.Range("B" & MaxRow).Value = openBook.Worksheets(1).Range("E1").Value wsTotal.Range("C" & MaxRow).Value = openBook.Worksheets(1).Range("B4").Value wsTotal.Range("D" & MaxRow).Value = openBook.Worksheets(1).Range("B5").Value wsTotal.Range("E" & MaxRow).Value = openBook.Worksheets(1).Range("E31").Value
'openBookを閉じる openBook.Close '次のループのため、最終行を+1しておく MaxRow = MaxRow + 1 Next i ~~~~~~~(途中省略)~~~~~~~~~~~~~~~~ 解答
'(20)画面のチラつきを防止する 'ブックの開閉のたびに画面がチラつくことを防止しましょう。 Sub example20() 'もしopenPathが配列ならば If IsArray(arrayPath) Then '画面の描画を停止する Application.ScreenUpdating = False 'Forループ(iが1から配列の要素数まで) Dim i As Integer For i = 1 To UBound(openPath) Next i '画面の描画を再開する Application.ScreenUpdating = True '処理が終わったことをMsgBoxで出力 MsgBox "全ブックからデータを抽出しました。" End If End Sub ~~~~~~~(途中省略)~~~~~~~~~~~~~~~~ ~~~~~~~(途中省略)~~~~~~~~~~~~~~~~ ?? ?? 演習課題 レッスン(20)
'(20)画面のチラつきを防止する 'ブックの開閉のたびに画面がチラつくことを防止しましょう。 Sub example20() 'もしopenPathが配列ならば If IsArray(arrayPath) Then '画面の描画を停止する Application.ScreenUpdating = False 'Forループ(iが1から配列の要素数まで) Dim i As Integer For i = 1 To UBound(openPath) Next i '画面の描画を再開する Application.ScreenUpdating = True '処理が終わったことをMsgBoxで出力 MsgBox "全ブックからデータを抽出しました。" End If End Sub ~~~~~~~(途中省略)~~~~~~~~~~~~~~~~ ~~~~~~~(途中省略)~~~~~~~~~~~~~~~~ 解答