これはvbaがちょっと長くなるから3部構成で説明する。
プログラムというのは、基本的に動きを理解しないと使えないか?というと既に出来上がっているモノは案外そのまま使える。元々用意されているExcel関数は「引数」というのがあるので、ある程度調べてからでないとちゃんと動かないが、今回のように2つ以上のブックを開いて1つのブックに纏めるというのは、自分でコツコツ組み立てるよりも既に動いている自作関数やモジュールを組み合わせて、パターン化しておく方が良い。
?T「処理概要」
?@今VBAを書いているExcelブックが親になる= ThisWorkbook.Activate
これさえ分かれば、通常のシート間でのセルのやり取りと同じなので、徐々に理解はできる。初めはパターン例文そのままコピペして動作確認さえすれば良い。たくさんvbaを組めばそのうち内容は理解する。
?AコピペしたいブックをReadonlyで読み込む。
?B処理をする(必要なセル範囲をコピペする)
これだけ〜( 一一)
?U「ブックOpen判定」※このまま使え〜る。
'// ブックオープン判定関数
Function IsBookOpened(a_sFilePath) As Boolean
On Error Resume Next
'// 保存済みのブックか判定
Open a_sFilePath For Append As #1
Close #1
If Err.Number > 0 Then
'// 既に開かれている場合
IsBookOpened = True
Else
'// 開かれていない場合
IsBookOpened = False
End If
End Function
?V他ブックの内容をコピペする(パターン化する)
Function OpenBk(opPath As String) As Variant
Dim ex As Excel.Application '// 処理用Excel
Dim wb As Workbook ' コピーするために開いたブック
Dim sPath As String '// ブックファイルパス
Dim r As Range '// 取得対象のセル範囲
Dim sht As Worksheet '// 参照シート
Dim bFlg As Boolean
OpenBk = False
'// 開くブックを指定(コピーしたいデータが入っている方)
sPath = opPath
'// 既に開かれているか確認
bFlg = IsBookOpened(sPath)
'// 開かれている場合
If bFlg Then
Set ex = New Excel.Application
'// 新規Excelで読み取り専用で開く
Set wb = ex.Workbooks.Open _
(Filename:=sPath, UpdateLinks:=0, ReadOnly:=True, IgnoreReadOnlyRecommended:=True)
Else
'// 現ブックで読み取り専用で開く
Set wb = Workbooks.Open _
(Filename:=sPath, UpdateLinks:=0, ReadOnly:=True, IgnoreReadOnlyRecommended:=True)
End If
ThisWorkbook.Activate 'ここでコレを入れないとちゃんとコピペしないから!
※このVBA処理を書いているモジュールを含むブックがThisWorkbookになる!
''' 「ここから処理を書く」
'''※ これはやりたい処理を通常通りセル間の処理でかけば良い。
''' 「ここまで処理」
'// ブックを閉じる
Call wb.Close
If bFlg = True Then
Call ex.Application.Quit
End If
OpenBk = True
End Function
実際にしようしているサンプルなども載せているので、コチラもよろしく〜
VBA 別ブックからシートをコピペする雛形
マクロで半自動化!go!go!!programming
プログラミングは自分のことに使うと楽しいのだ。
それでは、またね〜(^^♪