• ベストアンサー

EXCELVBA 文字の判別

excelVBAで困っていることがあります。 あるセルに入っているデータの先頭の文字より半角数字5桁の数字を取得する処理を作っています。 先頭5文字をmid関数で取得すれば、簡単だと思っていたのですが、 データを見てみたところ、以下のようなデータがあることがわかりました。 (例)20-500(半角-),20―500(ダッシュ),20500(全角) 20 500(半角スペース),20 500(全角スペース),205(桁落ち),2050あ(全角文字付き) 5桁の数字が取得できると思われる箇所は 半角5桁で取得しなければいけません。 また、正しいデータは半角数字5桁だよ、 ということをユーザに知らせるため、半角数字5桁のデータ以外は それぞれ半角-は赤、ダッシュは青等セルの色を変更する必要があって困っています。 ご教授ください。よろしくお願いいたします。

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.3

>また、正しいデータは半角数字5桁だよ、 >ということをユーザに知らせるため、半角数字5桁のデータ以外は >それぞれ半角-は赤、ダッシュは青等セルの色を変更する必要があって困っています。 困っているのは『半角-は赤、ダッシュは青等セルの色を変更する』方法ですか? 例えば[条件付書式]を使う方法もありますね。 [数式が▼]の条件で =ISNUMBER(FIND("-",LEFT(A1,5))) など。 でも抜き出す必要があるのなら結局VBAでLoop処理する事になるか... Sub test()   Dim r As Range   Dim s As String   If TypeName(Selection) <> "Range" Then Exit Sub   For Each r In Selection     If r.Value <> "" Then       s = Left$(r.Value, 5)       If s Like "#####" Then         If LenB(StrConv(s, vbFromUnicode)) = 5 Then           Debug.Print s         End If       Else         If InStr(s, "―") > 0 Then           r.Interior.Color = vbBlue         End If         If InStr(s, "-") > 0 Then           r.Interior.Color = vbRed         End If       End If     End If   Next End Sub

akirinchan
質問者

お礼

ソースを載せていただきありがとうございました。 Like関数の#の使い方、勉強になりました。 教えていただいた方法を参考にしてみます。

その他の回答 (2)

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.2

とりあえず、数字を抽出、数字以外のフォント色を赤にしてみました。 Dim nstr As String Dim i As Integer For i = 1 To Len(ActiveCell.Value) If IsNumeric(ActiveCell.Characters(i, 1).Text) Then nstr = nstr + ActiveCell.Characters(i, 1).Text Else ActiveCell.Characters(i, 1).Font.ColorIndex = 3 End If Next i MsgBox nstr

akirinchan
質問者

お礼

ソースを載せていただきありがとうございました。 Charactersというものをを知らなかったので、調べてみます。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

mid関数(left関数でも同じ)ですが、これは「文字数」です。 まず、mid関数(left関数でも同じ)で取り出した文字列のバイト数を数えてみるlenB関数を用いる(len関数だと「文字数」です) 5文字が5バイトなら、「すべて半角」 6バイト以上なら、5との差分数が全角文字であることがわかります。 数字以外のチェックは、IsNumeric関数で判断つくはず。 これはヘルプを参照してください。 その判断を行ったうえで、FontColorを設定してください。 (「マクロの記録」を利用すれば簡単と思います)

akirinchan
質問者

お礼

回答ありがとうございました。 len関数で詰まっていたので、助かりました。

関連するQ&A

専門家に質問してみよう