• 締切済み

ファイルを開かずにマクロを実行

マクロの実行をいちいちファイルを開かずに行いたい場合には、どうすればよいのでしょうか。 フォルダの中に同じフォーマットのファイルが数十個から数百個あります。 作業内容は、ファイルの中の一部分を修正する、などです。フォルダ内の全てのファイルに同じ作業をします。 これを、下記のマクロでやっているのですが、今は、 ファイルを開く→下記の別ファイルで保存したマクロを実行し、修正を行う、を繰り返してやっています。 例えば、こんな作業をします。 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

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

ADODBやDAOで、ファイルに直接、中身を変更することは可能ですが、実際は、Excelのバイナリファイルを開いています。オブジェクトを開きますから、オーバーヘッドは掛かります。ただ、こういうワザは掲示板では公開されません。さほど時間的に差がないものを、単にやり方だけにこだわる方法だからだと思うのです。 >ActiveCell.Characters(1, 2).PhoneticCharacters = "ヘンコウ" 具体的には、PhoneticCharacters を外部から処理する方法は聞いたことがありません。 データではなく、Workbook の中のRangeオブジェクトに処理を掛けているのだから、ひとつひとつ開かなくては出来ません。また、一括で出来るような方法はありません。 単に、ループして開いて閉じてを繰り返すだけです。それに、シートもひとつならともかく、複数あるなら、今の段階で、人がどう想像するのかは自由でも、質問内容から、コードを書くことは難しいかと思います。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

ちょっと書き間違いがあったので訂正。 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 失礼しました。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

今回のご質問で是非マスターしておいて欲しいのは,次の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 それから,ファイルを開かずにファイルの中身を操作する方法は全くありません。

sayasayacchi
質問者

お礼

ありがとうございました。 私はマクロは記録マクロで新規に作成し、その後でモジュールを開いて自分が出来る範囲で修正していました。 基礎からちゃんと勉強するべきですね。

