【Excel VBA】エクセルファイルを新規作成し、画面に表示せずに内容を変更する方法は?

このQ&Aのポイント
  • Excel VBAを使用してエクセルファイルの内容を変更する方法について質問です。普通にVBAを使うとファイル作成と保存の過程で一瞬画面に表示されるため、作業が遅くなる可能性があります。画面に表示せずに内容を変更する方法があれば教えてください。
  • VBAを使用してエクセルファイルを新規作成し、内容を変更する場合に画面に表示せずに処理する方法について教えてください。Excelファイルを作成する際に画面に表示されると処理が遅くなるため、効率的に作業する方法が知りたいです。
  • Excel VBAを使用してエクセルファイルを新規作成し、内容を変更する方法について質問です。ファイル作成時に画面に表示しないようにする方法が知りたいです。処理速度の向上にもつながるため、効率的な方法を教えてください。
回答を見る
  • ベストアンサー

【Excel VBA】エクセルファイルを新規作成し、それを画面に表示せずに内容を変更するには?

いつもお世話になっております。 今回はExcelのVBAについて質問があります。 例えば、以下のようにVBAを書くと、C:\test\1.xlsが作成され、その内容が変更されます。 Workbooks.Add.SaveAs dirName + "C:\test\1.xls" Workbooks("1.xls").Worksheets("Sheet1").Cells(1, 2).Value = 777 Workbooks("1.xls").Save Workbooks("1.xls").Close しかし、Workbooks.Add.SaveAsしてWorkbooks("1.xls").Closeするので、C:\test\1.xlsが一瞬画面に現れます。 それに、ちょっと動作が遅い感じがします(わざわざ画面に表示しているから?)。 C:\test\1.xlsを画面に表示させずに、その内容を変更する方法はありませんでしょうか? 実は、一つのExcelファイルの内容から、1000件程度のExcelファイルを作成する必要があります。 毎回、画面を表示していると大変遅くなってしまう恐れがあるのです。 上記の解決方法、又は参考になるWebサイトをご教示いただけると助かります。 以上、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

しょうがないから別のプロセスでやりますか Dim APL, WBK, WKS Set APL = CreateObject("Excel.Application") '別プロセスを立ち上げる Set WBK = APL.Workbooks.Add Set WKS = WBK.WorkSheets(1) WKS.Cells(1, 2).Value = 777 WBK.SaveAs "C:\test\1.xls" WBK.Close APL.Quit Set APL = Nothing '★これ大事

kazuhirox
質問者

お礼

おはようございます。 ご回答ありがとうございます。これこそ、私が知りたかった回答です! 本当にありがとうございました。 以下のスクリプトでパフォーマンスの比較を行ってみました。 ご教示いただいた方法では約32秒、今までの方法では63秒でした。 単純な処理ですが速度が2倍となりました。 Sub testBtn3_Click() Dim APL, WBK, WKS Dim i As Integer Kill "C:\test\*.*" Start = Time For i = 0 To 50 Set APL = CreateObject("Excel.Application") '別プロセスを立ち上げる Set WBK = APL.Workbooks.Add Set WKS = WBK.Worksheets(1) WKS.Cells(1, 2).Value = 777 WBK.SaveAs "C:\test\" + Trim(Str(i)) + ".xls" WBK.Close APL.Quit Set APL = Nothing '★これ大事 Next i MsgBox (Time - Start) * 24 * 60 * 60 Kill "C:\test\*.*" Start = Time Application.ScreenUpdating = False For i = 0 To 50 Workbooks.Add.SaveAs "C:\test\" + Trim(Str(i)) + ".xls" Windows(Trim(Str(i)) + ".xls").Visible = False Workbooks(Trim(Str(i)) + ".xls").IsAddin = False Workbooks(Trim(Str(i)) + ".xls").Worksheets("Sheet1").Cells(1, 2).Value = 777 Workbooks(Trim(Str(i)) + ".xls").Save Workbooks(Trim(Str(i)) + ".xls").Close Next i Application.ScreenUpdating = True MsgBox (Time - Start) * 24 * 60 * 60 End Sub

その他の回答 (1)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

Add直後に以下の操作をしてみて下さい。 Windows("1.xls").Visible = False

kazuhirox
質問者

お礼

回答ありがとうございます。 ご指摘の方法を追加してみましたが、やはり一瞬画面が表示されてしまいました。 以上、よろしくお願いします。

