|
こんにちは。
テキストオープンにちょっとバグみたいなのがあったんで、修正しておきました。
(私が気づかないだけで、他にもあるかもしんないけど...。)
テキストデータの最後が数字じゃないと実行エラーになる、バグ??。
例えば
ああああ,いいいい,うううう
かかかか,きききき,くくくく
↑
ここ
ああああ,いいいい,"うううう"
とか、
ああああ,いいいい,12345
のだったら問題は無いんだけど..。
私の言い分としては、文字列は""でくくっとけ、ってことでした。
それと、\、$にも対応させたんだけど、2000にはバグがあって、2000SR-1では$が\に勝手に変えられちゃいます。
ただの2000だと、逆だっだと様な...。
97SR-2では、ちゃんと読み込まれます。
エクセル2000での¥$のバグの多さは、日本たたき?
自己満足と言う事で載せました。
Sub TE71()
Dim ReadData As String, myFieldInfo(), I As Long, CNT As Integer
Dim OpenFile As String, CommaCnt As Integer, WQoFlg As Integer
Dim FTypTB() As Integer, MojFlg As Integer
Dim StMsg As String, FieldData As String
OpenFile = Application.GetOpenFilename("ファイル (*.txt), *.txt")
If OpenFile = "False" Then
End
End If
STime = Now()
Open OpenFile For Input As #1
Line Input #1, ReadData
Close #1
CNT = 0: WQoFlg = 0: MojFlg = 0: FieldData = Empty
For I = 1 To Len(ReadData)
If Mid(ReadData, I, 1) = "," And (WQoFlg = 0 Or WQoFlg = 2) Then
CNT = CNT + 1
CommaCnt = CommaCnt + 1
ReDim Preserve FTypTB(1 To CNT)
If (MojFlg = 0 And WQoFlg = 0 Or (IsNumeric(FieldData) = True And _
(InStr(1, FieldData, "-") > 0 Or InStr(1, FieldData, ",") > 0))) Or _
(Left(FieldData, 1) = "\" Or Left(FieldData, 1) = "$") And _
IsNumeric(Mid(FieldData, 2)) Then
FTypTB(CNT) = 1
'↑ ExcelVBAのバグのため\記号は、文字として扱われる為、無意味だけど一応入れる。by2000SR1
'注)$は、\に変換されてしまう。手動にて文字形式の変更が必要。by2000SR1
Else
FTypTB(CNT) = 2
End If
FieldData = Empty
MojFlg = 0
WQoFlg = 0
ElseIf Mid(ReadData, I, 1) = Chr(34) And WQoFlg = 0 Then
WQoFlg = 1
ElseIf Mid(ReadData, I, 1) = Chr(34) And WQoFlg = 1 Then
WQoFlg = 2
If I = Len(ReadData) Then
CNT = CNT + 1
ReDim Preserve FTypTB(1 To CNT)
FTypTB(CNT) = 2
End If
ElseIf Mid(ReadData, I, 1) = "," And WQoFlg = 2 Then
WQoFlg = 0
MojFlg = 0
CommaCnt = CommaCnt + 1
ElseIf IsNumeric(Mid(ReadData, I, 1)) = False Then
MojFlg = 1
FieldData = FieldData & Mid(ReadData, I, 1)
'ここ、最後の文字が数字意外だとエラーになるのを修正。追加しただけだけど。
If Len(ReadData) = I Then
CNT = CNT + 1
ReDim Preserve FTypTB(1 To CNT)
FTypTB(CNT) = 2
End If
ElseIf I = Len(ReadData) And (MojFlg = 1 Or IsNumeric(Mid(ReadData, I, 1)) = False) Then
CNT = CNT + 1
ReDim Preserve FTypTB(1 To CNT)
If (IsNumeric(FieldData) = True And _
(InStr(1, FieldData, "-") > 0 Or InStr(1, FieldData, ",") > 0)) Or _
(Left(FieldData, 1) = "\" Or Left(FieldData, 1) = "$") And _
IsNumeric(Mid(FieldData, 2)) Then
FTypTB(CNT) = 1
'↑ ExcelVBAのバグのため\記号は、文字として扱われる為、無意味だけど一応入れる。by2000SR1
'注)$は、\に変換されてしまう。手動にて文字形式の変更が必要。by2000SR1
Else
FTypTB(CNT) = 2
End If
FieldData = Empty
MojFlg = 0
ElseIf I = Len(ReadData) Then
CNT = CNT + 1
ReDim Preserve FTypTB(1 To CNT)
FTypTB(CNT) = 1
MojFlg = 0
ElseIf Mid(ReadData, I, 1) <> Chr(34) Then
FieldData = FieldData & Mid(ReadData, I, 1)
End If
Next
ReDim myFieldInfo(1 To CommaCnt + 1)
For I = 1 To CommaCnt + 1
myFieldInfo(I) = Array(I, FTypTB(I))
Next
Workbooks.OpenText FileName:=OpenFile, _
DataType:=xlDelimited, Comma:=True, FieldInfo:=myFieldInfo
Erase FTypTB
Erase myFieldInfo
MsgBox "処理時間 " & Format(Now - STime, "hh:mm:ss")
End
End Sub
|
|