| 
    
     |  | 以下のプロシージャを前のコードと同じ標準モジュールに入れて下さい そして、「Public Sub CSVRead()」の中の以下を変更して下さい
 
 If strBuff <> "" Then
 'CSVをフィールドに分割
 '            vntField = Split(strBuff, ",")
 vntField = SplitCsv(strBuff, ",") '★変更
 '指定シートの指定行列位置について
 
 此れで、Split関数では無く、CSV読み込み専用のFunctionプロシージャが使われますので、
 数値として扱われます
 
 Private Function SplitCsv(ByVal strLine As String, _
 Optional strDelimiter As String = ",", _
 Optional strQuote As String = """", _
 Optional strRet As String = vbCrLf, _
 Optional blnMulti As Boolean) As Variant
 
 '      strLine     :分割元と成る文字列
 '      strDelimiter  :区切り文字
 '      SplitCsv    :戻り値、切り出された文字配列
 
 Dim lngDPos As Long
 Dim vntData() As Variant
 Dim lngStart As Long
 Dim i As Long
 Dim vntField As Variant
 Dim lngLength As Long
 
 i = 0
 lngStart = 1
 lngLength = Len(strLine)
 blnMulti = False
 Do
 ReDim Preserve vntData(i)
 If Mid$(strLine, lngStart, 1) <> strQuote Then
 lngDPos = InStr(lngStart, strLine, _
 strDelimiter, vbBinaryCompare)
 If lngDPos > 0 Then
 vntField = Mid$(strLine, lngStart, _
 lngDPos - lngStart)
 If lngDPos = lngLength Then
 ReDim Preserve vntData(i + 1)
 End If
 lngStart = lngDPos + 1
 Else
 vntField = Mid$(strLine, lngStart)
 lngStart = lngLength + 1
 End If
 Else
 lngStart = lngStart + 1
 Do
 lngDPos = InStr(lngStart, strLine, _
 strQuote, vbBinaryCompare)
 If lngDPos > 0 Then
 vntField = vntField & 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
 vntField = vntField & strQuote
 End Select
 Else
 blnMulti = True
 vntField = Mid$(strLine, lngStart) & strRet
 lngStart = lngLength + 1
 Exit Do
 End If
 Loop
 End If
 vntData(i) = vntField
 vntField = Empty
 i = i + 1
 Loop Until lngLength < lngStart
 
 SplitCsv = vntData()
 
 End Function
 
 
 |  |