- ベストアンサー
VBA EXCELファイル選択⇒指定セルコピー
マクロでこんなことできませんか? 完全でなくても構いませんので、できる範囲で教えてください。 宜しくお願いします。 マクロを起動すると、ファイルを選択するウインドウが開きます。ここで、あるExcelファイル(仮にC:\MYDOCUMENT\EXCEL\AAAA.xls)を選択すると、このファイルのセルB2,B3,B4,B5が、マクロを実行しているファイルの同じセルにコピーされ、更にセルB1に、AAAA.xlsの.xlsを抜いた数値のAAAAが入力されます。 AAAA.xlsは一度オープンになってもかまいませんが、自動的に閉じればベターです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 こんな感じでしょうか。 「ファイルのセルB2,B3,B4,B5」「マクロを実行しているファイルの同じセル」とありますが、複数のシートが存在する可能性があるので、これでは特定出来ません。 取あえず双方ともActiveSheetで処理してます。 Sub Test() Dim FName, i As Integer Dim wb As Workbook, pWs As Worksheet Set pWs = ThisWorkbook.ActiveSheet FName = Application.GetOpenFilename("Excel (*.xls), *.xls") If FName = False Then Exit Sub Workbooks.Open (FName) Set wb = ActiveWorkbook pWs.Range("B1") = Left(Dir(FName), Len(Dir(FName)) - 4) For i = 2 To 5 pWs.Range("B" & i) = wb.ActiveSheet.Range("B" & i) Next i wb.Close End Sub
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
少し簡単になりました。 (1)私の場合、My Documentsの中にaa2.xlsのファイルがある。 (2)エクセルを立ち上げて出来るBook1の標準モジュール に下記を貼りつけ、実行します。 Sub test01() Application.FindFile x = ActiveWorkbook.Name y = Left(x, Len(x) - 4) Workbooks("Book1").Worksheets("sheet1").Range("B1") = y Workbooks("Book1").Worksheets("sheet1").Range("B2") = ActiveSheet.Range("b2") Workbooks("Book1").Worksheets("sheet1").Range("B3") = ActiveSheet.Range("b3") Workbooks("Book1").Worksheets("sheet1").Range("B4") = ActiveSheet.Range("b4") End Sub (3)ファイル名指定のダイログウインドウがでるから、そこでaa2のアイコンをクリックする。 (4)Book1のsheet1のB1セルにaa2、B2,B3,B4にaa2の Sheet1のB2,B3,B4の内容が書きこまれました。 (5)最後にActiveWorkbook.Closeを入れると, 自動的にaa2は閉じるもことが出来ます。
お礼
完璧にできました。素人にもわかりやすい記述にしていただきましたので、理解できました。 ありがとうございました。
- bugmaru
- ベストアンサー率38% (76/195)
出来ます。 が、結構プログラミングの知識が要求されます。 このスペースで説明するのは大変なので、ヒントだけですが記載します。 難関はファイル選択ウィンドウの表示で、VBのコモンダイアログコントロールがインストールされていると簡単にウィンドウズ標準のファイル選択ダイアログを呼び出せますが、なければWin32APIをコールするか、ExcelのInputダイアログで代用します。 読み込んだExcelファイルはExcelオブジェクトとして扱う知識が必要です。セルの値はもちろん取得可能です。 "C:\MYDOCUMENT\EXCEL\AAAA.xls"から"AAAA"を抜き出す方法は、文字列検索系の関数Instr()やRevInstr()、と文字列抽出系のMid()やLeft()、Right()などを組み合わせればわりと簡単にできるでしょう。もちろん一文字ずつファイル名を解析するコードを書いてもOKですし、Replace()を使えばもっと簡単にできるでしょう。 がんばって下さい。
お礼
回答ありがとうございました。 一番早く回答いただき、いいヒントをいただき感謝しています。
お礼
完璧にできました。感謝しています。 プログラムの内容はちんぷんかんぷんですが、一つ一つこれから勉強します。