関連するQ&A

  • VBA 新規作成したファイルを開くときにエラー

    すみません、助けてください。 Excel 2007のVBAでActiveWorkbook.SaveAsを使って 新規にExcelファイルを生成するものを作成しているのですが、 新たに作成したExcelファイルを開くときにエラー(警告)が出てしまいます。 (ファイル自体は開けるのですが。。。) ソースは以下です。 ------------------------------------------------------------ ' シート枚数を指定 Application.SheetsInNewWorkbook = 3 Workbooks.Add ' 上書き保存 Application.DisplayAlerts = False ' ファイル名を指定して保存 ActiveWorkbook.SaveAs (ThisWorkbook.Path + "\" + "新しいファイル.xls")

  • VBA 新規にエクセルを開き既存のファイルを開く

    VBAで新規にエクセルのアプリケーションを起動し、 その中に既存のファイルを起動する方法は有りますか? Sub Sample() Dim appExcel As Excel.Application Dim WSH As Variant Dim strPath As String Set appExcel = New Excel.Application Set WSH = CreateObject("Wscript.Shell") strPath = ActiveWorkbook.Path With appExcel .Visible = True .Workbooks.Add .ActiveWorkbook.SaveAs (strPath & "\ test.xls") End With Set WSH = Nothing End Sub このコードは、ネットから拾ったサンプルコードなのですが 新しいアプリケーションでエクセルを立ち上げることはできたのですが 新規のブックが開いてしまい、 更に、開きたいファイルに上書き保存してしまいそうです。 新規のブックが開く原因は .Workbooks.Addで、 上書き保存する原因は .ActiveWorkbook.SaveAs だとわかってるのですが、 この部分を同変更すればいいのかがわかりません。 Workbooks.Open?Filename:="C:\Users\test.xlsx" だと、現在実行しているvbaファイルを同じ枠内で 該当のファイルが開いてしまいます。

  • ExcelのVBAでブックの保存

    ExcelのVBAでブックを追加し保存を行っています。 その際、保存は、どこに行うのがよいのですか bookですか。sheetですか。 両方で、SaveAsができまが、使い分けがあるのでしょうか。 どのように使い分けするのでしょうか。 Workbooks.Add ActiveSheet.Name = "サンプル" ActiveSheet.SaveAs OutFileName ActiveWorkbook.SaveAs OutFileName ActiveWorkbook.Close

  • vb から Excel vba をうまく操作できない。

    VB 初心者で、困っています。 Excel VBA でいろんなツールを作成していますが数が多くなったので、今回、このツールを呼び出すメニューを作ろうと考えて、VB2008でメニューを作成したのですがうまく動作しません。 Excel VBAで作成しているツールは、単独で動作させれば、一番最後に新たなExcelファイルを作成・画面表示でツール自体は終了。となるのですが、VBメニューからツールを起動させると、最後に作成しているはずのExcelファイルが画面表示されません。(ファイルは作成されているみたいですが・・・) ・Excel VBA の新たなファイルへの出力部分です。     Worksheets("シート").Copy     Unload Me     Application.WindowState = xlMaximized     Workbooks("●●.xls").Close SaveChanges:=False ・VB2008 で呼び出すメニューボタン部分です。 Dim Exap As Object Exap = CreateObject("Excel.application") Exap.Workbooks.open("C:\●●.xls") Exap = Nothing よろしくお願いします。

  • Excel マクロによる新規ブック作成について

    Excelで質問です。 ボタンをクリックすると新規ブックを作成するようにしたいのですがうまくいかず・・・。何かいい方法はないでしょうか。よろしくお願いします。 Sub ボタン_Click() Workbooks.Add.SaveAs Filename:="C:\temp\1-50.xls" End Sub にてブックを作成することは出来るのですが、その作成したExcelのシートの数を50個にし、さらにそのシートに「1」から「50」というシート名を付けたいのですが不可能でしょうか。 よろしくお願いします。

  • エクセル VBA マクロを動かしたときに元々開いているファイルを閉じる・・・

    いつも皆様には大変お世話になっております。 早速質問ですが、 「もしこのマクロが動く時点で他のExcelファイルが開いていたら、警告の上 自ファイルを閉じる、開いていなければ~実行」 という処理をかませたいと思っております。 ここの判定の方法がわかりません。(既にExcelが起動されていたら、でもいいのでしょうか。。。?) 下記のようなマクロを組んでいるので 他のファイルが開いていると厳しい状況です。 bname = "C:\" & Format(Range("q1").Value, "yyyymmdd") & "サンプル" & ".xls" ActiveWorkbook.SaveAs bname Workbooks.Open "C:\サンプル.xls" Workbooks(1).Close 本当は"yyyymmdd"&"サンプル"&".xls"ファイルだけ閉じられればいいのですが、自分の知識では上記のような形でしか動かせません;; もしご存知の方、ご教示ください。よろしくお願いします

  • エクセルVBAで参照ボタンを作成したい

    VBAでLAN上のエクセルファイルを指定して開くようにしたのですが、 そのファイルを参照ボタンを作成して、 ファイルを指定したいと考えています。 そのようなことはできるのでしょうか。 よろしくお願いします。 ***VBAのコード***** mypath = "\\server01\test\test.xls" ↑ このファイルを参照ボタンを使って指定したい Set wb = Workbooks.Open(mypath)

  • Excel2011のVBAについて教えてください。

    初めて質問します。 Excel2011forMACでVBAを使いBOOKを指定してクローズさせたいのですが、 エラー1004が起こりファイルを閉じることができません。 作成したVBAは以前にWindowsXP、Excel2000で作成したものを修正したものだったためなのではないかと思い、 改めてExcel2011forMACで下記ように、コマンドボタンをクリックすると"test.xlsx"を閉じるだけのテストを行いましたが同じエラーが発生します。 Private Sub CommandButton1_Click() Windows("test.xlsx").Close  End Sub 実行すると『実行時エラー'1004' _ オブジェクト'Close'のメソッド'Window'が失敗しました。』となります。 ちなみに、WindowsをWorkbooksにしても同様のエラーが発生しました。 Workbooksではファイルを指定しなければエラーは発生しないのですが、できれば1つのファイルを開いた状態にしておきたいと思っています。 このエラーの解消方法を教えていただけませんか。 それとも、MACでは個別にファイルを閉じることはできないのでしょうか。 Excel2011を使っているMAC OS Xのバージョンは10.6.7です。 VBAについては、初心者レベルで常にヘルプとマクロの記録を頼りになんとか作成しています。さらに、MACでVBAを使ったのが初めてで、この事象が一般的に知られていることなのかわかりません。いろいろ調べて同じような事例が見つけられなかったので質問させていただきます。 よろしくお願いします。

  • EXCEL/VBA:WORDファイルの上書き保存を確認する方法

    以下のvbaを実行すると、次のように動作します。   test1.xlsを開いて、Atest1.xlsの名前で保存するときに、既にファイルが存在する場合、excelでは上書き保存するか聞いてきます。  しかし、test1.docを開いて、Atest1.docの名前で保存するときは、いきなり上書き保存されます。 wordの場合も上書き保存するか聞くようにするには、どうしたら良いか教えてください。 Workbooks.OpenText Filename:="test1.xls" ActiveWorkbook.SaveAs Filename:="Atest1.xls" ActiveWindow.Close Dim wordApp As Word.Application Dim wordDoc As Word.Document Dim wordRange As Word.Range Set wordApp = New Word.Application wordApp.Visible = True Set wordDoc = wordApp.Documents.Open(ThisWorkbook.Path & "\test1.doc") Set wordRange = wordDoc.Content wordDoc.SaveAs Filename:="Atest1.doc" wordDoc.Close wordApp.Quit

  • access vbaでExcelファイル作成に関する質問

    こんにちは ACCESS VBAでExcelの帳票作成に関する質問です 下記のコーディングで帳票を作成して値を書き込む。そして帳票オブジェクトを開放する FileCopy c:\template.xls c:\Report.xls Set xlWB = GetObject("c:\Report.xls") Set xlSH = xlWB.Workssheets(1) xlSH.Cells(1,1) = 100 xlWB.Save xlWB.Close set xlSH = nothing set xlWB = nothing しかし、作成したReport.xlsが開くとしても中身が見えない。 必ずReport.xlsをダブルクリックして、開いたExcelのメニューの「ウィンドウ」→「再表示」→「Report.xls」を操作しなければ帳票が見えないのです。作成した帳票は普通のようにダブルクリックしたら開けるようになってほしい。どうすればいいでしょうか、詳しい達人がいらっしゃいましたら、ぜひ教えてください。 どうもありがとうございます。

専門家に質問してみよう