こんにちは。
>変数を使わず、
初歩的な内容ですから、少しじっくりと考えれば答は出てくるはずです。
ただ、変数を使わず、マクロに代入というのは、リテラル値(文字列)といいますが、ミスが多くなります。なるべく、そのような方法は変数が見極めるようになってからしたほうがよいです。VBAの基本は、変数の型をきちんと入れます。
セルから取る場合は、一旦、変数で受けて、それを代入させます。
("'c:\data\file\" & "[bbb_" & A1 & ".xls" & "]" & Sheet1!B1)
これは、VBAの書き方ではありませんから、それ自体の書き方でエラーになってしまいます。
シート2 のA1 に、ファイル名を、アドレスを、シート1 のB1 に入れるには、以下のような書き方になります。しかし、VBAは、ワークシート関数とは、まったく違う種類のものですから、その考え方を変えないと、VBAを使いこなすのは大変です。
'標準モジュールがベターです。
Sub TestR()
Dim myPath As String
Dim xlFile As String
Dim myAddress As String
myPath = "c:\data\file\"
xlFile = "bbb_" & Worksheets("Sheet2").Range("A1").Value
myAddress =Worksheets("Sheet1").Range("B1").Value
MsgBox getDirectData(myPath, xlFile, myAddress)
End Sub
Function getDirectData(myPath As String, Fname As String, oAddress As String)
'ダイレクトにxlファイルから値を取り出すサブルーチン関数
Dim r1Address As String
Dim myData As Variant
Dim k As Integer
On Error GoTo ErrHandler
r1Address = Mid$(oAddress, 1, InStr(oAddress, "!") - 1) & "'!" & _
Range(oAddress).Address(1, 1, xlR1C1)
If Right(myPath, 1) <> "\" Then myPath = myPath & "\"
k = InStr(Fname, ".xls")
If k > 0 Then
Fname = Mid$(Fname, 1, k - 1)
End If
myData = ExecuteExcel4Macro _
("'" & myPath & "[" & Fname & ".xls]" & r1Address)
If Not IsError(myData) Then
getDirectData = myData
End If
ErrHandler:
End Function
こんにちは。
二種類の方法があります。
ひとつは、データベース・オブジェクトを使って取り出す方法です。
もうひとつは、古い方法ですが、
Sub getClosedData()
Dim myPath As String
Dim FName As String
Dim ShName As String
Dim MyData As Variant
Dim myRow As Long
Dim myCol As Integer
myPath = Application.DefaultFilePath & "\" 'デフォルトパス
FName = "Test01.xls"
ShName = "Sheet1"
myRow = 1
myCol = 2 'B1の値を取り出す
MyData = ExecuteExcel4Macro _
("'" & myPath & "[" & FName & "]" & ShName & "'!R" & myRow & "C" & myCol)
If Not IsError(MyData) Then
MsgBox MyData
End If
End Sub
>ファイルを開かず参照できるように、できればマクロ(VBA)で組みたいと思っています。
可能なのですが、今まで、私がせっかくコードを書いても評価は受けたことがありません。より複雑になるからだとは思います。実際に、どういう手順になるのか、良く考えてからやってみると良いです。そういう私も、この方法を掘り下げて考えたことがありません。
お礼
御礼が遅くなってすいません。 ご丁寧にありがとうございます! >しかし、VBAは、ワークシート関数とは、まったく違う種類のものですから、 >その考え方を変えないと、VBAを使いこなすのは大変です。 そうですよねー。。 でも教えていただいたものを応用して、何とかいけそうです。 心より感謝いたします!<(_ _)>