• ベストアンサー

ブックのopenについて

デスクトップにファイル名「A.xls」と「B.xls」が有ります。「B.xls」はファイル名が変わるため「A.xls」のsheet1のセルA1に「B.xls」のファイル名を記載して「A.xls」と「B.xls」を共に開き「A.xls」にマクロを記述して処理をしています。この処理をする際に最初から「B.xls」を開かずにマクロでセルA1に記載したファイル名を使って「B.xls」ファイルを開くための記述を教えてください。現在のマクロの最初の部分は以下のようになっています。よろしくお願いします。 Sub Macro1() Dim nextyearbookname As String nextyearbookname = Range("A1") & ".xls"   ThisWorkbook.Activate Worksheets("sheet1").Range("B20:B21").Select Selection.Copy  Windows(nextyearbookname).Activate

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

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>nextyearbookname = Range("A1") & ".xls" sheets("シート名").select nextyearbookname = Range("A1") & ".xls" とか nextyearbookname = sheets("シート名").Range("A1") & ".xls" などと、シート名を指定しましょう。 あとは、 Workbooks.Open "パス名" & nextyearbookname や、 Workbooks.Open Thisworkbook.Path & "\" & nextyearbookname で、ファイルを開く事ができます。 また、無事に開く事ができた場合は、nextyearbookname ブックがアクティブになっているので、続けてマクロを実行する場合はブック名やシート名に注意してください。 場合によっては、エラーを防止するために下記のようにDirコマンドを利用して、開く前にファイルの有無をチェックした方が良い場合もあります。

参考URL:
http://www.officetanaka.net/excel/vba/file/file06.htm
hoshi7777
質問者

補足

ありがとうございました、もう一つ教えてください。 A.xlsとB.xlsとはどちらもファイル名が変わります、 そのつどセルA1に相手のファイル名を記入します、A.xlsとB.xlsには同じマクロを記述しています。 複写は値複写です。以下に記述したマクロを書きます、Selection.PasteSpecial Paste:=xlPasteValues,_ Operation:=xlNone, SkipBlanks:=False,_ Transpose:=False で「実行時エラー'1004'アプリケーション定義またはオブジェクト定義のエラーです」とエラーが出たり正常に処理されたりします、何所が悪いのでしょうか。 尚、教えていただいたworkbooks.open_ thisworkbook.path &"\" nextyearbooknameを記述せず 両方とも開いて実行しても同様にエラーが出たり正常に処理されたりします。A.xlsもB.xlsもシート名は"第一表"です。よろしくお願いします。 Sub 地方税() Dim nextyearbookname As String nextyearbookname = Sheets("第一表").Range("A1")_ & ".xls" workbooks.open thisworkbook.path &"\"_ nextyearbookname ThisWorkbook.Activate Worksheets("第一表").Range("d47:v54").Select Application.CutCopyMode = False Selection.Copy Windows(nextyearbookname).Activate Worksheets("第一表").Range("d58").Select Selection.PasteSpecial Paste:=xlPasteValues,_ Operation:=xlNone, SkipBlanks:=False,_ Transpose:=False ThisWorkbook.Activate Worksheets("第一表").Range("w48:y52").Select Application.CutCopyMode = False Selection.Copy Windows(nextyearbookname).Activate Worksheets("第一表").Range("w59").Select Selection.PasteSpecial Paste:=xlPasteValues,_ Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Worksheets("第一表").Range("A2").Select ThisWorkbook.Worksheets("第一表").Activate Application.CutCopyMode = False Range("A2").Select End Sub

その他の回答 (1)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

#1さんの回答の通りですが、、 Workbook型の変数に代入しておくと後の処理が楽です。 Sheet1!A1に「B.xls」のように拡張子付きでブック名があるとして、 Sub Test() Dim wb As Workbook, fName As String  'マクロのブックと同じパスにある指定したファイルを開く  fName = ThisWorkbook.Path & "\" & _      ThisWorkbook.Worksheets("Sheet1").Range("A1").Text  '存在を確認  If Dir(fName) = "" Then    MsgBox fName & vbCrLf & "そんなファイルは見つからんよ", vbCritical    Exit Sub  End If  '変数wbにセット  Set wb = Workbooks.Open(fName)  'コピーして、マクロのあるブックのSheet1!B20にコピー  wb.Worksheets("Sheet1").Range("B20:B21").Copy _    Destination:=ThisWorkbook.Worksheets("Sheet1").Range("B20")  '終わったら開いたファイルを閉じる  wb.Close End Sub

