Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


13356 / 13645 ツリー ←次へ | 前へ→

【5751】CSVファイルを開くのに時間がかかりすぎ 123 03/5/29(木) 14:04 質問
【5752】Re:CSVファイルを開くのに時間がかかりすぎ Jaka 03/5/29(木) 14:26 発言
【5754】Re:CSVファイルを開くのに時間がかかりすぎ Jaka 03/5/29(木) 14:58 回答
【5757】Re:CSVファイルを開くのに時間がかかりすぎ 123 03/5/29(木) 15:29 質問
【5760】Re:CSVファイルを開くのに時間がかかりすぎ Jaka 03/5/29(木) 15:46 回答
【5763】ありがとうございました 123 03/5/29(木) 16:01 お礼
【5764】補足です。 Jaka 03/5/29(木) 16:03 回答
【5768】Re:補足です。 NH 03/5/29(木) 17:20 質問
【5770】Re:補足です。 Jaka 03/5/29(木) 17:49 回答
【5773】Re:補足です。 NH 03/5/29(木) 19:33 お礼

【5751】CSVファイルを開くのに時間がかかりすぎ
質問  123  - 03/5/29(木) 14:04 -

引用なし
パスワード
   みなさん こんにちは

現在 UserForm1 から、そのブックがある同じフォルダー内の
CSVファイルを FullNameを使って開こうとしていますが、
通常CSVファイルを開くのと比べ、非常に時間がかかっています。
早く開く方法はあるでしょうか?
CSVファイルのデータは、500行/25列 のものです。

以下は簡略化したものですが、これでも開くが遅いです。


Dim path As String
Dim fname As String
__________________________
Private Sub CommandButton1_Click()

Workbooks.Open Filename:=path & "AAA.csv"

End Sub
___________________________

Private Sub UserForm_Initialize()

path = ThisWorkbook.FullName
fname = ThisWorkbook.Name
path = Left(path, Len(path) - Len(fname)) & "\"

End Sub

【5752】Re:CSVファイルを開くのに時間がかかりすぎ
発言  Jaka  - 03/5/29(木) 14:26 -

引用なし
パスワード
   こんにちは。

コード考える前に
>path = ThisWorkbook.FullName
>path = Left(path, Len(path) - Len(fname)) & "\"

pathは、下のように使ったりする予約語ですから、変数名にするのは止めましょう。
って前にも書いたような気がしますけど...。
頭を小文字にしてもダメです。

MsgBox ThisWorkbook.Path

因にWorkbooks.Open で、CSVファイルを開くのはメチャクチャ遅いです。

【5754】Re:CSVファイルを開くのに時間がかかりすぎ
回答  Jaka  - 03/5/29(木) 14:58 -

引用なし
パスワード
   500行25列でしたよね!
これじゃだめですか?遅い?

Private Sub CommandButton1_Click()()
  Dim ReadTb() As Variant, fname As String, i As Long
  Dim R As Long
  fname = ThisWorkbook.Path & "\" & "AAA.csv"
  If Dir(fname) = "" Then Exit Sub
  Open fname For Input As #1
  i = 0
  Do Until EOF(1)
    ReDim ReadTb(1 To 1, 1 To 25)
    For R = 1 To 25
      Input #1, ReadTb(1, R)
    Next
    i = i + 1
    Range("A" & i).Resize(, 25).Value = ReadTb
  Loop
  Close #1
  Erase ReadTb
End Sub

【5757】Re:CSVファイルを開くのに時間がかかりすぎ
質問  123  - 03/5/29(木) 15:29 -

引用なし
パスワード
   ▼Jaka さん こんにちは

いつもありがとうございます。

Inputは勉強不足で敬遠してました。
これからは ちゃんと勉強します。

ところで、jakaさんのコードをそのまま転記
してやってみましたら、早いこと早いこと
感動しちゃいました。

しかしながら、ひとつ教えてください。
データの中に「1.02」等 小数点のデータがあります。
これが、結果「$1.02」となってしまいます。

データは全て文字列で取得したいのですが、
元データ通り「1.02」として取得することはできるでしょうか?

度々すみません。

【5760】Re:CSVファイルを開くのに時間がかかりすぎ
回答  Jaka  - 03/5/29(木) 15:46 -

引用なし
パスワード
   >データは全て文字列で取得したいのですが、
>元データ通り「1.02」として取得することはできるでしょうか?

全部文字列としてで良いのなら
(注)書式を変えていない場合、セルをWクリックしたりすると数字に変換されちゃいます。

ReadTb() As Variant
 ↓
ReadTb() As String

【5763】ありがとうございました
お礼  123  - 03/5/29(木) 16:01 -

引用なし
パスワード
   ▼Jaka さん:
ありがとうございました。

何か基本的なことを質問してしまって....はずかしっ

コマンドボタンを押して、離すより先に
読み込んでるみたいに早いです。

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

それと、path などを変数に使用しないようにというご注意
を以前頂いておりました。意識が薄れてきていました。注意します。

【5764】補足です。
回答  Jaka  - 03/5/29(木) 16:03 -

引用なし
パスワード
   CSVファイルの方の少数のデータを"1.02"と"で囲んでやればReadTb() As Variantだとちゃんと数字として読み込まれます。
1.02が\1.02とかなっちゃうのは、エクセルのバグみたいですね。
因に97だと$ではなく\でした。

【5768】Re:補足です。
質問  NH  - 03/5/29(木) 17:20 -

引用なし
パスワード
   ▼Jaka さん:

横から質問ですいません。CSVファイルを開くときに前もってどの行が
文字か数値か判っていたらそれを指定する…というのがあったと思うの
ですが、どうするんでしたっけ?

【5770】Re:補足です。
回答  Jaka  - 03/5/29(木) 17:49 -

引用なし
パスワード
   すみません。
単純にCSVファイルを開くで、読み込み形式を指定する方法はわかりません。

textなら指定できますが.....。
2000以上だとクエリの読み込みでも指定できます。
クエリだとこんな感じだったです。97不可なので今のでは試せませんが..。

Sub Macro2()
  With Selection.QueryTable
    .Connection = "TEXT;C:\My Documents\データ類\郵政省郵便番号\15項目5000.txt"
    .TextFilePlatform = xlWindows
    .TextFileStartRow = 1
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = False
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = True
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
    .Refresh BackgroundQuery:=False
  End With
End Sub

で、txstを独断と偏見でオールマイティ化させようとしたのが
[#5244]

【5773】Re:補足です。
お礼  NH  - 03/5/29(木) 19:33 -

引用なし
パスワード
   ▼Jaka さん:

有り難うございます。また勉強してみます。

13356 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free