ExcelのマクロでCSVファイルを開くと遅いのですが速く開く方法はありますか?
普通にファイル-開くに比べてかなり遅いです。

下記のVBAで記述してあります。
Workbooks.Open Filename:=fname
ActiveWorkbook.SaveAs Filename:=fname, FileFormat:=xlCSV, _
CreateBackup:=False
ActiveWorkbook.Close savechanges:=False

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

A 回答 (2件)

fnameにパス+ファイル名を入力しておいて開くのですよね。


CSVファイルを開くだけなら、1行目の記述だけで開けます。
このVBAでは、その後ファイルをセーブしてクローズしてます。
このセーブ、クローズの作業分遅いのではないでしょうか?

この回答への補足

実は、DBFファイルをExcelで開いてfname(CSVファイル)で保存しています。
それで2,3行目が記述してあります。
4種類のDBFファイルで4種類のCSVファイルを作るマクロにしてあります。
遅いのは1行目だと思うのですが・・・

補足日時:2001/01/16 15:50
    • good
    • 0

DBFファイルを開いてCSVでセーブしているのですか。


済みません、DBFファイルは扱った事が無いのでよく分かりません。
CSVファイルを開く限りに於いては、マクロもファイル開くも変わらないという印象ですが...

マクロの記録を有りにして、”普通にファイル-開く”を行い、生成されたVBAを比較してみては如何でしょうか?
    • good
    • 0

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

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

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

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

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

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

Aベストアンサー

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

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

QエクセルVBA 大容量CSVファイルの読み込みが遅い

800万行、1.4GBのCSVファイルをLineにより100万行ずつシートに読み込み、処理してます。
100万行読み込み
コンマを区切り文字にして展開
データ処理
次の100万行読み込み
の手順です。

出だしは快調で1シート20秒程度で読み込みます。ところが、シートを重ねるごとにだんだん遅くなり、1シート5分、最後の方はメモリーオーバーでエラーとなり、最後まで行き着いてません。ウインドウ下枠に表示される「フィル」で時間がかかります。その後で表示される「区切り位置」以降、データ処理は普通です。おそらくLineによる読み込みで時間がかかっていると思います。なぜでしょうか?どうすればいいでしょうか?

エラー位置はDoの3行下です。
Sub Macro1()

Dim vFile As Variant
Dim WSdata As Worksheet
Dim ffn As Long
Dim vA() As Variant
Dim j As Long, k As Long

Const Half As Long = 500000 ' 1回の書き出し行数
Const CROWSZ As Long = 1000000 '1シートへの書き出し数
vFile = ThisWorkbook.Path & "\CSVconverted.CSV"

ReDim vA(1 To UnitRead, 1 To 1)

'100万行を入力するワークシート
Set WSdata = ThisWorkbook.Worksheets("CSV")

'CSVファイルを開く
ffn = FreeFile()
Open vFile For Input As #ffn

j = 1
k = 1
Do
Line Input #ffn, vA(j, 1)   '1行ずつ読み込み
If j >= Half Or EOF(ffn) Then
WSdata.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).Resize(UBound(vA), 1).Value = vA 'ここで止まる。vAにマウスを当てると「メモリーオーバー」と表示
ReDim vA(1 To UnitRead, 1 To 1)
j = 0

If k >= CROWSZ Or EOF(ffn) Then
      'コンマを区切り文字にして展開
With WSdata.Range(WSdata.Cells(2, "A"), WSdata.Cells(Rows.Count, "A").End(xlUp))
Application.DisplayAlerts = False
.TextToColumns .Cells(1), xlDelimited, Comma:=True
Application.DisplayAlerts = True
End With
k = 0


'データ処理がここに記載


WSdata.Cells.ClearContents
End If
End If
j = j + 1
k = k + 1
Loop While Not EOF(ffn)
Close #ffn 'CSV閉じる

End Sub

800万行、1.4GBのCSVファイルをLineにより100万行ずつシートに読み込み、処理してます。
100万行読み込み
コンマを区切り文字にして展開
データ処理
次の100万行読み込み
の手順です。

出だしは快調で1シート20秒程度で読み込みます。ところが、シートを重ねるごとにだんだん遅くなり、1シート5分、最後の方はメモリーオーバーでエラーとなり、最後まで行き着いてません。ウインドウ下枠に表示される「フィル」で時間がかかります。その後で表示される「区切り位置」以降、データ処理は普通です。おそら...続きを読む

Aベストアンサー

No.4ママチャリです。
まず①の件ですが、確かに Office 2013 and later となっていますね。でも、私の環境もExcel2010ですが、ヘルプにも掲載されているし、実際、StartRowで指定した行から読み込めています。各種ホームページを見ても2013より前のバージョンでも話題になっているので、問題ないと思います。

②の方ですが、OverTheGalaxyさんが書いたコード(Workbooks.OpenText Filename:=vFile, DataType:=xlDelimited, startrow:=ReadRow, comma:=True)を実際に動かしたところ、正常に動きました。確かにstartrowは大文字になりませんでしたが・・・。

