5
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-06-17

マクロの定義は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.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 など) を格納する変数
image.png

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(アクティブ)にすることで、
 作業対象のワークシートに指定できます。
 一度にアクティブにできるのは、一つだけです。
 

5
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?