関連するQ&A

  • エクセルのマクロでフリガナをつけるには

    初歩的なことだと推測しますが、一つのセルに対してメニュー[書式]-[ふりがな]-[編集]でふりがなをつけられるのですが、一度にひとつの列の沢山の漢字の読みを追加するにはどうしたらいいでしょうか。 「新しいマクロの記録」でマクロに操作を記録しても結果が表示されるだけで繰り返し処理に応用できません。 下記の例 ActiveCell.FormulaR1C1 = "・・・" ActiveCell.Characters(1, 3).PhoneticCharacters = "・・・" ActiveCell.Offset(1, 0).Range("A1").Select

  • 同じ場所にあるファイル全てに対してマクロをかけたい

    <やりたいこと> マクロと同じフォルダに入っている全ファイル(そのときによりファイル数が変わる)に対し、 1、2行を削除し、オートフィルタを消し、A2にある「No.1」を「No1」(ドットを消す)にし、 ファイルを上書き保存するようにしたいです。 <今の状態と質問> 全ファイル(例は4つ)を開いた状態で下記のマクロをかければ、 希望の処理ができます。 が、複数ファイルが有る場合、ファイル全てを開いて実行するのは難ありです。 事前にファイルを開く手間をかけずに、マクロで全て処理する方法は どうしたらいいのでしょうか。 過去検索で、Workbooks.Open Filename:= (ThisWorkbook.Path & "\*.xls")などを 見よう見真似で追加したりしてみたものの動きませんでした。 今の段階(4ファイル開いておけば実行可能)のマクロは下記の通りです。 Sub test() ' ' Keyboard Shortcut: Ctrl+q ' Rows("1:2").Select Selection.Delete Shift:=xlUp Selection.AutoFilter Range("A1").Select ActiveCell.FormulaR1C1 = "No1" Range("A2").Select ActiveWorkbook.Save ActiveWindow.Close Rows("1:2").Select Selection.Delete Shift:=xlUp Selection.AutoFilter Range("A1").Select ActiveCell.FormulaR1C1 = "No1" Range("A2").Select ActiveWorkbook.Save ActiveWindow.Close Rows("1:2").Select Selection.Delete Shift:=xlUp Selection.AutoFilter Range("A1").Select ActiveCell.FormulaR1C1 = "No1" Range("A2").Select ActiveWorkbook.Save ActiveWindow.Close Rows("1:2").Select Selection.Delete Shift:=xlUp Selection.AutoFilter Range("A1").Select ActiveCell.FormulaR1C1 = "No1" Range("A2").Select ActiveWorkbook.Save ActiveWindow.Close End Sub

  • 指定したセルに番号をつけていくマクロ

    現在、画像をたくさん貼り付け、カタログを作っていて、番号を入れたらマクロで画像が配置されるというところまでできました。今度は、その、番号を指定したセルに書き込む作業をマクロでできないかと考えています。現在の私が作成したマクロが↓です。 Sub 画像1から60() Range("A4").Select ActiveCell.FormulaR1C1 = "1" Range("C4").Select ActiveCell.FormulaR1C1 = "2" Range("E4").Select ・・・   ActiveCell.FormulaR1C1 = "58" Range("q29").Select ActiveCell.FormulaR1C1 = "59" Range("s29").Select ActiveCell.FormulaR1C1 = "60" End Sub というふうにかなり長く、また、この番号が3000番くらいまであり、簡単にできないものかと試行錯誤しています。 初心者なりに、工夫したのは"600"と表記するのを"=60*10"とし、あとで*10を置換しています。それでも3000番はほど遠く何か方法がありましたら教えてください。

  • マクロの編集について教えてください。

    こんにちは。 長くVBAから離れており、思い出しながらマクロを作っているところです。 目的は、B列にある数百の漢字・ひらがな・カタカナのデータを"あいうえお順"に並び替えたいのです。 それで、C列に「書式」「ふりがな」を使って、コピーしてふりがなを付け、「並び替え」で"あいうえお順"に並び替えることとしました。 データの中には、コピー・加工したものも多く、セルに貼り付けても同時にふりがなが出てきません。 手作業で成功しましたので、マクロをつくり、 For Next を使って、全ての行を同時に処理したいと思い、マクロを作成しました。 ところが、マクロ作成時、B6に"東京"を入力。マクロに"東京"が書きこまれたことから、他の文字列(例えば"大阪")をB6に入力しても、マクロを実行すると、やはり"東京"がC6に表示されます。 マクロは次のとおりです。 Range("B6").Select Selection.Copy Range("C6").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("C6").Select Application.CutCopyMode = False ActiveCell.FormulaR1C1 = "東京" ActiveCell.Characters(1, 2).PhoneticCharacters = "とうきょう" Range("B7").Select この問題をクリアしたいのですが、このマクロを修正してもいいですし、全く別のマクロでもかまいません。 いいサンプルがありましたら、ご教授ください。 よろしくおねがいします。

  • ファイルの保存先を任意にしたい(マクロ)

     エクセルのマクロです。  マクロを実行した時に、保存先とファイル名は任意に入力して(その部分だけは、マクロ実行者が入力して)、その後もマクロを実行させたいのですがどうすれば良いのでしょうか? たとえば、 ActiveCell.FormulaR1C1 = "1" Range("B1").Select ChDir "C:\Documents and Settings\a\デスクトップ" ActiveWorkbook.SaveAs Filename:= _ "C:\Documents and Settings\a\デスクトップ\ Book1.xls", FileFormat:=xlNormal, _ Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _ CreateBackup:=False Range("A2").Select ActiveCell.FormulaR1C1 = "2" Range("B2").Select ActiveWorkbook.SaveAs Filename:= _ "C:\Documents and Settings\a\デスクトップ\ Book2.xls", FileFormat:=xlNormal, _ Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _ CreateBackup:=False Range("A3").Select ActiveCell.FormulaR1C1 = "3" Range("B3").Select ActiveWorkbook.SaveAs Filename:= _ "C:\Documents and Settings\a\デスクトップ\ Book3.xls", FileFormat:=xlNormal, _ Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _ CreateBackup:=False Range("A4").Select ActiveCell.FormulaR1C1 = "4" Range("B4").Select  上記の場合は、保存先もファイル名もこちらが指定していますが、その部分だけは、マクロの実行者に任意指定及び入力させたいのです。  マクロ初心者なので、よろしくお願いします。

  • データの入っている行だけを繰り返し処理マクロについて

    データの入っている行だけを繰り返し処理したく以下マクロ記述しましたが上手くいきません。宜しく御願いします。 E列に空白列を挿入。 E3に「月」と入力しE4にD4の年月日から年月だけを取り出すように組みたく下記記述したのですがエラーになってしまいました。 どのように記述したら良いでしょうか? ..A..B..C...D.........E.......F 1 2 3 * * * 納期 月    * 4 09.10/08  09.10 5    記 Sub 年月test() ' ' 年月test Macro ' マクロ記録日 : 2009/11/15 ユーザー名 : TH ' ' Columns("E:E").Select Selection.Insert Shift:=xlToRight Range("E3").Select ActiveCell.FormulaR1C1 = "月" ActiveCell.Characters(1, 1).PhoneticCharacters = "ツキ" Range("E4").Select Do Until ActiveCell.Offset(0, -1).Value = "" With ActiveCell .Value = .FormulaR1C1 = "=LEFT(RC[-1],5)" End With Loop End Sub

  • ■ エクセルマクロについてです。初級?

    エクセルのマクロでデスクトップにあるエクセルファイルを開くにはどうしたらいいのでしょうか? 現在は、エクセルファイルA.xls B.xlsという2つを開いていて、マクロを実行することができるのですが、これをA.xlsだけ開いている上体で、実行したいのです。 なので、デスクトップに置いてあるB.xlsファイルを開くコマンド?というか、関数が知りたいのですが、どうしたらいいのでしょうか? 現在はこのような感じになっております。 Sub Macro2() ' ' Macro2 Macro ' マクロ記録日 : 2008/9/10 ユーザー名 : ' ' ActiveCell.FormulaR1C1 = "12345" Range("G17").Select ActiveCell.FormulaR1C1 = "129876" Range("G18").Select Windows("B.xls").Activate Range("N16").Select ActiveCell.FormulaR1C1 = "8/4/2008" Range("N17").Select ActiveWorkbook.Save Range("O16").Select ActiveWorkbook.Save ActiveWindow.Close End Sub

  • マクロのセルの範囲指定

    こんにちは。マクロ初心者です。 今エクセルの業務でマクロを作成しようとしているのですが マクロ実行時にセルの範囲でマウスでセルを選んだところから マクロを実行させたいのですが(マクロを実行する際毎回場所が変わるので)そのようなセル指定方法はあったりしますでしょうか? 項目に関しては(BW4~BX4)は固定です。 関数に関しては(BW10~BW10)は月によっては BW20になったりと行が変わります。 Range("BW10").Selectのカッコ内を毎回変更すればいいのですが 項目が20以上ある為面倒です。 なにか良い方法がありますでしょうか? よろしくお願いいたします。 Range("BW4").Select ActiveCell.FormulaR1C1 = "商談明細NO桁数" Range("BX4").Select ActiveCell.FormulaR1C1 = "商談明細NO桁数2" Range("BW10").Select ActiveCell.FormulaR1C1 = "=CONCATENATE(0,RC[-70])" Range("BX10").Select   ActiveCell.FormulaR1C1 = "=RIGHTB(RC[-1],2)"

  • 【マクロ】指定したファイルを開いてマクロを実行

    マクロ初心者です。よろしくお願いします。 <質問> コマンドボタンをクリックしたら、任意のエクセルファイルを指定して開き、その開いたファイル(白紙状態のファイル)にマクロを実行させる方法を探してます。 <作成マクロ> Private Sub CommandButton1_Click() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If Workbooks(Dir(OpenFileName)).Activate ActiveCell.FormulaR1C1 = "テスト" Range("A1").Select Selection.Copy Range("B1").Select ActiveSheet.Paste End Sub <マクロ説明> --コマンドボタンをクリックして指定したエクセルファイルを開く-- Private Sub CommandButton1_Click() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If Workbooks(Dir(OpenFileName)).Activate --開いたエクセルファイル(白紙状態)のセルA1に「テスト」を入力した後、コピーしセルB2に貼り付ける--   ActiveCell.FormulaR1C1 = "テスト" Range("A1").Select Selection.Copy Range("B1").Select ActiveSheet.Paste End Sub コマンドボタンをクリック ↓ 任意のエクセルファイルを指定して開く ↓ 開いたファイル(白紙状態のファイル)のセルA1に「テスト」と書き込み セルA1の「テスト」をコピーしセルB1に貼り付ける このマクロを実行させるにはどこを改善すれば良いでしょうか? ご助言いただけると助かります。 よろしくお願い致します。

  • 【マクロ】指定したファイルを開いてマクロを実行

    マクロ初心者です。よろしくお願いします。 <質問> コマンドボタンをクリックしたら、任意のエクセルファイルを指定して開き、その開いたファイル(白紙状態のファイル)にマクロを実行させる方法を探してます。 <作成マクロ> Private Sub CommandButton1_Click() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If Workbooks(Dir(OpenFileName)).Activate ActiveCell.FormulaR1C1 = "テスト" Range("A1").Select Selection.Copy Range("B1").Select ActiveSheet.Paste End Sub <マクロ説明> --コマンドボタンをクリックして指定したエクセルファイルを開く-- Private Sub CommandButton1_Click() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If Workbooks(Dir(OpenFileName)).Activate --開いたエクセルファイル(白紙状態)のセルA1に「テスト」を入力した後、コピーしセルB2に貼り付ける--   ActiveCell.FormulaR1C1 = "テスト" Range("A1").Select Selection.Copy Range("B1").Select ActiveSheet.Paste End Sub コマンドボタンをクリック ↓ 任意のエクセルファイルを指定して開く ↓ 開いたファイル(白紙状態のファイル)のセルA1に「テスト」と書き込み セルA1の「テスト」をコピーしセルB1に貼り付ける このマクロを実行させるにはどこを改善すれば良いでしょうか? ご助言いただけると助かります。 よろしくお願い致します。

専門家に質問してみよう