ExcelVBAで指定のExcelブックを読み込む方法

マクロの定義はThisbookのシートで行います。
以下の続きです。
[→ExcelVBAでマクロが書かれているシートを読み込む方法]
(https://qiita.com/akari_n/items/cf15a23bcdb715f8f9f0)

【手順】

1. 読み込むExcelシートを指定する
2. 定数を宣言する
3. 変数を宣言する
4. 3で宣言した変数に値を格納する
5. 指定のブックとシートを読み込む




##1.読み込むExcelシートを指定する

###1-1. Excelのセルにディレクトリ名とブック名を記入
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433296/c55ec1c0-a1b7-1baf-8832-c628a9be9ae8.png)

パスについては以下で詳しく説明をしています。
[→ファイルのパスを調べる方法]
(https://qiita.com/akari_n/items/4e4dd33446a81616a41a)


ディレクトリ名とブック名を**分けて**書くことで、
読み込むブックが増えても**追加しやすく**、
別ディレクトリの(フォルダに入っている)ブックを指定することもできます。

##2.定数を宣言する
1.読み込むExcelシートを指定する で指定した内容を定数として宣言します。

※変数と定数の違いについては[こちら](https://uxmilk.jp/61463)のリンクがおすすめです。


```vb
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 <型>

```vb
' 変数宣言
'１．オブジェクト型の変数
Dim wb_mybook As Workbook
Dim wb_inbook As Workbook
Dim ws_mysheet As Worksheet
Dim ws_insheet As Worksheet

'２．String型(文字列型)の変数
Dim s_Name_inDir As String
Dim s_Name_inFile As String
Dim s_Name_Path As String

'３．Integer型(数値型)の変数
i_Count_fileLine As Integer
```
**１． オブジェクト型の変数**
ブックやシートなどのオブジェクトを格納する変数 

**２． String型(文字列型)の変数**　
1."読み込むExcelシートを指定する" で指定した内容
(ここでは、C:¥aaa¥bbb¥Desktop¥sample_file など) を格納する変数
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433296/e42a1ffa-00ea-3291-665f-880118714f20.png)


**３．Integer型(数値型)の変数**
ファイル名を読み込む際に、**読み込む行番号を、ひとつずつ増やす**などの
カウントを行います。数値でカウントをするのでInteger型です。


##4. 3で定義した変数に値を格納する

オブジェクト型の変数は先頭に`Set`をつけます。
###Set <変数> = <オブジェクト>###

```vb
'マクロワークブックセット
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. 指定のブックとシートを読み込む

```vb
'入力ディレクトリセット
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`
・カウント数に読み込む最初の行を指定

```vb
' ファイル名が空白になるまでループ
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
　 = と=: の違い については、[こちら](http://officetanaka.net/excel/vba/beginner/02.htm)のリンクがおすすめです。

・ワークブック(またはワークシート)をActivate(アクティブ)にすることで、
　作業対象のワークシートに指定できます。
　一度にアクティブにできるのは、一つだけです。