試しに、[ファイル]ー[開く]の手順をマクロに記録し、それをベースに実験してみてはいかがでしょうか。各種HPを見ていて、「省略可能なパラメータと書いてあるくせに、省略したら問題が発生した」みたいな記事がありましたので・・・。

マクロを記録する際、列数が多いと FieldInfo パラメータがあふれることがあります。ただ、形式を指定する必要がなければ、不要なものなので捨てちゃってOKです。

では、ご検討をお祈りします。
それにしても、同じ環境(2010ではやっていないのでしたっけ?)で動作が異なるとは、Micr●s●ftらしいですね。

No.4ママチャリです。
まず①の件ですが、確かに Office 2013 and later となっていますね。でも、私の環境もExcel2010ですが、ヘルプにも掲載されているし、実際、StartRowで指定した行から読み込めています。各種ホームページを見ても2013より前のバージョンでも話題になっているので、問題ないと思います。

②の方ですが、OverTheGalaxyさんが書いたコード(Workbooks.OpenText Filename:=vFile, DataType:=xlDelimited, startrow:=ReadRow, comma:=True)を実際に動かしたところ、正常に動きました。確かにstar...続きを読む

Qエクセル CSVについて

エクセルCSVについての質問です。
約40MBぐらいあるCSVファイルをひらきたいんですが、
開くのに所要時間はどれぐらいかかりますか?
OSはXPです。なかなか開くことができないので、
OSの容量がたりないのか、CSVが壊れているのか、
しりたく質問しました。
回答お願いします。

Aベストアンサー

ako_125さん 今日は!
>約40MBぐらいあるCSVファイルをひらきたいんですが、開くのに所要>時間はどれぐらいかかりますか?
時間は一概には言えません。こごのパソコン環境により異なります。
CPUのクロックタイム・搭載メモリ容量・スタートメニュー数などです。
1番効果の有るのは搭載メモリを1GB以上にする事です。
面白い記事が有りました。
■Excel の起動が遅くなった場合の対処法↓
http://d.hatena.ne.jp/fyts/20080128/excel
概要:この Tips では、 Excel の起動が遅くなった場合の対処法について説明します。 Excel の起動が遅い人や、急に遅くなった人は試してみる価値があると思います。 Microsoft Office Excel 2000, XP, 2003, 2007 など、どのバージョンでも有効です。
■Excelが遅い!? スピードアップのための裏技紹介!↓
http://www.yoshikawa.co.jp/ybs/skilup/ybs2003.htm
内容:Outlookの履歴が設定されている→1. Outlookを起動する。(スタートボタン→プログラム→Microsoft Outlook)
2. ツール→オプション→履歴
3. 「履歴を自動記録するアプリケーション」のチェックを外す。
この機能が必要でない場合は、すべてのチェックを外しても問題ないと思います。
4. 「適用」・「OK」ボタンをクリックします。
■Excelの起動・実行が極端に遅い場合の対処方法↓
http://www2-eiyo.a.shikoku-u.ac.jp/eiyokun/eiyoteisei/Excel.htm
内容:Excel等を多用していると起動・実行が極端に遅くなる原因は、emfファイル(一時ファイル)が増えたことによることがあります。
以下の操作手順に従いファイル(一時ファイルemf)を削除すると改善される。
●エクスプローラからファイルをダブルクリックで開くと起動が遅い↓
http://support.microsoft.com/kb/436048/ja
概要:この資料は、エクスプローラから Word、Excel のファイルをダブルクリックで開く場合、起動時間が約 30 秒かかる現象について説明しています。...この資料は、エクスプローラから Word、Excel のファイルをダブルクリックで開く場合、起動時間が約 30 秒かかる現象について説明しています。
■CSVファイルを高速に読み込む(Excel 97/2000)↓
http://www.moug.net/tech/exopr/0060017.htm
内容:操作手順
対象のCSVファイルの拡張子を「.txt」や「.dat」などに変更します。
※[ファイルを開く]ダイアログにて、対象のCSVファイルを右クリック、ショートカットメニューから[名前の変更(M)]を選択して変更する、というのが、手っ取り早いでしょう。元のCSVファイルをそのままにしておきたい場合には、ファイルをコピーして、コピーしたファイルの名前を変更してください。なお、上記のように操作する際には、[ファイルを開く]ダイアログの[ファイルの種類(T)]ボックスは、[すべてのファイル(*.*)]にしておくとよいでしょう。
拡張子を変更したファイルを、Excelで開きます。すると、[テキストファイルウィザード]が表示されます。CSVファイルをそのまま選択した際には、このウィザードは決して表示されません。
元のデータの形式を、[カンマやタブなどの区切り文字によってフィールドごとに区切られたデータ(D)]に設定し、[OK]を押す。
列を区切る区切り文字を設定し、[OK]を押す。CSVファイルの場合には、当然、カンマ(C)にチェックを入れます。
次に、[列のデータ形式]を、列ごとに設定していきます。ここでは、全ての列のデータ形式を[文字列(T)]に設定してください。設定が終わったら、[完了(F)]ボタンを押します。
■Notepadのデータをエクセルで表示させる方法について↓
http://www.katch.ne.jp/~kiyopon/situmon/kaitou/index01.htm
「ファイル」「開く」から、「ファイルの種類」で「全てのファイル」または「テキストファイル」に変更し、Notepadのデータを開き、「テキストファイルウィザード-1/3」から、「元のデータの形式」で、「カンマやタブなどの区切り文字によってフィールドごとに区切られたデータ」のラジオボタンを押して、「区切り文字」「カンマ」にチェツクを入れ、「次へ」ボタンを押します(この操作をすると、次回から「ファイル」「開く」の場合に「ファイルの種類」が「全てのファイル」または「テキストファイル」に変更されますので、「全てのExcelファイル」にして「キャンセル」ボタンを押してください。)
あるいは、Notepadのデータをシートに貼り付けた状態から、「データ」「区切り位置」で、「元のデータの形式」で、「カンマやタブなどの区切り文字によってフィールドごとに区切られたデータ」のラジオボタンを押して、「区切り文字」「カンマ」にチェツクを入れ「次へ」ボタンを押します。
こうすると直接Excelで読み込む依り早くなります。
この方法ですとCVSファイルが破損しているかも判ります。
何れにせよ10分以上掛かる場合は何か対策を取る必要が有りますね。
参考になれば幸いです。

