ファイルオープンの速度を速くするには?

このQ&Aのポイント
  • ファイルオープンの速度を高速化する方法を教えてください。
  • Excelツールバーの”開く”でabc.csvを選択すると、時間がかかります。
  • 速度を早くする方法を教えて頂けないでしょうか。
回答を見る
  • ベストアンサー

ファイルオープンの速度を速くするには?

よろしくお願いします。 下記コードでabc.csvを選択すると、Excelツールバーの”開く”で行う場合よりかなり時間がかかります。速度を早くする方法を教えて頂けないでしょうか。 Option Explicit Option Compare Text Sub Start_Click() Dim Fname As String Dim MBErr As Integer MsgBox "abc.csv を選択して下さい" Start: Fname = Application.GetOpenFilename("CSVファイル,*.csv") If Not Right(Fname, 7) = "abc.csv" Then   MBErr = MsgBox("ファイル名が違うか、ファイルが選択されていません" _          & Chr(13) & Chr(13) & "abc.csv を選択して下さい", 21)   If MBErr = 4 Then     GoTo Start   Else     Exit Sub   End If End If Workbooks.Open Fname End Sub

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

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

こんばんは。 「abc.csv を選択して下さい。」となっているなら、そのまま、ファイルの存在を、Dir で調べて、インポートすればよいのではないでしょうか?人間がいちいち選択する必要はないような気がしています。abc.csv ファイルがなければない、あれば、そのまま実行というわけにはいかないのでしょうか? それに、 Workbooks.Open Fname そのまま使っていますね。Excelに判断させるよりも、自分で、csv を「,」で切り分けて、セルに貼り付けたほうが速いのではないでしょうか?サンプルコードは、ここのカテゴリでも出てくるはずです。  FNo = FreeFile()  Open Fname For Input As #FNo  で、テキスト行を呼び出し、Split(TextLine,",") で配列にして、そのまま、セルに貼り付ければ速いはずです。

sonans
質問者

お礼

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

