• ベストアンサー

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 ここまでやっている状態です。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

各ファイルの保存先は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 適宜修正の上、ご参考程度に。

fujisato29
質問者

お礼

教えていただ見た皆さんありがとうございました。 おかげさまで無事出来ました。 これからも精進して頑張っていきますので、また困りましたら宜しくお願いいたします。

その他の回答 (1)

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

まず、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