掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
半角文字・全角文字のエラーチェックをするには・・・? (ID:83171)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
レコード長のエラー判定はStrConv関数でShift_JISに戻してから LenB を使う事によって解決致しました。 しかし、全角文字と半角文字の判別方法として、Forループを使って1文字ずつ調べ、Asc関数で0〜255の範囲が返されれば半角、それ以外は全角という判定法でしてみたのですが、うまくいきません。以下に私が組んだソースを載せますので、どこがいけないかご指摘の方お願い致します。 Dim i Dim Msg, Style, Title, Response Dim TextLine, temp Dim objFileSystem As Object Dim objFile As Object Dim strFileName As String Dim strTemp As String Dim lngSourceLength As Long '渡された文字列の長さ Dim strResult As String '変換後文字列を格納するバッファ Dim strSingle As String '抜き出された 1 文字分のバッファ Dim intCharCode As Integer '1 文字の文字コードを格納する Dim m As Long 'ループカウンタ Dim intLine1, intLine2, intLine3, intLine4, intLine5 As Integer 'エラーの行数を格納する Dim intColumn1, intColumn2, intColumn3, intColumn4, intColumn5 As Integer 'エラーのカラム数を格納する Dim intRecord As Integer 'レコード長エラーの行数を格納する i = 0 ' 行数を初期化する。 m = 0 ' ループカウンタを初期化する。 Open UserForm1.txtFileMei.Text For Input As #1 ' ファイルを開きます。 Do While Not EOF(1) ' ファイルの終端までループを繰り返します。 Line Input #1, TextLine ' 行を変数に読み込みます。 temp = TextLine ' 行を変数に保存 Debug.Print TextLine ' イミディエイト ウィンドウに行を表示します。 strTemp = StrConv(temp, vbFromUnicode) ' 行全体内の全角文字 (2 バイト) を半角文字 (1 バイト) に変換します。 Debug.Print "LenB関数の結果:"; LenB(strTemp) ' 行のバイト数を返す。 i = i + 1 ' 行数に1を加える。 lngSourceLength = LenB(strTemp) '文字列の長さを得る strResult = Space$(lngSourceLength) '変換後文字列を格納するバッファサイズを確保 strSingle = Space$(1) '1 文字分のバッファを確保 If lngSourceLength = 300 Then 'レコード長が300バイトなら・・・ For m = 1 To lngSourceLength Step 1 '文字列の最後までループ Mid(strSingle, 1, 1) = Mid$(strTemp, m, 1) '1 文字だけ抜き出す intCharCode = Asc(strSingle) 'Asc 関数で文字コードを得る Select Case m Case m >= 0 And m <= 51 ' 0〜51カラム以内で(半角領域) If intCharCode >= 0 And intCharCode <= 255 Then ' 0〜255以内の範囲が返ってきたら半角 intLine1 = 0 Else ' 0〜255以外の範囲が返ってきたら全角 intLine1 = i ' エラーの行数を変数に保存 intColumn1 = m ' エラーのカラム数を変数に保存 Debug.Print "全角(半角)エラー:" & intLine1 & "行 " & intColumn1 & "カラム" 'イミディエイト ウィンドウに行とカラムを表示する" End If Case m >= 52 And m <= 75 ' 52〜75カラム以内で(全角領域) If intCharCode >= 0 And intCharCode <= 255 Then intLine2 = i ' エラーの行数を変数に保存 intColumn2 = m ' エラーのカラム数を変数に保存 Debug.Print "全角(半角)エラー:" & intLine2 & "行 " & intColumn2 & "カラム" 'イミディエイト ウィンドウに行とカラムを表示する" End If Case m >= 76 And m <= 85 ' 76〜85カラム以内で(半角領域) If intCharCode >= 0 And intCharCode <= 255 Then intLine3 = 0 Else intLine3 = i ' エラーの行数を変数に保存 intColumn3 = m ' エラーのカラム数を変数に保存 Debug.Print "全角(半角)エラー:" & intLine3 & "行 " & intColumn3 & "カラム" 'イミディエイト ウィンドウに行とカラムを表示する" End If Case m >= 86 And m <= 105 ' 86〜105カラム以内で(全角領域) If intCharCode >= 0 And intCharCode <= 255 Then intLine4 = i ' エラーの行数を変数に保存 intColumn4 = m ' エラーのカラム数を変数に保存 Debug.Print "全角(半角)エラー:" & intLine4 & "行 " & intColumn4 & "カラム" 'イミディエイト ウィンドウに行とカラムを表示する" End If Case m >= 106 And m <= 300 ' 106〜300カラム以内で(半角領域) If intCharCode >= 0 And intCharCode <= 255 Then intLine5 = 0 Else intLine5 = i ' エラーの行数を変数に保存 intColumn5 = m ' エラーのカラム数を変数に保存 Debug.Print "全角(半角)エラー:" & intLine5 & "行 " & intColumn5 & "カラム" 'イミディエイト ウィンドウに行とカラムを表示する" End If End Select Next m Else ' レコード長が300バイトでないなら・・・ Debug.Print "レコード長不当:" & i & "行" ' イミディエイト ウィンドウに行を表示する。 intRecord = i ' 行数を変数に保存 End If Loop
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.