プロが教える店舗&オフィスのセキュリティ対策術

マクロの実行をいちいちファイルを開かずに行いたい場合には、どうすればよいのでしょうか。

フォルダの中に同じフォーマットのファイルが数十個から数百個あります。
作業内容は、ファイルの中の一部分を修正する、などです。フォルダ内の全てのファイルに同じ作業をします。

これを、下記のマクロでやっているのですが、今は、
ファイルを開く→下記の別ファイルで保存したマクロを実行し、修正を行う、を繰り返してやっています。

例えば、こんな作業をします。

Range("B2").Select
ActiveCell.FormulaR1C1 = "変更しました"
ActiveCell.Characters(1, 2).PhoneticCharacters = "ヘンコウ"
Range("D11").Select
Sheets("修正").Select
Range("A1").Select
ActiveCell.FormulaR1C1 = "変更しました"
ActiveCell.Characters(1, 2).PhoneticCharacters = "ヘンコウ"
Range("A6:B10").Select
Selection.ClearContents
End Sub


これだと、1ファイルずつ作業をしないといけないので、出来ればフォルダ内にあるエクセルファイルに対し一括で処理できるようにマクロを実行させたいです。

おそらく上記コードに、前後何かをつけたせばいいのだと思いますが、それが分かりません。これが分かれば、色々応用がきくと思うので教えていただけませんか。

どうぞ宜しくお願い致します。


Office2003

A 回答 (3件)

ADODBやDAOで、ファイルに直接、中身を変更することは可能ですが、実際は、Excelのバイナリファイルを開いています。

オブジェクトを開きますから、オーバーヘッドは掛かります。ただ、こういうワザは掲示板では公開されません。さほど時間的に差がないものを、単にやり方だけにこだわる方法だからだと思うのです。

>ActiveCell.Characters(1, 2).PhoneticCharacters = "ヘンコウ"

具体的には、PhoneticCharacters を外部から処理する方法は聞いたことがありません。
データではなく、Workbook の中のRangeオブジェクトに処理を掛けているのだから、ひとつひとつ開かなくては出来ません。また、一括で出来るような方法はありません。

単に、ループして開いて閉じてを繰り返すだけです。それに、シートもひとつならともかく、複数あるなら、今の段階で、人がどう想像するのかは自由でも、質問内容から、コードを書くことは難しいかと思います。
    • good
    • 0

ちょっと書き間違いがあったので訂正。



sub sample1()
 dim w as workbook
 dim s as string
 dim myPath as string
 application.screenupdating = false

 mypath = "c:\test\"
 s = dir(mypath & "*.xls")
 do until s = ""
  set w = workbooks.open(filename:=mypath & s)
  w.worksheets("不明").range("B2").value = "変更しました"
  w.worksheets("不明").range("B2").characters(1,2).phoneticcharacters = "ヘンコウ"
  w.worksheets("修正").range("A1").value = "変更しました"
  w.worksheets("修正").range("A1").characters(1,2).phoneticcharacters = "ヘンコウ"
  w.worksheets("修正").range("A6:B10").clearcontents
  w.close savechanges:=true
  s = dir()
 loop
 application.screenupdating = true
end sub

失礼しました。
    • good
    • 0

今回のご質問で是非マスターしておいて欲しいのは,次の3点です。



1.あるフォルダの中のファイルを順繰り調べるマクロ
  及び,ファイルを開く・保存する・閉じるマクロ

2.マクロで「変数」を使う方法

3.select・selection・activeなんたらを使わないマクロを書けるようになること



sub sample1()
 dim w as workbook
 dim s as string
 dim myPath as string
 application.screenupdating = false

 mypath = "c:\test\"
 s = dir(mypath & "*.xls")
 do until s = ""
  set w = workbooks.open(filename:=s)
  w.worksheets("不明").range("B2").value = "変更しました"
  w.worksheets("不明").range("B2").characters(1,2).phoneticcharacters = "ヘンコウ"
  w.worksheets("修正").range("A1").value = "変更しました"
  w.worksheets("修正").range("B2").characters(1,2).phoneticcharacters = "ヘンコウ"
  w.worksheets("修正").range("A6:B10").clearcontents
  w.close savechanges:=true
  s = dir()
 loop
 application.screenupdating = true
end sub


それから,ファイルを開かずにファイルの中身を操作する方法は全くありません。
    • good
    • 0
この回答へのお礼

ありがとうございました。

私はマクロは記録マクロで新規に作成し、その後でモジュールを開いて自分が出来る範囲で修正していました。

基礎からちゃんと勉強するべきですね。

お礼日時:2011/01/29 22:41

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

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


このQ&Aを見た人がよく見るQ&A