関連するQ&A

  • VBAで同名ファイルの有無を確認させる方法は?

    AccessにてCSVファイルをインポートしたあと、所定の場所にインポート済みファイルを移動させる処理をさせています。 インポート済みのファイルと同じ名前のファイル(このファイルはyyyymmdd.csvと日付を基にしたファイル名称になっています)を取り込もうとしたときに、メッセージボックスを表示させて処理を続行するかどうか問わせたいと考えています。 下記のようにVBAを記述してみたのですが、メッセージボックスは表示されず、インポート処理されてしまいます。 If strFile = strImportedFile Then という、条件がまずいのではないかと思っているのですが、目的に適した記述が思いつきません。 どのような記述がふさわしいでしょうか? ~~~現在の記述~~~ Dim strFile As String Dim strPath As String Dim strImportedFile As String strPath = CurrentProject.Path & "\インポート\" strFile = Dir(strPath & "*.csv") strImportedFile = strPath & "インポート済\" & strFile If strFile = strImportedFile Then MsgBox "すでに処理済の日付のファイルです。" & (Chr(13) & Chr(10)) & "続けますか?", vbOKCancel Exit Sub Else Kill strImportedFile End If DoCmd.SetWarnings False '受け皿になるテーブルをクリアーしてインポート If strFile <> "" Then DoCmd.RunSQL "DELETE * FROM tbl_import" DoCmd.TransferText acImportDelim, "インポート定義", "tbl_import", strPath & strFile, True Name strPath & strFile As strPath & "インポート済\" & strFile End If DoCmd.SetWarnings True '取り込むべき売上ファイルがない場合のためのアラート表示 If strFile = "" Then MsgBox "CSVファイルがありません。" & (Chr(13) & Chr(10)) & "処理を中止します", vbOKOnly Else Exit Sub End If End Sub

  • 特定の列・行をテキストファイルに保存させたい

    VB6.0とSPREAD6.0で スプレッドシート内のデータをCSVファイル化させるプログラムを組んでいます Private Sub Command1_Click()   Dim blnCHECK As Boolean   Dim strMsg As String   Dim strDate As String   Dim lngResponse As Long   Dim ret As Boolean   strDate = Format(Now(), "yyyymmddhhmmss") 'ファイル名   With spdTarget 'スプレッドシート     .Row = 1     While .Row <= .MaxRows       .Col = LNG_SPD_COL_CHECK 'チェックボックス       If .Value <> 0 Then         blnCHECK = True         strMsg = "選択データをファイル作成しますか?"         lngResponse = MsgBox(strMsg, vbQuestion + vbYesNo, "Exit Dialog")         If lngResponse = vbYes Then           ret = spdTarget.ExportToTextFile _           ("C:\Documents and Settings\ファイル作成先\" & strDate & ".csv", "", _           ",", Chr(13), ExportToTextFileColHeaders + _           ExportToTextFileCreateNewFile, _           "C:\Documents and Settings\ファイル作成先\" & strDate & ".log")         Else           Exit Sub         End If       End If     .Row = .Row + 1     Wend   End With   If blnCHECK = False Then     MsgBox "作成対象データを選んで下さい", vbExclamation   End If End Sub 上記のコードだと表内の全てのデータをCSVファイル化させる事はできるのですが 特定の行(1列目のチェックボックスで指定)や特定の列のみを選択してファイル化させる といった動きにさせるには、どうしたら良いのでしょうか?

  • Excel VBA 違うxlsファイルの指定したシートを開く処理

    Excel VBAで違うExcelファイルの指定したシートを開きたいのですが、 うまくいきません。現在のコードは、 *フォーム* Private Sub CB1_Click() Dim A As Integer A = MsgBox("データ展開する?", 4, "データ展開?") If A = 6 Then INPORT.FILE_OPEN1 End If End Sub *INPORTモジュール* Sub FILE_OPEN1()  FILE_OPEN8 End Sub Sub FILE_OPEN8() Dim fnames As String fnames = fnames1 Workbooks.Open Filename:=fnames ***ここでしょうか?.Sheet("")と指定しても出来ません*** End Sub Function fnames1() As Variant fnames1 = Application.GetOpenFilename( _ Title:="ファイルを開く", _ FILEFILTER:="エクセルファイル (*.xls), *.xls") If fnames1 = False Then MsgBox ("ファイルを開けませんでした。" & Chr$(13) & _ "もう一度やり直して下さい。") End End If End Function また、指定する事が出来たら、選択したシートを現在のブックにコピーもしたいのですが、どの様にすればよいでしょうか? よろしくお願いします。

  • ダイアログボックスからフォルダ名を取得し、フォルダ内のCSVファイルを

    ダイアログボックスからフォルダ名を取得し、フォルダ内のCSVファイルをすべてアクセスのテーブルにインポート使用と思っています。 ところがCSVファイルの数の分だけ、1つめのCSVファイルの中身が繰り返しインポートされてしまっています。 どの部分に誤りがあるのでしょうか? お知恵を拝借できますでしょうか・・・。 コードは以下になります。 Private Sub cmd06_Click() Dim MyFile As String Dim MyName As String Dim MyName02 As String Dim strFolderName As String strFolderName = GetFolderName() 'フォルダ選択ダイアログを表示 If Len(strFolderName) > 0 Then '選択結果を評価 MyFile = strFolderName & "\*.csv" '【拡張子csvのファイルのみ取得】 MyName = Dir(MyFile, vbNormal) MyName02 = "\" & MyName Do While MyName <> "" If MyName <> "." And MyName <> ".." Then If GetAttr(strFolderName & "\" & MyName) <> vbDirectory Then DoCmd.TransferText acImportFixed, "T03_インポート定義", "T03_全CSVデータ", strFolderName & MyName02, False, "" '【取得したファイルをインポート】 End If End If MyName = Dir Loop Else MsgBox "フォルダは選択されませんでした" End If MsgBox "データのインポートが終了しました" End Sub

  • プログラムのイベント処理中断方法

    VB2008のイベンド中止処理についてお教え頂けませんでしょうか。 Formにボタンが1つあり、クリックするとCSVファイルが出力される処理をしたいです。 やりたい処理: 1. 「CSVファイル出力しますか?」というメッセージを出す。YESなら処理続行。Noなら処理中止。 2. CSVファイル出力処理。 3. 「CSVファイルを出力しました。」 (プログラム自体を終了したいわけではありません) VBAだと下記のようなコードを書きたいです。 Sub テスト() Dim ans As Integer ans = MsgBox("CSVファイル出力しますか?", vbYesNo, "テスト") If ans = vbNo Then end end if 'CSV出力処理~~~ end sub VBにendというステートメントがあれば、良いのですが無さそうです・・・ 何か上手な処理はあるでしょうか?VBAのコードになってしまいますが、下記のような処理方法しかないでしょうか? '''''''''''''''''1 Sub テスト() Dim ans As Integer ans = MsgBox("CSVファイル出力しますか?", vbYesNo, "テスト") If ans = vbNo Then end else 'CSV出力処理~~~ end if end sub ''''''''''''''''2 Sub テスト() Dim ans As Integer ans = MsgBox("CSVファイル出力しますか?", vbYesNo, "テスト") If ans = vbNo Then goto here end if 'CSV出力処理~~~ here: end sub

  • VBA:カウンターの i の値が開放されなくて困っています。

    以下のコードを実行する度に、カウンター i の値がリセット(開放)されずに積算されて困っています。なぜか教えて下さい。宜しくお願い致します。 以下のコードは、簡単に言えばcsvファイルをカウンター i で数えています。したがって、少なくともCSVファイルを一つ作成して実行して下さい。 Option Explicit Dim FiName As String, FoName As String Dim EachFiName As String Dim i As Integer Sub Test() MsgBox i '二回目にこのコードを実行するとiが積算されます。 FiName = Application.GetOpenFilename If FiName = "False" Then Exit Sub Else If Right(FiName, 3) <> "csv" Then MsgBox "Chose a CSV file." Exit Sub End If End If FoName = Left(FiName, InStrRev(FiName, "\", -1, vbTextCompare)) EachFiName = Dir(FoName & "*.csv") Do While EachFiName <> "" i = i + 1 EachFiName = Dir() Loop End Sub

  • エクセルにて保存時に同名のファイル名は実行拒否する

    今エクセルで、名前を付けて保存のマクロを作っています。 同ファイル名の物が同じフォルダ内にあれば上書きできますが、強制的に上書きできない様にする方法ってありますか? マクロをかじって間もないので、考え方もイマイチな状態で、困っております。 ご教示宜しくお願い致します。 Sub AAA() Dim fname As String fname = Application.Dialogs(xlDialogSaveAs).Show If fname = "False" Then MsgBox "キャンセルが押されました。処理を中止します" Exit Sub End If End sub

  • エクセルのシートのデータをVBAを使ってCVS形式で保存したいのですが、文字化けしないようにするにはどうしたらいいでしょうか?

    エクセルのシートのデータをVBAを使ってCVS形式で保存したいのですが、文字化けしてしまいます。手動で「名前を付けて保存」すると文字化けしません。文字化けしないようにするにはどうしたらいいでしょうか? どなたかお教えいただきたく、よろしくお願いします。 ---------------------------------------------------------------------- Sub test5() Dim aaa As String Dim fname As Variant aaa = Format(Now, "YYMMDD") fname = Application.GetSaveAsFilename(InitialFileName:=aaa & ".csv", fileFilter:="csvファイル(*.csv), *.csv") If fname = False Then Exit Sub '保存 Worksheets("sheet1").SaveAs fname End Sub

  • ファイル名がテキストボックスにうまく表示できない

    お世話になります。 filelistboxで選択したファイル名を選択した順に テキストボックスに表示させたいのですが、ファイル名の 後に改行コードを入れても改行して表示してくれません。 何が原因なんでしょうか?よろしく御教授願います。 例 aaa.txtを選択、テキストボックスに表示させ、 その後bbb.txtを選択するとテキストボックスの表示が ”aaa.txt‥bbb.txt”となる --------- aaa.txt(改行) bbb.txt --------- と表示したい。 (コード) Dim fname As String Private Sub File1_Click() fname = Dir1.Path & "\" & File1.FileName End Sub Private Sub Command3_Click() Call macappend End Sub Private Sub macappend() 'text1に選択マクロを追加    Dim macbuff1 As String    Dim macbuff2 As String    macbuff2 = Text1.Text    macbuff1 = fname + Chr(13) + Chr(11)    macbuff2 = macbuff2 + macbuff1    Text1.Text = macbuff2 End Sub

  • CSVから構造体へ代入

    お世話になります。 Private Type TestRecord Col1 As String * 255 Col2 As String * 255 Col3 As String * 255 End Type Sub ボタン1_Click() Dim FName As String Dim FileNo As Integer Dim LineData As String Dim TestRec() As TestRecord FileNo = FreeFile '選択したファイル名の取得 FName = Application.GetOpenFilename("CSV ファイル (*.CSV),*.CSV") If FName = "False" Then Exit Sub End If Open FName For Input As #FileNo Do Until EOF(FileNo) i = i + 1 Line Input #FileNo, LineData ReDim TestRec(i) TestRec() = Split(LineData, ",") Debug.Print buf Loop Close #FileNo End Sub ファイルの中身 "テストID1","テスト姓1","テスト名1" "テストID2","テスト姓2","テスト名2" 以上のコードを実行するとTestRec() =~の部分で型が一致しません とエラーが出てしまいます。 よき解決方法があれば教えてください。宜しくお願いします。

専門家に質問してみよう