dポイントプレゼントキャンペーン実施中!

マクロでこんなことできませんか?
完全でなくても構いませんので、できる範囲で教えてください。
宜しくお願いします。

マクロを起動すると、ファイルを選択するウインドウが開きます。ここで、あるExcelファイル(仮にC:\MYDOCUMENT\EXCEL\AAAA.xls)を選択すると、このファイルのセルB2,B3,B4,B5が、マクロを実行しているファイルの同じセルにコピーされ、更にセルB1に、AAAA.xlsの.xlsを抜いた数値のAAAAが入力されます。
AAAA.xlsは一度オープンになってもかまいませんが、自動的に閉じればベターです。

A 回答 (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
    • good
    • 6
この回答へのお礼

完璧にできました。感謝しています。
プログラムの内容はちんぷんかんぷんですが、一つ一つこれから勉強します。

お礼日時:2003/06/14 22:01

少し簡単になりました。


(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は閉じるもことが出来ます。
    • good
    • 1
この回答へのお礼

完璧にできました。素人にもわかりやすい記述にしていただきましたので、理解できました。
ありがとうございました。

お礼日時:2003/06/14 22:03

出来ます。


が、結構プログラミングの知識が要求されます。

このスペースで説明するのは大変なので、ヒントだけですが記載します。

難関はファイル選択ウィンドウの表示で、VBのコモンダイアログコントロールがインストールされていると簡単にウィンドウズ標準のファイル選択ダイアログを呼び出せますが、なければWin32APIをコールするか、ExcelのInputダイアログで代用します。

読み込んだExcelファイルはExcelオブジェクトとして扱う知識が必要です。セルの値はもちろん取得可能です。

"C:\MYDOCUMENT\EXCEL\AAAA.xls"から"AAAA"を抜き出す方法は、文字列検索系の関数Instr()やRevInstr()、と文字列抽出系のMid()やLeft()、Right()などを組み合わせればわりと簡単にできるでしょう。もちろん一文字ずつファイル名を解析するコードを書いてもOKですし、Replace()を使えばもっと簡単にできるでしょう。

がんばって下さい。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
一番早く回答いただき、いいヒントをいただき感謝しています。

お礼日時:2003/06/14 21:57

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

このQ&Aを見た人はこんなQ&Aも見ています