- ベストアンサー
EXCELVBA 文字の判別
excelVBAで困っていることがあります。 あるセルに入っているデータの先頭の文字より半角数字5桁の数字を取得する処理を作っています。 先頭5文字をmid関数で取得すれば、簡単だと思っていたのですが、 データを見てみたところ、以下のようなデータがあることがわかりました。 (例)20-500(半角-),20―500(ダッシュ),20500(全角) 20 500(半角スペース),20 500(全角スペース),205(桁落ち),2050あ(全角文字付き) 5桁の数字が取得できると思われる箇所は 半角5桁で取得しなければいけません。 また、正しいデータは半角数字5桁だよ、 ということをユーザに知らせるため、半角数字5桁のデータ以外は それぞれ半角-は赤、ダッシュは青等セルの色を変更する必要があって困っています。 ご教授ください。よろしくお願いいたします。
- みんなの回答 (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
その他の回答 (2)
- xls88
- ベストアンサー率56% (669/1189)
とりあえず、数字を抽出、数字以外のフォント色を赤にしてみました。 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
お礼
ソースを載せていただきありがとうございました。 Charactersというものをを知らなかったので、調べてみます。
- bin-chan
- ベストアンサー率33% (1403/4213)
mid関数(left関数でも同じ)ですが、これは「文字数」です。 まず、mid関数(left関数でも同じ)で取り出した文字列のバイト数を数えてみるlenB関数を用いる(len関数だと「文字数」です) 5文字が5バイトなら、「すべて半角」 6バイト以上なら、5との差分数が全角文字であることがわかります。 数字以外のチェックは、IsNumeric関数で判断つくはず。 これはヘルプを参照してください。 その判断を行ったうえで、FontColorを設定してください。 (「マクロの記録」を利用すれば簡単と思います)
お礼
回答ありがとうございました。 len関数で詰まっていたので、助かりました。
お礼
ソースを載せていただきありがとうございました。 Like関数の#の使い方、勉強になりました。 教えていただいた方法を参考にしてみます。