- ベストアンサー
大量にあるエクセルのファイルの有る行にデータを差し込みたい
お世話になります。 大量にエクセルファイルがあります。それらのファイルの有る特定の行にデータ(計算式)を差し込みたいのですが、1個づつやっていると日が暮れてしまいそうです。何かうまい方法は有りませんでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> 例えばタブ全部に適用とか。 おや、いつのまにか追加質問があったのですね。 タブ全部とは全シートという意味でしょうか? それなら以下をお試しください。 Sub test02() Dim MyFile As String, MyPath As String Dim i As Long MyPath = ThisWorkbook.Path & "\" '自分のパスを取得 MyFile = Dir(MyPath & "*.xls", vbNormal) 'パス内のエクセルファイル Do While MyFile <> "" 'エクセルファイルがなくなるまで If MyFile <> ThisWorkbook.Name Then '自分以外のファイルを対象 Set wb = Workbooks.Open(MyPath & "\" & MyFile, UpdateLinks:=0) '選択したファイルをLink更新なしで開く For Each sh In wb.Worksheets '開いたファイルの各シートに sh.Rows(10).Insert Shift:=xlDown '10行目に1行を挿入 sh.Range("A10").Formula = "=IF(A1="""","""",A1)" 'A10に =IF(A1="","",A1) Next '繰り返し wb.Close SaveChanges:=True '選択したファイルを保存して閉じる i = i + 1 ThisWorkbook.Sheets("Sheet1").Cells(i, 1) = MyFile & "に挿入完了" End If MyFile = Dir() '次のファイルを検索 Loop '繰り返し Set wb = Nothing End Sub
その他の回答 (1)
- merlionXX
- ベストアンサー率48% (1930/4007)
VBAを使用するしか方法がなさげですね。 以下は、このVBAが記述されたエクセルファイルを保存したフォルダー内のすべてのファイルに対し、 1.Sheet1の10行目に新たに1行を挿入 2.挿入された行のA10に、=IF(A1="","",A1) という数式を入力 3.保存する 4.このVBAが記述されたエクセルファイルのSheet1のA1以降に、上記処理をしたファイル名を入力 という作業を自動的に行うVBAです。 標準モジュールに挿入してください。 Sub test01() Dim MyFile As String, MyPath As String Dim i As Long MyPath = ThisWorkbook.Path & "\" '自分のパスを取得 MyFile = Dir(MyPath & "*.xls", vbNormal) 'パス内のエクセルファイル Do Until MyFile = "" '対象ファイルがなくなるまで If MyFile <> ThisWorkbook.Name Then '自分以外のファイルを対象 Set wb = Workbooks.Open(MyPath & "\" & MyFile, UpdateLinks:=0) '選択したファイルをLink更新なしで開く wb.Sheets("Sheet1").Rows(10).Insert Shift:=xlDown 'Sheet1の10行目に1行を挿入 wb.Sheets("Sheet1").Range("A10").Formula = "=IF(A1="""","""",A1)" 'A10に =IF(A1="","",A1) wb.Close SaveChanges:=True '選択したファイルを保存して閉じる i = i + 1 ThisWorkbook.Sheets("Sheet1").Cells(i, 1) = MyFile & "に挿入完了" End If MyFile = Dir '次のファイルを検索 Loop '繰り返し Set wb = Nothing End Sub
お礼
ありがとうございます。 動作確認いたしました、ほとんどイメージ通りの内容です。 ただタブの名前がsheet1になっていないとうまくいきませんでした。 ここら辺はなんとかなりますでしょうか。例えばタブ全部に適用とか。 あるいはタブの名前をSheet1に直してしまうマクロが有ればと思います。回答頂ければ幸いです。