ako_125さん 今日は!
>約40MBぐらいあるCSVファイルをひらきたいんですが、開くのに所要>時間はどれぐらいかかりますか?
時間は一概には言えません。こごのパソコン環境により異なります。
CPUのクロックタイム・搭載メモリ容量・スタートメニュー数などです。
1番効果の有るのは搭載メモリを1GB以上にする事です。
面白い記事が有りました。
■Excel の起動が遅くなった場合の対処法↓
http://d.hatena.ne.jp/fyts/20080128/excel
概要:この Tips では、 Excel の起動が遅くなった場合の対処法につ...続きを読む

Qエクセル(VBA)にて、CSVファイルを自動的に読み込むマクロ。

aaa.csvというcsvファイルがあるとします。
そこで、
エクセルのあるシートにボタンを用意して、マクロを登録し、そのボタンを押すと、sheetという名前のシートへ一発入力(インポート)するようにしたいのです。

マクロをいじったりしましたが、だめです。
よろしければ、上記のような動作をするためのソースを簡単に提供いただけないでしょうか?
*マクロの記録は使いたくないです・・・。

すみませんが、よろしくお願いいたします。

Aベストアンサー

Workbooks.Open Filename:="aaa.csv"
LastRow = Range("A65536").End(xlUp).Row
Range("A1:I" & CStr(LastRow)).Select
Selection.Copy Destination:=Workbooks("aaa.xls").Worksheets("sheet").Range("A1")
ActiveWindow.Close

2行目は、csvファイルの最後の行番号を取得しています。
3行目ですが、列がI列まであるときの例です。

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エクセル(マクロ)のファイルを開くのに時間がかかる

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

上記の環境です。

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

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

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

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

Aベストアンサー

エクセルで、開くのに時間のかかるファイルがあります。
http://oshiete1.goo.ne.jp/qa763468.html

その他、アクセサリのディスククリーンアップで、一時ファイルを削除してみるとか。
 

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エクセルVBAでクリップボード内容をクリア

こんにちは。
エクセルのVBAの処理の中で、ある部分をコピーしてそれを、
貼り付けする処理をしています。
処理終了後、ファイルを閉じるときに、クリップボードに
コピーの内容が残っている旨のメッセージがでてきます。
このメッセージを出さない様に、クリップボードの内容を
クリアするにはどのようにすればよろしいでしょうか?
申し訳ありませんが、お教え頂きますようお願いいたします。

Aベストアンサー

Excel.Application.CutCopyMode = False
Workbooks(fName).Close savechanges:=False

かな。1行目だけでいいかも。

QVBAで自身のファイル名を取得する方法

Excelファイル自身が存在するディレクトリはCurDirで取得できました。しかし、Excelファイル自身のファイル名がある場所がわかりません。どうしたらよいでしょうか。

Aベストアンサー

ThisWorkbook.Name では

QExcel VBAの SUM関数について質問です。

Excel VBAの SUM関数について質問です。

SUM関数で合計の値を出す場合、

SUM(A1:A5)という関数で合計を出しますが

SUM(sheet2.cells(1,1),sheet2.cells(5,1))
と言ったようにCellsで指定はできないのでしょうか?

複数の列にVBAのプログラムで合計の値を出したいのです。

WorksheetFunction.SumではSUM(A1:A5)のように
自動計算にならないと思うので・・・

Aベストアンサー

例えば、Sheet2のA6セルに質問の数式を入力するのであれば次のようにします。
Worksheets("Sheet2").Cells(6, 1).Formula = "=SUM(" & Cells(1, 1).Address & ":" & Cells(5, 1).Address & ")"

Sheet1のような別シートのA1セルに質問の数式を入力するのであれば次のようにします。
Worksheets("Sheet1").Cells(1, 1).Formula = "=SUM(Sheet2!" & Cells(1, 1).Address & ":" & Cells(5, 1).Address & ")"


人気Q&Aランキング