• ベストアンサー

VBA マクロ セルと同じファイル名を選びたい

Excelでマクロを組んでいます。 以下のような場合にどのように組めばいいのか、悩んでいます。 是非、ヒントを下さい。 Excelファイル「book1」でマクロを組んでいるとします。 1)book1のセルA1に入力されている文字列と同じファイル名のbookを選択できないか 2)セルA1から順にA2、A3、A4と文字列の入力がないセルまで自動的にセル番地を横へおくり、1)の操作を繰り返すことができないか ちなみに検索対象となるbookはすべて同じフォルダの中に格納されています。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

merlionXXです。 > セル番地はA1、B1、C1と横へ順におくれればと考えています。 要は書き間違いということですね。対応しました。 > セル内と同じ文字列のbookを開かず、そのbookの中のsheet1の特定の範囲を指定、コピーし、book1の指定の欄にに貼り付けたいと考えています。 開かずにデータを取得できません。ただ開いたのを気づかせないことはできます。これも対処しました。 でも、「指定範囲」がどうなっているのかお書きいただけないので、指定範囲のデータを取得し指定範囲に貼り付けるというコードは書けません。 Sub TEST03() Dim myFn As String Dim myRng As Range Dim tb As Workbook, wb As Workbook Set tb = ThisWorkbook Set myRng = tb.Sheets("Sheet1").Range("A1") Application.ScreenUpdating = False Do While myRng <> "" myFn = myRng.Value Set wb = Workbooks.Open(ThisWorkbook.Path & "\" & myFn & ".xls") 'wbの指定範囲のデータ取得&tbの指定範囲に貼り付けるマクロ wb.Close (False) Set myRng = myRng.Offset(0, 1) Loop Application.ScreenUpdating = True End Sub

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

(1)A1セルに値が入ったらーー>というイベントの考えか A1,B1,C1にブック名があって、選択したセルの値のブックを対称にするのか。どちらもイベントの考えを勉強は済んでいるのか。 (2)>フォルダの中に格納されています。 であれば、セルの値(=ファイル名。ただしXLS(X)。エクセルブック限定。)の名前から、そのブックを開くという質問は良くある。 FSOやDIRで出来る。 (3)本件は#1のお礼の>bookを開かず、が問題で、エクセル4.0マクロ(最近回答した質問あり。昔から質問回答は時どき有る)の利用が有るが、旧時代のもので、使うことはお勧めしないとされる。基本はブックを開いて、読んでセルの値をとり、閉じるである。 それでは処理時間がかかりすぎるのかな。 ーー こういう特殊な好みを貫徹したいなら、質問者自身が自分で勉強のこと。幸いGoogleで「エクセル4.0マクロ」で照会すると、たくさんの記事があり、コード例もある。 たとえば http://www.moug.net/tech/exvba/0060037.htm の終わりの方を参照。 そのほか他ブック参照 http://www.excel-jiten.net/formula/ref_other_books.html の最後 ーー ためしにやってみた例 A1;C1にブック名 (3つの例。・・・の部分はわざと省略した) キーで・・・ 位置を・・・ 該当文字・・ ーー コード(確認用にMsgboxやCellsを入れているが、本来は無いもの) Sub test01() Set targetrange = Range("A1:C1") k = 5 For Each cl In targetrange 'MsgBox cl fn = CurDir & "\" & "[" & cl & ".xls]" & "Sheet1" MsgBox fn & "'!R" & "1" & "C" & "1" Cells(k, 2) = fn & "'!R" & "1" & "C" & "1" v = Application.ExecuteExcel4Macro _ ("'" & fn & "'!R" & "1" & "C" & "1") MsgBox v Cells(k, "B") = fn & "'!R" & "1" & "C" & "1" Cells(k, "A") = v k = k + 1 Next End Sub ーーー 結果(私のテスト例) A列に探したセルに値、B列が探した番地。Sheet1のA1セルに固定例 数字コード C:\Documents and Settings\xxxx\My Documents\[キーで・・・.xls]Sheet1'!R1C1 あ C:\Documents and Settings\xxxx\My Documents\[位置を・・.xls]Sheet1'!R1C1 規則 C:\Documents and Settings\xxxxTO\My Documents\[該当文字・・・・.xls]Sheet1'!R1C1

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

両方とも可能ですが、前提条件が不明です。 >文字列と同じファイル名のbookを選択できないか 各bookはすでに開いている条件でよいのか、どちらか不明なので閉じている場合は開き、開いている場合はそれを選択ということなのか。 >自動的にセル番地を横へおくり A1、A2、A3は通常縦なので横に送るという意味が不明 とりあえず参考までに、セルのファイル名のものがフォルダ内にあるか順にチェックする例を 必要に応じて、ファイルを開いたり、選択して処理したりを加えればよろしいかと… Sub test() Dim fName As String, c As Range Set c = Cells(1, 1) While c.Text <> ""  fName = ThisWorkbook.Path & "\" & c.Text  If Dir(fName) <> "" Then   MsgBox (fName) '処理の代わりにファイルパスを表示  End If  Set c = c.End(xlDown) Wend End Sub

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

> 1)book1のセルA1に入力されている文字列と同じファイル名のbookを選択できないか Book1のどのシートのA1ですか? 記入がないのでSheet1とします。 また「BOOKkを選択」とはどういう意味かわからないので、とりあえず「開く」ことにします。 2)セルA1から順にA2、A3、A4と文字列の入力がないセルまで自動的にセル番地を横へおくり、1)の操作を繰り返すことができないか A2、A3、A4ならセル番地を横へではなく縦ではないのですか? > ちなみに検索対象となるbookはすべて同じフォルダの中に格納されています。 ではBOOK1はどこにあるのですか? 検索対象となるbookのフォルダーも書いていないので、BOOK1はかならず検索対象となるbookと同じフォルダーにおき、一度保存してください。(フォルダーパス取得のため保存が必須です) Sub TEST質問1() Dim myFn myFn = ThisWorkbook.Sheets("Sheet1").Range("A1").Value Workbooks.Open (ThisWorkbook.Path & "\" & myFn & ".xls") End Sub Sub TEST質問2() Dim myFn Dim myRng Set myRng = ThisWorkbook.Sheets("Sheet1").Range("A1") Do While myRng <> "" myFn = myRng.Value Workbooks.Open (ThisWorkbook.Path & "\" & myFn & ".xls") Set myRng = myRng.Offset(1) Loop End Sub

monky1980
質問者

補足

質問の仕方に不備があり、申し訳ありません。 1)に関して セル番地はA1、B1、C1と横へ順におくれればと考えています。 2)に関して セル内と同じ文字列のbookを開かず、そのbookの中のsheet1の特定の範囲を指定、コピーし、book1の指定の欄にに貼り付けたいと考えています。ちなみにコピー元、コピー先のsheetの構造は同じです。

関連するQ&A