Excelでマクロを組んでいます。
以下のような場合にどのように組めばいいのか、悩んでいます。
是非、ヒントを下さい。

Excelファイル「book1」でマクロを組んでいるとします。
1)book1のセルA1に入力されている文字列と同じファイル名のbookを選択できないか
2)セルA1から順にA2、A3、A4と文字列の入力がないセルまで自動的にセル番地を横へおくり、1)の操作を繰り返すことができないか

ちなみに検索対象となるbookはすべて同じフォルダの中に格納されています。

よろしくお願いします。

A 回答 (4件)

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
    • good
    • 0

(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_boo …
の最後
ーー
ためしにやってみた例
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
    • good
    • 0

両方とも可能ですが、前提条件が不明です。



>文字列と同じファイル名の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
    • good
    • 0

> 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

この回答への補足

質問の仕方に不備があり、申し訳ありません。

1)に関して
セル番地はA1、B1、C1と横へ順におくれればと考えています。

2)に関して
セル内と同じ文字列のbookを開かず、そのbookの中のsheet1の特定の範囲を指定、コピーし、book1の指定の欄にに貼り付けたいと考えています。ちなみにコピー元、コピー先のsheetの構造は同じです。

補足日時:2009/05/22 13:31
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング