Excel VBA質問箱 IV

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

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


75371 / 76733 ←次へ | 前へ→

【5800】どれほど遅いか試して見ますか
回答  Hirofumi E-MAIL  - 03/5/31(土) 16:58 -

引用なし
パスワード
   どれほど遅いか、試して見ますか?
一度、Excelに読み込んで再度Saveしなおしているのが、1/2、3/8
の処理の為なら、このまま読み込んだだけで言い様な気がしますが?
尚、ダブルクォーツ、カンマの処理はCSVの出力ルールに準拠した積もりです
また、このコードは、アクティブシートのA1から書き出す様にして有りますので
その辺は、変更して下さい

Public Sub CSVRead()

  Dim i As Long
  Dim strData() As String
  Dim dfn As Integer
  Dim strFileName As String
  Dim strBuff As String
  
  'CSVファイル名を設定する
  strFileName = ActiveWorkbook.Path + "\" + "BodyPrice.csv"
  
  dfn = FreeFile
  Open strFileName For Input As dfn
  
  i = 1
  Do Until EOF(dfn)
    Line Input #dfn, strBuff
    SplitLine strBuff, strData()
    With Cells(i, 1)
      Range(.Offset(, 0), .Offset(, UBound(strData))).Value _
                              = strData
    End With
    i = i + 1
  Loop
  
  Close #dfn
  
End Sub

Public Sub SplitLine(ByVal strLine As String, strData() As String, _
          Optional strDelimiter As String = ",", _
          Optional strQuote As String = """", _
          Optional strRet As String = vbCrLf, _
          Optional blnMultiLine As Boolean = False)

'      strLine     :分割元と成る文字列
'      strDelimiter  :区切り文字

  Dim lngDPos As Long
  Dim lngStart As Long
  Dim i As Long
  Dim strField As String
  Dim lngLength As Long
  
  i = 0
  lngStart = 1
  lngLength = Len(strLine)
  blnMultiLine = False
  
  Do
    ReDim Preserve strData(i)
    If Mid(strLine, lngStart, 1) <> strQuote Then
      lngDPos = InStr(lngStart, strLine, strDelimiter, _
                          vbBinaryCompare)
      If lngDPos > 0 Then
        strField = Mid(strLine, lngStart, lngDPos - lngStart)
        lngStart = lngDPos + 1
      Else
        strField = Mid(strLine, lngStart)
        lngStart = lngLength + 1
      End If
    Else
      lngStart = lngStart + 1
      Do
        lngDPos = InStr(lngStart, strLine, strQuote, _
                          vbBinaryCompare)
        If lngDPos > 0 Then
          strField = strField & Mid(strLine, lngStart, _
                          lngDPos - lngStart)
          lngStart = lngDPos + 1
          Select Case Mid(strLine, lngStart, 1)
            Case ""
              Exit Do
            Case strDelimiter
              lngStart = lngStart + 1
              Exit Do
            Case strQuote
              lngStart = lngStart + 1
              strField = strField & strQuote
          End Select
        Else
          blnMultiLine = True
          strField = Mid(strLine, lngStart) & strRet
          lngStart = lngLength + 1
          Exit Do
        End If
      Loop
    End If
    strData(i) = Trim(strField)
    strField = ""
    i = i + 1
  Loop Until lngLength <= lngStart
    
End Sub

0 hits

【5729】CSVのデータ(例3/8)取得方法 こーじ 03/5/28(水) 23:49 質問
【5746】Re:CSVのデータ(例3/8)取得方法 Jaka 03/5/29(木) 13:00 回答
【5796】Re:CSVのデータ(例3/8)取得方法 こーじ 03/5/31(土) 10:00 質問
【5798】Re:CSVのデータ(例3/8)取得方法 よろずや 03/5/31(土) 13:04 回答
【5800】どれほど遅いか試して見ますか Hirofumi 03/5/31(土) 16:58 回答
【5814】Re:CSVのデータ(例3/8)取得方法 こーじ 03/6/2(月) 17:28 お礼
【5815】Re:CSVのデータ(例3/8)取得方法 03/6/2(月) 17:41 回答
【5818】Re:CSVのデータ(例3/8)取得方法 こーじ 03/6/2(月) 18:05 お礼

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