仕事でDドライブの中のフォルダにエクセルのシートが100種類位入っています。それらのエクセルシートに毎日同じ作業をしなければならないのですが、(エクセルを開いて行う作業は各シート共通です)そのマクロの作り方を教えていただけないでしょうか?ちなみに
Workbooks.Open Filename:="D:\業務\あ.xls"
Range("D9").Select
Selection.Copy
Range("E9").Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveWorkbook.Save
ActiveWindow.Close
Workbooks.Open Filename:="D:\業務\い.xls"
Range("D9").Select
Selection.Copy
Range("E9").Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveWorkbook.Save
ActiveWindow.Close
Workbooks.Open Filename:="D:\業務\う.xls"
Range("D9").Select
Selection.Copy
Range("E9").Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveWorkbook.Save
ActiveWindow.Close
その後もまだまだ続きます。
というマクロの記録を使って作ってはいるものの、やたらと長くなってしまいます。VBAの知識がない初心者なのですが、いい方法があれば教えていただけないでしょうか?
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
File System Objectを使った方法です。
Sub Test()
Dim myFolder As String
Dim f As Object
Dim wb As Workbook
Dim FSO As Object
Application.ScreenUpdating = False
Set FSO = CreateObject("Scripting.FileSystemObject")
myFolder = ThisWorkbook.Path
For Each f In FSO.GetFolder(myFolder).Files
If FSO.GetExtensionName(f) = "xls" _
And f.Name <> ThisWorkbook.Name Then
Set wb = Workbooks.Open(myFolder & "\" & f.Name)
With wb
.Sheets("Sheet1").Range("D9").Copy Sheets(1).Range("E9")
.Save
.Close
End With
End If
Next
Application.ScreenUpdating = True
Set wb = Nothing
Set FSO = Nothing
End Sub
このマクロを新規ブックの標準モジュールに記述して
D:\業務フォルダに放り込んで実行します。
各ブックの対象シートが明示されていなかったので
Sheet1としてありますが、実状に合わせて変更してください。
No.3
- 回答日時:
ファイル名をどこかへ覚えさせて、順々に変化させて繰り返せばよい。
その記録させる場所だが、配列も良いが、せっかくエクセルVBAでシートのセルと言う便利なものがあるので
あるシートのA1以下にファイル名を入力し記録する。
あ.xls
い.xls
う.xls
・・・
下記を標準モジュールに貼り付け、パス名を実際のものに修正する。
そして実行する。
Sub test01()
Dim sh1 As Worksheet
Set sh1 = Worksheets("Sheet1")
d = sh1.Range("A65536").End(xlUp).Row
' MsgBox d
For i = 1 To d
Workbooks.Open Filename:="C:\Documents and Settings\XXXX\My Documents\" & sh1.Cells(i, "A")
Range("D9").Select
MsgBox Range("D9")
Selection.Copy
Range("E9").Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveWorkbook.Save
ActiveWindow.Close
Next i
End Sub
上記はあ。xlsなどのSheet1のD9セルを、同じブックのShhet1のE9セルにコピー貼り付けしているだけです。
あまり実際二ーズが考えられない例だが。
Application.ScreenUpdating = False を最初に
Application.ScreenUpdating = True を最後に入れたほうが良いでしょう。
一応3ブックでテスト済み。
No.2
- 回答日時:
Dドライブの業務フォルダーにはいっている、自分自身(このマクロを書くファイル)以外の全てのエクセルファイルのアクティブになったシートに対して実行する方法です。
Sub test()
Application.ScreenUpdating = False '画面更新を一時停止
fname = Dir("D:\業務\*.xls") 'フォルダ内のExcelファイルを検索
Do Until fname = Empty '全て検索し終えると、fname = Empty となるので、その間以下を実行
If fname <> ThisWorkbook.Name Then 'ファイル名がこのファイルじゃなければ
Workbooks.Open "D:\業務\" & fname '選択したファイルを開く
Range("D9").Copy
Range("E9").PasteSpecial
Application.CutCopyMode = False
ActiveWorkbook.Save
ActiveWorkbook.Close
n = n + 1
End If
fname = Dir '選択したフォルダ内の次のExcelファイルを検索します
Loop '繰り返す
Application.ScreenUpdating = True '画面更新一時停止を解除
MsgBox n & "件の作業を終了しました。"
End Sub
元データのバックアップを必ずとってから実行してみて下さい。
ずいぶんお礼が遅くなってすいませんでした。なにぶん始めての質問だったもので申し訳ありません。参考にさせていただきます。ありがとうございました
No.1
- 回答日時:
VBAを使うしかないと思います。
例えば、1.新しいワークシートに、[表示]-[ツールバー]-[コントロールツールボックス]を開き、コマンドボタンを置く
2.コマンドボタンをダブルクリックして、VBAを開き、コードを記述する。
Private Sub CommandButton1_Click()
Dim f(100) As String
f(1) = "D:\業務\あ.xls"
f(2) = "D:\業務\い.xls"
f(3) = "D:\業務\う.xls"
…<同様の記述>
i = 1
Do
Subcopy (f(i))
i = i + 1
Loop While i < 100
End Sub
Private Sub Subcopy(file)
Workbooks.Open Filename:=file
Worksheets("Sheet1").Range("D9").Select
Selection.Copy
Worksheets("Sheet1").Range("E9").Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveWorkbook.Save
ActiveWindow.Close
End Sub
3.エクセルファイルを名前を付けて保存する。
4.エクセルファイルを開き、ワークシート上のボタンを押してマクロを実行する。
こんな流れですが、業務ファイルを破壊する恐れがありますので、
☆VBAに慣れた人に相談する
☆作動を十分に確認する
☆元データのバックアップを必ずとる
を行ってから実行して下さい。
丁寧にお答えいただきまして本当にありがとうございます。早速バックアップを取った後に教えていただいたコードで試して見たいと思います。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセル VBAでシートのコピーを作りたい 1 2023/05/18 07:42
- Visual Basic(VBA) マクロを短くする 1 2023/01/15 00:11
- Excel(エクセル) エクセルのマクロでコピー後の貼り付け先を毎回指定したところにしたい 5 2022/08/12 10:47
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Visual Basic(VBA) マクロで最終行を取得してコピーしたい 3 2022/04/06 19:07
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Excel(エクセル) ②Excel 簡単にシートコピーしたら前日の残高と日付を変更させたい→マクロの記録でエラーが出ます 8 2022/07/16 20:40
- Visual Basic(VBA) データのある範囲を選択するVBAについて 2 2022/09/03 00:20
- Visual Basic(VBA) エクセルのマクロについて教えてください。 5 2023/06/02 08:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで保存しないで閉じると空の...
-
エクセル関数>参照ファイル名...
-
excelで直前に参照していたブッ...
-
マクロの保存先、開いてるすべ...
-
複数のExcelファイルの印刷設定...
-
【Excel VBA】マクロでExcel自...
-
ファイル名変更後も、マクロを...
-
【Excel】マクロの保存先について
-
【関数】【マクロ】データの転...
-
エクセルについて教えてください。
-
エクセルで未保存に対するメッ...
-
エクセルのマクロについて教え...
-
エクセル;相対パスを絶対パスへ...
-
エクセルで使用期限付きのブッ...
-
EXcelのマクロで相対パスでファ...
-
【Excel】特定セルの内容をテキ...
-
【マクロ】マクロが保存されて...
-
EXCELブックが勝手に開いて困っ...
-
エクセルのvbaにて thisworkboo...
-
エクセルでメッセージボックス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAで保存しないで閉じると空の...
-
エクセル関数>参照ファイル名...
-
マクロの保存先、開いてるすべ...
-
エクセル;相対パスを絶対パスへ...
-
【Excel】マクロの保存先について
-
【Excel VBA】マクロでExcel自...
-
EXcelのマクロで相対パスでファ...
-
複数のExcelファイルの印刷設定...
-
excelで直前に参照していたブッ...
-
エクセルVBAで作成した別ブック...
-
EXCELマクロで、開いてはいるが...
-
EXCELブックが勝手に開いて困っ...
-
【Excel】特定セルの内容をテキ...
-
エクセルのvbaにて thisworkboo...
-
[フィルターオプションの設定]...
-
ファイル名変更後も、マクロを...
-
EXCELのボタンによるマクロの登...
-
エクセルVBA 個人用マクロブッ...
-
エクセルで未保存に対するメッ...
-
エクセルで複数ファイルのセル...
おすすめ情報