プロが教えるわが家の防犯対策術!

マクロ初心者です
エクセル2010のマクロVBAで以下を作成したいのですが、分からないので教えてください(>_<)
仕事で、データが入ってる複数のエクセルブック(フォーマットは同じで数値 が異なる)のA~E列をAA.exlmにひたすらコピーしていく作業があります。
なので作業効率をあげるために、

マクロ(cntl+○)起動→エクスプローラを開く→あるエクセルをマウスでクリックすると自動でそのエクセルのA~E列をコピーして元のマクロファイルに貼り付けたいです。

コピーの仕方やエクスプローラを出すプログラムは出来たのですが、そこからエクセルを適当に選んで、そのエクセルのセルをコピーするやり方がわかりません(>_<)
お願いします!

A 回答 (3件)

私なら、あまり凝ったものは作りません。


エクスプローラを使うと、Visual Basic 6.0 SP6 ランタイムファイルのオブジェクトで名前を取得する必要になったはずです。

>Application.GetOpenFilename("Excel(*.xls?),*.xls?", , , , True)
これは、xlsでも、xlsx でも、xlsm でも、ファイル表示します。そして、MultiSelect =Trueですから、
シフトを押しながら、ファイルを選んたり、Ctrl を押しながら、一ファイルずつ選んでも、複数選択できます。

'//
Sub OpenFileNCopy()
'No. 9018968
Dim fNames As Variant
Dim fn As Variant
Dim orgPath As String
Dim dstPath As String

orgPath = ThisWorkbook.Path

'ファイルを探すディレクトリ
dstPath = "C:\Users\[YourName]\My Documents\" '末尾には必ず、¥マークを入れてください。
 ChDir dstPath
 fNames = Application.GetOpenFilename("Excel(*.xls?),*.xls?", , , , True)
 If Not (IsArray(fNames)) Then
   If fNames = "False" Then GoTo EndLine
 End If
 'Application.ScreenUpdating = False '画面がチカチカしますから、ここを外した方が良いです。
 For Each fn In fNames
  With Workbooks.Open(fn)
   'ここの範囲は任意に設定してください。貼り付け先は、ThisWorkbookのシート1になっています。
   .Worksheets(1).Range("A1:E20").Copy _
   ThisWorkbook.Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1)
   .Close False
  End With
 Next fn
 'Application.ScreenUpdating = True  '制御したものを戻します。
EndLine:
 ChDir orgPath
End Sub
'///
    • good
    • 0

>複数のエクセルブック(フォーマットは同じで数値 が異なる)のA~E列をAA.exlmにひたすらコピーしていく作業があります。


つまり、VBAを記述しているA~E列が常に上書きされてしまいますが
それで宜しいのでしょうか。
今のファイルを開くコードの後に
ThisWorkBook.Columns(A:E).Value=AvtiveWorkBook.Columns(A:E).Value
ActiveWorkBook.Close

を追加するだけですが
これが、ご希望とは思えないのですが。
    • good
    • 0

エクスプローラーを操作するのは非常に大変だと思います。


FileDialogではダメですか?
http://officetanaka.net/excel/vba/tips/tips154.htm
複数ファイルの選択はShiftかCtlキーを押しながらです。

Microsoft Office 14.0 Object Library に参照設定が必要です。
    • good
    • 0

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