出産前後の痔にはご注意!

Windows XP
Celeron 1.7GHz
メモリ 512MB
Office2000
HD 残り20GB以上

上記の環境です。

およそ2MBのマクロ入りのエクセルファイルを作成し、作成当初は問題なくすぐにファイルを開く事ができていました。
日に日に開くのに時間がかかっており、今では何分もかかるか、もしくは全く開けないかのどちらかです。(マクロを有効にする、の画面が消えて、メイン画面になるまでの時間がかかります。)

何度も保存を繰り返している為、デフラグ(Windows標準ソフト)も試したり、再起動もしていますが、やはり開けません。

何が原因なのでしょうか?
やはりパソコンのスペックが問題なのでしょうか?

よろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

エクセルで、開くのに時間のかかるファイルがあります。


http://oshiete1.goo.ne.jp/qa763468.html

その他、アクセサリのディスククリーンアップで、一時ファイルを削除してみるとか。
 
    • good
    • 0
この回答へのお礼

ありがとうございます。
リンク先の良回答のやり方で直りました。
助かりました。

お礼日時:2010/02/04 20:21

こんにちは。


マクロに限らず数式が多く入ったブックや複雑な計算式を用いたブックで2MBを超えていたとしたらハイスペックなパソコンでなければ開くのに時間が掛ります。
こういった場合、全て値にしてしまうのがいいのですが実際には支障が出ることが殆どです。
私もこのようなデータファイルを作ることが多々ありますが次のような方法で起動を早めています。
VBAを使用しファイルを閉じる際に全ての数式を値として貼り付け数式を無くす。
逆に開いた時は数式として入っていなければならないセルに対象の数式を入れ込む。
この方法により起動に掛る時間が大幅に短縮出来ます。
一見数式を入れ込む時間が掛るかと思いますが起動時にはファイルをメモリーに読み込みながら処理をする為時間が掛りますが起動後にメモリー内のデータを変更する方が格段に早いと言った感じになります。
検討して見てください。
    • good
    • 0

他のマクロ入りファイルも同様に遅いですか?


特定のファイルだけ遅い場合、そのファイルが破損している可能性があります。
その場合は、新たなブックを作成し、シートやマクロをコピーして作りなおして見てください。
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルで、開くのに時間のかかるファイルがあります。

エクセルで作った表の中に、なかなか開かないファイルがあります。
以前作った表をコピーして少し手を加えて保存したのですが、クリックしてから開くまでに数秒かかります。
表の端に少し図を入れてますが、マクロとかも使ってませんし、プロパティを見ても、300キロバイト位の小さなものです。(コピー元の表は400キロバイト位ありますが、スムーズに開きます)
何が原因なのでしょうか???

Aベストアンサー

解決策になるかどうかわかりませんが...

1.問題のブックを開き すべて選択 (Ctrl+A)>コピー(Ctrl+C)
2.新規作成(Ctrl+N)>貼り付け(Ctrl+V)>名前をつけて保存でどうでしょう。

または

1'.問題のブックのうち必要な部分だけ選択>コピー
2.同上
とやってみて下さい。

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

Qvba で全てのエクセルファイルを開く処理

お世話になります。
下記のVBAソースで、特定のフォルダにあるエクセルを全て
開く処理をしているのですが、スマートに行えているか
疑問に思いました。

具体的には、「'''''''''時間がかかっている??」箇所で
無駄なこと・時間がかかっていないか疑問です。

目的としては、「vba で全てのエクセルファイルを開く処理」ですので、
(1)皆さんがされている「vba で全てのエクセルファイルを開く処理」
(2)下記ソースの「'''''''''時間がかかっている??」は時間がかかっていないか
の、どちらかで、結構ですのでご返事頂ければ有り難いです。

宜しくお願いします。