関連するQ&A

  • ブック名を変数にしたらアクティブになりません。

    色々と調べたり試したのですが、どうしても判らないので質問させてください。 Excel2002でマクロを組んでいます。 セル上の数値を使って、ブック名を変数に格納しました。 したい事は、「DataBase.xls」のCalendarシートの内容を 「07年6月売上.xls」のとあるシートに値貼り付け です。 格納した変数 Dim Uriage As String Uriage = Worksheets("設定").Range("A4") & "年" & Worksheets("設定").Range("B5") & "月売上.xls " 上記のブックを開き、マクロを記述したブックに戻り、 再度上記のブックをアクティブにしようとすると 「有効範囲にありません」とメッセージが出ます。 デバッグ状態で記述を見てみると 1 Windows("DataBase.xls").Activate (←マクロ記述のブック名) 2 Sheets("Calendar").Select 3 Range("B7:H7").Select 4 Selection.Copy 5 Windows(Uriage).Activate (←変数格納したブック名) 5番でとまっています。 ですが、オンマウスにするとちゃんと「"07年6月売上.xls"」と表示が出ます。 それ以前に、ファイルを開くことは出来てるのに・・・・ いったいどういう事なのか、どうかご教示ください。 宜しくお願いします。

  • 他のブックのマクロが見つらない。とのエラ-について

    Excel VBAで、他のブックを開きそこのマクロを動かす事をしたいのですが、マクロが見つからないとのエラーが出ます。 'ファイル作成 Dim a As Variant Dim b As Variant a = Worksheets("sheet3").Range("e2").Value b = Worksheets("sheet3").Range("c2").Text ActiveWorkbook.SaveCopyAs Filename:=b & a & "-提出用作業表.xls" ActiveWorkbook.SaveCopyAs Filename:=ThisWorkbook.Path & "\BackUp\" & b & a & "-提出用作業表.xls" Workbooks.Open Filename:=ThisWorkbook.Path & "\" & b & a & "-提出用作業表.xls" Application.Run b & a & "-提出用作業表.xls" & "!" & "提出用作業表シート削除" MsgBox "提出用作業表を作成したので、サーバーの所定の場所に保存提出して下さい" End Sub 変数が多く見にくくて申し訳ありません。上記のとおり記述したところ、対象ファイルが開くのですが「実行時エラー.1004 マクロが見つかりません」とエラーが出ます。 しかし、エラーメッセージのなかに「'2006年12月社員1-提出用作業表.xls!提出用作業表シート削除'」と対象マクロが記述されてます。多分つまらないことを見落としているのではないかと思うのですが、理由がわかりません。ご教授お願いします。 対象マクロは、標準モジュール4に、Public Subで記載してます。This Wookbook内に記述してもだめでした。マクロの内容は、Sheetを1つ残して他を削除するというものです。 Application.Run Application.Run ThisWorkbook.Path & "\" & b & a & "-提出用作業表.xls" & "!" & "提出用作業表シート削除"でもだめでした。

  • excelで最初に開いたファイル名称を覚えておく様な処理は可能ですか?

    excelで最初に開いたファイル名称を覚えておく様な処理は可能ですか? 1.最初の処理 (1)A.xlsのファイルを開く (2)マクロ:2010.xlsのファイルを開く (3)マクロ:チェックのシートをA.xlsの明細のシートの前に追加 (4)マクロ:チェックのシート名称をコピーした日付と時間のシート名に変更 (5)マクロ:2010.xlsのファイルをディスクトップ上から削除 2.後から追加する処理 (6)B.xlsのファイルを開く (B.xlsは、A.xlsとは異なるフォルダを作成し、A.xlsの特定のセルの中身の名称でファイル名保存されます。名前が異なるだけでマクロの中身はA.xlsと同じ) (7)マクロ:2010.xlsのファイルを開く (8)マクロ:チェックのシートをB.xlsの明細のシートの前に追加 (9)マクロ:チェックのシート名称をコピーした日付と時間のシート名に変更 (10)マクロ:2010.xlsのファイルをディスクトップ上から削除 上記を対応する為に下記の様なマクロ((6)(7)の部分を抜粋)を設定しています。 '2010.xlsのファイルを開く(2010.xlsのファイルは適宜、ディスクトップにコピーされます) Workbooks.Open FileName:="C:\Documents and Settings\ID\デスクトップ\2010.xls" 'チェックのシートを現在のブックの明細の前にコピーする。 Windows("2010.xls").Activate Sheets("チェック").Copy before:=Workbooks(1).Sheets("明細") 単独でA.xlsやB.xlsのファイルが開かれている場合には、 上記の対応で問題ないのですが、A.xls、B.xls以外のexcelファイルが開かれていると、 実行時エラーが出てしまいます。 Workbooks(1)の部分で最初に開いたexcelのファイル名称を指定しているのが 影響しているのはわかるのですが、ここの処理をなんとかしたいというおもいです。 つまり、複数のexcelファイルが開かれていて、A.xlsやB.xlsのファイルを後から開いても エラーがでない様にするには、どの様な処理にしたらよいのか教えて頂きたく。 マクロを実行したexcelのファイル名を覚えておいて、その名前が(1)に置き換わる 様な処理が望まれる処理です。

  • A1セル入力値をファイル名先頭に追加したい。

    マクロ初心者で色々な事例を組み合わせて次のマクロを 作成しました。 A.xlsを開いて一部加工したファイルをB.xlsで保存し さらに一部を消去しC.xlsで保存するマクロです。 今回、B.xlsおよびC.xlsの先頭にA.xlsのA1セルに入力 された6桁の数字を付加して保存したいのですが・・・。 例えばA1セルが123456の時は 123456B.xls 123456C.xls どなたか教えてください。 現在のマクロ Sub Macro2() Dim strFilePath As String Dim strFileName As String Dim flg As Boolean '◆保存するパスの設定 strFilePath = ThisWorkbook.Path & "\" '◆保存するファイル名の指定 strFileName = "B" On Error Resume Next Workbooks(strFileName).Activate ThisWorkbook.SaveAs strFilePath & strFileName '◆個人情報消去 Range("D42:E49").Select Selection.ClearContents Range("d1").Select strFileName = "C" ThisWorkbook.SaveAs strFilePath & strFileName Application.Quit End Sub

  • VBマクロについて

    VBマクロについて 0864_001.xls 0864_002.xls … 0864_009.xls というxlsファイルがあります。 0864_001.xlsを開く→処理→閉じる→0864_002.xls→… のようなループを考え、matome.xls内で以下のようなマクロを作成したのですが実行されません。 Sub Test() Dim i As Integer For i = 1 To 9 Workbooks.Open ThisWorkbook.Path & "\0864_00" & CStr(i) & ".xls" Workbooks("\0864_00" & CStr(i) & ".xls").Activate Range("F1").Formula = "=max($B$11:$B$17)" Range("G1").Formula = "=max($B$391:$B$398)" Range("F1:G1").Copy Workbooks("matome.xls").Activate Sheet1.Activate Range("A" & CStr(i + 1)).PasteSpecial Paste:=xlPasteValues Workbooks("\0864_00" & CStr(i) & ".xls").Close SaveChanges:=False Next i End Sub 5行目でエラーが発生し、「インデックスが有効範囲にありません」とのメッセージが表示されます。 どのようにすれば実行されるのか教えていただきたいです。

  • 別のブックから、特定のシートを指定して他のブックを開くには

    マクロ初心者です。 A.xlsと、B.xlsという2つのブックがあります。 B.xlsはこの時、閉じた状態です。 Aには1つのシートのみがあって、Bには日毎に追加されていく不特定数のシートがあります。 Aのブックのシート内のセル番地A1に、「aaa」と入力した場合、B内の「aaa」という名前のシート名を指定してB.xlsを開くマクロはどう書いたら良いのでしょうか。 頼りきりの質問になってしまって申しわけございません。 何卒宜しくお願い申し上げます。

  • エクセルVBAでの質問です。

    まとめ.xlsに、「まとめ」「グラフ」「A」「B」「C」「D」「E」というシートがあって、それと一緒に、A.xls、B.xls、C.xls、D.xls、E.xlsというファイルを開いた際に、A.xlsの、G2:I54をまとめ.xlsのAのシートのA1に、B.xlsの、G2:I54をまとめ.xlsのBのシートのA1に・・・といった感じでコピーを行いたいと思い、以下のようにマクロを組みました。 Dim I(4) As String I(0) = "A" I(1) = "B" I(2) = "C" I(3) = "D" I(4) = "E" Sheets("まとめ").Select For J = 0 To 4 Step 1 Sheets("" + I(J) + "").Select Windows("" + I(J) + ".xls").Activate Range("G2:I54").Select Selection.Copy ThisWorkbook.Activate Range("A1").Select ActiveSheet.Paste Application.CutCopyMode = False Workbooks("" + I(J) + ".xls").Close SaveChanges:=False Next J ThisWorkbook.Activate Sheets("まとめ").Select Range("A1").Select この状態では、必ずA~Eのシートと、A~E.xlsが存在しないと処理できないのですが、情報量が変わった場合でも同じような処理を行いたいのです。 たとえば、A~CのシートとA~C.xlsしかない場合、 アルファベットではなく、1~3といった場合、 5枚だけではなく、10枚など増えた場合。 まとめ.xlsの「まとめ」と、「グラフ」のシートには、それぞれA~Eに貼られたデータから引用したり、グラフ化したりしているため、シートの入れ替えは行うことができず、純粋に、「値のコピー」としてもってきたいと思っています。 原則として、A~Eのシートに貼り付けるA~E.xlsに存在するシート名は、A.xlsはA、B.xlsはB・・・といった感じになっています。 それが数字になっても、文字になってもその規則に変更はありません。 分かりにくい説明ですみません。 分かる方、よろしくお願いします。

  • Excel-VBA rangeプロパティの使い方について

    Excel-VBA rangeプロパティの使い方について VBA初心者です。いろいろ調べたのですが、分からないので教えてください。 ThisWorkbookのSheet1のA1セルに、aというファイルのaというシートの特定のセルの値をコピーしたいです。 コピーする値のセルは、ThisWorkbookで入力した値を基に変数で記述したいです。 例えば、ThisWorkbookのSheet1のC2セルに「D1」と記載していたとして、その値を変数として設定して、最終的にaというファイルのaというシートの「D1」セルをThisWorkbookのA1セルに貼り付けるのが目的です。 この場合の、下記のhensuu = の設定方法について、ご教授願います。 hensuu = ThisWorkbook.Sheets("Sheet1").Range(“A1”)= Workbooks(a).Sheets(a).Range(hensuu)

  • Excel マクロでファイル名を変数に・・・

    初心者です。検索してもわからなかったので質問です。 下記のようなマクロの処理で「AAA」というファイル名のExcelに「2.xls」からデータをコピーし貼り付けています。    ・    ・ Windows("AAA.xls").Activate Rows("4:4").Select Selection.Insert Shift:=xlDown Windows("2.xls").Activate Range("C6").Select Selection.Copy Windows("AAA.xls").Activate Range("A4").Select ActiveSheet.Paste Windows("2.xls").Activate Range("C7").Select Application.CutCopyMode = False Selection.Copy    ・    ・ 今回は「2.xls」ではなく「3.xls」、「4.xls」、・・・といったように違うファイル名で同じ処理を行ないたいので「2」と指定するのではなく「(ファイル名).xls」といった形にしたいのですが、それは可能なのでしょうか。 ご意見宜しくお願いいたします。

  • 別のブックのセルの値をコピーするマクロについて

    ExcelのVBAのマクロに関する質問です。 複数のブックのセルの値をコピーするマクロについての質問なのですが、現在以下のファイルがあります。 サンプル1.xls サンプル2.xls サンプル3.xls データ.xls そして、 サンプル1のセルA1~D1までの値をデータ.xlsファイルのシート1のセルA1~D1まで、 セルA2~D2までの値をデータデータ.xlsファイルのシート2のセルA1~D1まで、 サンプル2のセルA1~D1までの値をデータ.xlsファイルのシート1のセルA2~D2まで、 セルA2~D2までの値をデータデータ.xlsファイルのシート2のセルA2~D2まで、 サンプル3のセルA1~D1までの値をデータ.xlsファイルのシート1のセルA3~D3まで、 セルA2~D2までの値をデータデータ.xlsファイルのシート2のセルA3~D3まで、 上記のような形でコピーしたいのですがマクロがわかりません。 データ.xlsにボタンを作成し、そのボタンを押すとこの処理が実行されるようにしたいです。 どなかた方法を教えていただけますでしょうか。ご回答お待ちしております。 ※ファイルの名前は今回はサンプル1などとしましたが実際は違う名前も使用します。 また、ファイルの数も今回は3つにしましたが増減します。

専門家に質問してみよう