マクロの定義はThisbookのシートで行います。
以下の続きです。
[→ExcelVBAでマクロが書かれているシートを読み込む方法]
(https://qiita.com/akari_n/items/cf15a23bcdb715f8f9f0)
【手順】
- 読み込むExcelシートを指定する
- 定数を宣言する
- 変数を宣言する
- 3で宣言した変数に値を格納する
- 指定のブックとシートを読み込む
##1.読み込むExcelシートを指定する
###1-1. Excelのセルにディレクトリ名とブック名を記入
パスについては以下で詳しく説明をしています。
[→ファイルのパスを調べる方法]
(https://qiita.com/akari_n/items/4e4dd33446a81616a41a)
ディレクトリ名とブック名を分けて書くことで、
読み込むブックが増えても追加しやすく、
別ディレクトリの(フォルダに入っている)ブックを指定することもできます。
##2.定数を宣言する
1.読み込むExcelシートを指定する で指定した内容を定数として宣言します。
※変数と定数の違いについてはこちらのリンクがおすすめです。
Public Const Macro_sheet_name As String = "マクロ定義シート" 'マクロシート名
Public Const Read_sheet_name As String = "読み込むシート名" '読み込むシート名
' 入力列定義
Public Const ci_Col_set As Integer = 2 '読み込むファイル名の定義列
' 入力行定義
Public Const ci_Line_setDir As Integer = 4 '読み込むディレクトリ名の定義行
Public Const ci_Line_setFile As Integer = 7 '読み込むファイル名の定義行
カラム列番号の指定をする際に
Excelの列表示が数字になっているとやりやすいです。
[→Excelシートの列表示を数字表記に変える方法]
(https://qiita.com/akari_n/items/7b0fd7f9c893559ba251)
また、コメント欄で数字表記についての技情報を頂戴いたしました!
##3.変数を宣言
###Dim <変数名> As <型>
' 変数宣言
'1.オブジェクト型の変数
Dim wb_mybook As Workbook
Dim wb_inbook As Workbook
Dim ws_mysheet As Worksheet
Dim ws_insheet As Worksheet
'2.String型(文字列型)の変数
Dim s_Name_inDir As String
Dim s_Name_inFile As String
Dim s_Name_Path As String
'3.Integer型(数値型)の変数
i_Count_fileLine As Integer
1. オブジェクト型の変数
ブックやシートなどのオブジェクトを格納する変数
2. String型(文字列型)の変数
1."読み込むExcelシートを指定する" で指定した内容
(ここでは、C:¥aaa¥bbb¥Desktop¥sample_file など) を格納する変数
3.Integer型(数値型)の変数
ファイル名を読み込む際に、読み込む行番号を、ひとつずつ増やすなどの
カウントを行います。数値でカウントをするのでInteger型です。
##4. 3で定義した変数に値を格納する
オブジェクト型の変数は先頭にSet
をつけます。
###Set <変数> = <オブジェクト>###
'マクロワークブックセット
Set wb_mybook = ThisWorkbook
Set wb_inbook = Workbooks(s_Name_Infile)
Set ws_mysheet = wb_mybook.Sheet(Macro_sheet_name)
' Macro_sheet_name = ステップ2で宣言した定数(マクロ定義シート名)を指定しています。
・ThisWorkbook
→ マクロを実行しているワークブック
・( )内には、指定したいWorkbooksのワークブック名などを記入
・.
で繋げることで、〇〇ワークブック**の、**〇〇シートという書き方ができる
##5. 指定のブックとシートを読み込む
'入力ディレクトリセット
s_Name_inDir = ws_mysheet.Cells(ci_Col_set,ci_Line_setDir).Value
'入力ファイル名 定義 開始行カラム セット
i_Count_fileLine = ci_Line_setDir
・ワークシートのCellの指定に定数を使用
s_Name_inDir = ws_mysheet.Cells(2列目、4行目).Value
・カウント数に読み込む最初の行を指定
' ファイル名が空白になるまでループ
Do While ws_mysheet.Cells(i_Count_fileLine,ci_Col_set).Value <> ""
'入力ファイル名定義セット
s_Name_InFile = ws_mysheet.Cells(i_Count_fileLine,ci_Col_set).Value
s_Name_Path = s_Name_inDir & "¥" & s_Name_InFile
'入力ファイルオープン
Workbooks.Open Filename := s_Name_Path, ReadOnly := True
'マクロ定義シートをアクティブにする
wb_mybook.Activate
'入力ワークブックセット
Set wb_inbook = Workbooks(s_Name_Infile)
wb_inbook.Activate
'入力ワークシートセット
Set ws_insheet = wb_inbook.Sheets(Read_sheet_name)
ws_insheet.Activate
Loop
・左辺<>右辺 → 左辺と右辺が=でないとき
要するにここでは、セルの内容が"" ( " " = 空でないとき )
・Do While ~ → ~の間
マクロ定義シートの2列目の、7~11行目までを読みこむように指定しています。
・&で前後の文を繋げています
・ワークブック.開く ワークブックの名前 := s_Name_Path , 読み取り専用 := True
= と=: の違い については、こちらのリンクがおすすめです。
・ワークブック(またはワークシート)をActivate(アクティブ)にすることで、
作業対象のワークシートに指定できます。
一度にアクティブにできるのは、一つだけです。