------------ソース-----------------
ChDir (ThisWorkbook.Path & "\" & フォルダ)
fileName = Dir("*.xls")
Do While fileName <> ""
If fileName <> ThisWorkbook.Name Then
IsBookOpen = False
'''''''''時間がかかっている??
For Each OpenedBook In Workbooks
If OpenedBook.Name = fileName Then
IsBookOpen = True
Exit For
End If
Next
'''''''''時間がかかっている??
If IsBookOpen = False Then
Workbooks.Open (fileName)
End If
End If
fileName = Dir()
Loop

お世話になります。
下記のVBAソースで、特定のフォルダにあるエクセルを全て
開く処理をしているのですが、スマートに行えているか
疑問に思いました。

具体的には、「'''''''''時間がかかっている??」箇所で
無駄なこと・時間がかかっていないか疑問です。

目的としては、「vba で全てのエクセルファイルを開く処理」ですので、
(1)皆さんがされている「vba で全てのエクセルファイルを開く処理」
(2)下記ソースの「'''''''''時間がかかっている??」は時間がかかっていないか
の、どちらかで、結構ですの...続きを読む

Aベストアンサー

#1-3、cjです。#3訂正です。

> こんな風なシンプルな記述でも、二重起動することがありませんから、
> 問題になることはありません。
この記述は(私の認識の)誤りでした。
問題にならないのは、運用ルールによるものでした。
当方の環境でもやはり問題になる場面はあります。

開いていたブックと同一のブックを再度開こうとする場合、
開いていたブックに未保存のデータがあると、
ーーーーーーーーーーーーーーーーーーーーーーーーー
"ブック名 .xlsは既に開いています。2乗に開くと、これまでの変更内容は破棄されます。ブック名 .xls を開きますか?"
[はい] [いいえ]
ーーーーーーーーーーーーーーーーーーーーーーーーー
というダイアログが表示され、
実行を中断せざるを得なくなります。

という訳で、ブックを開く前のタイミングで上書き保存してあれば、問題ない、
という但し書きを付けておくべきでした。

または、考えようによっては、予め、自ブック以外のブックをすべて閉じておいて
それから一気に全部開く、などの方法も、検討に値するかも知れません。

以上、訂正でした。失礼しました。

#1-3、cjです。#3訂正です。

> こんな風なシンプルな記述でも、二重起動することがありませんから、
> 問題になることはありません。
この記述は(私の認識の)誤りでした。
問題にならないのは、運用ルールによるものでした。
当方の環境でもやはり問題になる場面はあります。

開いていたブックと同一のブックを再度開こうとする場合、
開いていたブックに未保存のデータがあると、
ーーーーーーーーーーーーーーーーーーーーーーーーー
"ブック名 .xlsは既に開いています。2乗に開くと、これまでの変更...続きを読む

QExcelファイルを開くのが異常に遅い・・・バグ?

数十KBしかないExcelファイルを開くのに30秒くらいかかってしまいます。
ノートPCで利用しているのですが、CoreDUOの2G・メモリ1GB・WinXPを利用していてWordなどは一瞬で開くのに、Excelで特定のファイルを開くときだけ、Excelの画面になったまま開かない状態になります。
計算式が大量に入っているわけではないのに、これはバグでしょうか?

Aベストアンサー

こんにちは。

例えば、以下のフォルダで、Excelの残骸を掃除してみると速くなることがあります。

C:\Documents and Settings\[ユーザー名]\Local Settings\Temp\*.emf

他の要因としては、

以下の二点のファイルのトラブル
Excel設定用のフォルダ
C:\Documents and Settings\[ユーザー名]\Application Data\Microsoft\Excel
  \*.xlb ファイル
その下位フォルダの
  ..\XLSTART\PERSONAL.XLS
この二つを削除するか、移動することによって、xlbファイルを再生成させます。(なお、メニューはリセットされてしまいます)

・不要なアドインを外す
・プリンタのドライバ(バージョンを下げるか・あげるか)
・履歴を自動記録するアプリケーション(中止させる)
・アンチウィルスの設定(Office を外す-お勧めしません)

によって起動が早くなることがあります。

QWorkBooksをオープンさせずにシートにコピーしたい【EXCEL VBA】

よろしくお願いします。
今あるブックにあるシートを別のブックにコピーしたいのですが、今考えているのは

ここから////////
'ブックを開く
Workbooks.Open コピー元のブックのパス
'シートをコピー
Worksheets.Item(コピーするシート名).Copy _
after:=Workbooks(コピー先のブック名).Sheets(1)

'ブックを閉じる
Application.DisplayAlerts = False
Workbooks.Item(コピー元のブック名)Close True
Application.DisplayAlerts = True
ここまで////

なのですが、コピーものとのブックが複数ある時、画面がチラチラしてしまいます。ブックをオープンさせずにシートを他ブックにコピーさせる方法ってないでしょうか。
ご存知の方がいらっしゃいましたら、ご教授お願いします。

Aベストアンサー

画面のチラツキを押さえたいだけなら、画面の更新をやめればいいだけじゃないでしょうか?

ブックを開く前に
Application.ScreenUpdating = False
ブック閉じてから
Application.ScreenUpdating = True

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

QEXCEL VBAで計算値を四捨五入、切り上げ、切捨てする方法

ネットで探してみたのですが、計算結果を四捨五入して特定のセルを
返すにはどうしたらいいのでしょうか?

Sub hokangosa()

Dim ZPS As Double
Dim ZPOS As Double
Dim DMN As Double
MsgBox (" >>> 補間誤差自動計算 <<< ")
MsgBox (" >>> 初期値入力します <<< ")
ZPS = InputBox(">>> ステップを入力してください<<<")
ZPOS = Sheet1.Cells(22, 4).Value
DMN = ZPOS / ZPS
Sheet1.Cells(23, 6).Value = DMN
End Sub

ここでDMNの値を四捨五入したいです。

またこれとは別に切上げ、切捨ても教えていただけるとありがたいです。

Aベストアンサー

DMN = Application.WorksheetFunction.Round(ZPOS / ZPS, 0)
で、四捨五入
DMN = Application.RoundDown(ZPOS / ZPS, 0)
で切り捨て
DMN = Application.RoundUp(ZPOS / ZPS, 0)
で切り上げです。

引数で、対象桁を変更できます。

QEXCEL VBAマクロ作成で、他のEXCELからデータを取り込みたい

メインプログラム(EXCEL VBA)より、
他のフォルダーにあるEXCELの項目の内容を取り込みたいです。
たとえば他のフォルダーのEXCELのRange("A2:A3").ValueをメインプログラムのRange("C2:C3").Valueにセットしたい時です。

・コマンドボタン押したら、どこのEXCELから取り込むかのポップアップ(?)は、表示はできてます。
・作業者が選んだパスとブックもMsgBoxで表示できてるので、もらう相手の場所も取得できてます。

・となると次はOPEN,INPUTですか?
テキストデータの取り込みですと、Inputでそのバッファを定義してるのですが、なんか違うような。。。

よろしくお願いします!

Aベストアンサー

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Cells(2, 2).Value ' 相手シートの B2 の値を自分自身の A1 に書き込む

readBook.Close False ' 相手ブックを閉じる
Set readSheet = Nothing
Set readBook = Nothing

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Ce...続きを読む

Qエクセルで別ブックをバックグラウンドでオープンする方法

最初にメニュー画面となるブックを開いた後、データブックをバックグランドのみで開きたいのですが、エクセルVBAで単純にOPENを行うと画面上にデータブックが表示されてしまいます。操作作業者に画面が次々入れ替わることを見せたくないのですが、ブックをバックグラウンドだけで開く方法はあるのでしょうか。VBAについては素人で宜しくお願いします。

Aベストアンサー

ごめんなさい。解決済みと思って見ていませんでした。 まだですか?

後で開いた3つのブックは、VBAで操作しないのですか。
操作するのでしたら、ブックをオブジェクト変数に入れておいた方が操作しやすい
と思うのですが・・・ 一応何処でどのように使うのか判りませんので・・・

こんな感じで如何でしょうか。

ブックを開いてから非表示にするまでの瞬時の画面のことですね。
それなら、その間、ScreenUpdating = False でどうでしょうか。

Public Bk1 As Workbook
Public Bk2 As Workbook
Public Bk3 As Workbook
Dim PathName As String

Sub Auto_Open()
PathName = ThisWorkbook.Sheets("メニュー").Range("C28").Value
ファイル読込 "初期値.xls", Bk1
ファイル読込 "データ1.xls", Bk2
ファイル読込 "データ2.xls", Bk3
End Sub

Sub ファイル読込(BkName, ObjBk)
Application.ScreenUpdating = False
Set ObjBk = Workbooks.Open(Filename:=PathName & "\" & BkName)
Windows(BkName).Visible = False
Application.ScreenUpdating = True
End Sub

ごめんなさい。解決済みと思って見ていませんでした。 まだですか?

後で開いた3つのブックは、VBAで操作しないのですか。
操作するのでしたら、ブックをオブジェクト変数に入れておいた方が操作しやすい
と思うのですが・・・ 一応何処でどのように使うのか判りませんので・・・

こんな感じで如何でしょうか。

ブックを開いてから非表示にするまでの瞬時の画面のことですね。
それなら、その間、ScreenUpdating = False でどうでしょうか。

Public Bk1 As Workbook
Public Bk2 As Workbook
P...続きを読む


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

人気Q&Aランキング