- ベストアンサー
Excel VBAの文字列と数値の分類
txtファイルで取り込んだ2行にまたがっている数値・英文字・ひらがななどを、数値だけのtxtファイルとそれ以外のtxtファイルを別々に作成し、保存するプログラムを組みたいのですが、よく分かりません。 ちなみに、使っているOSとAPはWinXP、Excel2003です。 InputData.txtの内容 A34bFg7p0 あ 1ylut890 B45LK4L え Number.txtの完成形 34701890454 String.txtの完成形 AbFgp あ ylutBLKL え '変数の宣言 Dim myFile As String Dim CC As Integer Dim XX As Integer Dim WW As Variant Dim str As String Dim tempStr As String Dim B As String Dim C As String myFile = Dir("InputData.txt") 'ファイルの読み込み If myFile = "InputData.txt" Then Open myFile For Input As #1 Do While Not EOF(1) Input #1, myText Loop '書き込みファイルの作成 Open "Number.txt" For Output As #2 Open "String.txt" For Output As #3 '数字・文字列の分類 CC = Len(myFile) For XX = 1 To CC str = Mid(myFile, XX, 1) If str >= 0 And str <= 9 Then B = B & str Else C = C & str End If Next Print #2, B Print #3, C Close #1, #2, #3 'エラーメッセージの表示 Else MsgBox "ファイルは存在しません。" End If ここまでやっている状態です。よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
各ファイルの保存先はRドライブ直下(R:\)としてます。 Sub try() Dim RegExp As Object Dim myFile As String Dim myText As String Dim str As String Dim B As String Dim C As String Set RegExp = CreateObject("VBScript.RegExp") RegExp.Global = True myFile = Dir("R:\InputData.txt") 'ファイルの読み込み If myFile = "InputData.txt" Then Open "R:\" & myFile For Input As #1 Do While Not EOF(1) Input #1, myText str = str & myText Loop '数字・文字列の分類 RegExp.Pattern = "\D+" B = RegExp.Replace(str, "") '数字を残す RegExp.Pattern = "\d+" C = RegExp.Replace(str, "") '数字以外を残す '書き込みファイルの作成 Open "R:\Number.txt" For Output As #2 Open "R:\String.txt" For Output As #3 Print #2, B Print #3, C Close #1, #2, #3 Set RegExp = Nothing 'エラーメッセージの表示 Else MsgBox "ファイルは存在しません。" End If End Sub 適宜修正の上、ご参考程度に。
その他の回答 (1)
- mt2008
- ベストアンサー率52% (885/1701)
まず、INPUTでInputData.txtから読み込む箇所に問題があります。 変数myTextに読み込んだ文字列を入れたいのに、毎回上書きしていますので、最後の行しか入りません。 次に、せっかく変数に読み込んだのに、myTextではなく、ファイル名(InputData.txt)が入っている変数を対象に数字と文字に別けています。 最後に、取り出した1文字が数字かどうかの判断の仕方が間違って居ます。 1行づつステップ実行して、デバッグして見てください。 Dim myFile As String Dim CC As Integer Dim XX As Integer Dim WW As Variant Dim str As String Dim tempStr As String Dim B As String Dim C As String myFile = Dir("InputData.txt") Dim myText2 As String '←1行読み込み用 'ファイルの読み込み If myFile = "InputData.txt" Then Open myFile For Input As #1 Do While Not EOF(1) 'Input #1, myText ←これではだめ Input #1, myText2 '←1行読み込み用変数に代入 myText = myText & myText2 '←複数行の文字列を1つの変数にまとめる Loop '書き込みファイルの作成 Open "Number.txt" For Output As #2 Open "String.txt" For Output As #3 '数字・文字列の分類 'CC = Len(myFile) ←変数名の間違い CC = Len(myText) '←変数名の間違い For XX = 1 To CC 'str = Mid(myFile, XX, 1) ←変数名の間違い str = Mid(myText, XX, 1) '←変数名の間違い 'If str >= 0 And str <= 9 Then ←数字かどうかはIsNumericで判断 If IsNumeric(str) = True Then '←数字かどうかはIsNumericで判断 B = B & str Else C = C & str End If Next Print #2, B Print #3, C Close #1, #2, #3 'エラーメッセージの表示 Else MsgBox "ファイルは存在しません。" End If
お礼
教えていただ見た皆さんありがとうございました。 おかげさまで無事出来ました。 これからも精進して頑張っていきますので、また困りましたら宜しくお願いいたします。