Excel 4.0のマクロを使い、ブックを開かないでセルのデータを読み込むことができます。
ここでは、ブックの指定は「ファイルを開く」ダイアログボックスを使っています。シート名は
インプットボックスで入力してもらいますが、入力されたワークシートの存在もチェックしています。
この例では対象ブックの「Sheet1」に「名前」という項目名がついたセル(フィールド)があり、その下方向に
友達やお得意先の氏名が記述されているものとします。
その対象ブックを開かずに「名前フィールド」のデータをアクティブブックのA列に読み込みます。
テストするには、上記のとおりのデータを持つブックを作成しておきます。
Public Sub Get_FieldData()
Dim strF_Name As String, ShName As String
Dim strTgt As String, buf As String
Dim i As Long, strTgtCol As Long, GetNames()
Application.ScreenUpdating = False
Columns("A").Clear
'対象ブックを指定
strF_Name = Application.GetstrF_Name("Microsoft Excel ブック,*.xls")
If strF_Name = "False" Then Exit Sub
''ファイル名に[]を付ける
strF_Name = Replace(strF_Name, Dir(strF_Name), "[" & Dir(strF_Name) & "]")
Debug.Print strF_Name
''対象シート名を入力
ShName = InputBox("読み込むワークシート名を入力してください。", "ExcelFile", "Sheet1")
If ShName = "" Then Exit Sub
strTgt = "'" & strF_Name & ShName & "'!"
Debug.Print strTgt
''ワークシート名を確認
On Error Resume Next
buf = ExecuteExcel4Macro(strTgt & "R1C1")
If Err <> 0 Then
MsgBox "シート 「 " & ShName & " 」 を読み込めません。", vbCritical
Exit Sub
End If
On Error GoTo 0
'「名前」フィールドを取得
For i = 1 To 256
If ExecuteExcel4Macro(strTgt & "R1C" & i) = "名前" Then
strTgtCol = i
Exit For
End If
Next i
If strTgtCol = 0 Then
MsgBox "「 名前」フィールドがありません。", vbCritical
Exit Sub
End If
'名前データの取得(ここでは最大取得データ数を 1,000 としていますが、データがあるだけ取得するには、
'少し工夫が必要です)
For i = 2 To 1000
buf = ExecuteExcel4Macro(strTgt & "R" & i & "C" & strTgtCol)
If buf = "0" Then Exit For
'「アクティブシート」に出力
ActiveSheet.Cells(i - 1 + 45, 1) = buf
Next i
Application.ScreenUpdating = True
End Sub
最後になりましたが、ご使用PCの環境やOS、Excelのバージョンなどもご質問時に添えていただくほうが望ましいと思います。
ちなみに、上記ソースはExcel2003、2007で動作可能です。