1517674342 エクセルVBA、文字列の中に、数字(半角、全角とも)が含まれていない場合、色をつけたい。


A、I、E列の、2行、6行、10行、14行・・・(102行まで4行飛び)

に住所の文字列が入っています。


そのときに、半角、全角問わず、1234567890、1234567890の数字が入って【いない】ときだけ、フォントを赤く、太字で表示させたいのです。

条件付き書式をやってみましたが、どうもうまくいきませんでした。
(countif利用の相対参照等で)

ですので、マクロ回答を期待いたします。

よろしくお願いいたします。

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2018/02/07 05:09:19
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:ken3memo No.1

回答回数317ベストアンサー獲得回数115

ポイント200pt

>半角、全角問わず、
>1234567890、
>1234567890
>の数字が入って【いない】ときだけ、
>フォントを赤く、
>太字で表示させたいのです。

下記、テスト動画です。
https://www.youtube.com/watch?v=aqiy53cyVGs
D

北海道
北海道札幌市1-2-3
神奈川県横浜市99番地
神奈川県町田市五丁目六番七号
沖縄XXXアパート201号

1.下記のモジュールを貼り付ける
※alt+F11や開発から

Option Explicit

'半角の0から9
'全角の0から9
'が、一文字でも入っていたら"OK"の文字を返す
'入っていないときは"NG"を返す そんなユーザ関数を作成

Public Function chk0_9(strCHK As String) As String

    Dim strRET As String  'リターン値
    
    Dim n As Integer
    
    Dim strMOJI As String  '一文字
    Dim nCODE   As Integer '文字コードを保管
    
    strRET = "NG"   'NG エラーで初期化
    
    For n = 1 To Len(strCHK)  '先頭1文字目から文字数分ループ
        strMOJI = Mid(strCHK, n, 1)  '一文字取り出す
        nCODE = Asc(strMOJI)  '文字コードに変換
        
        '範囲をチェックする
        If Asc("0") <= nCODE And nCODE <= Asc("9") Then
            strRET = "OK"    '一文字でも見つかったのでリターン値にOKセット
            Exit For         'ひとつでも見つかればループを抜ける
        End If

        '全角数字のチェック
        If Asc("0") <= nCODE And nCODE <= Asc("9") Then
            strRET = "OK"    '一文字でも見つかったのでリターン値にOKセット
            Exit For         'ひとつでも見つかればループを抜ける
        End If

    Next
    
    chk0_9 = strRET   '最後にリターン値をセットして、関数終了
 
End Function

2.セルの条件書式に式を貼り付ける

2.1 セルの強調表示ルール

その他を選択する

2.2 数式を使用して、書式設定するセルを決定
式に =chk0_9(チェックするセル)="NG" を 入れ
書式をアカにする

2.3 条件書式をコピーする
ペンキのハケみたいなアイコン?
から
書式をコピーする

ユーザ関数と条件書式でやってみました。
何かの参考となれば、うれしいです・・・
※ぐだぐたのテスト動画は笑ってゆるしてください・・・

他1件のコメントを見る
id:naranara19

ありがとうございます!すごすぎる回答なので、一度ゆっくりみさせてくださいね。時間をかけたいので、お待ちくださいませ。心より感謝いたします。

2018/02/05 04:38:13
id:naranara19

ありがとうございます。しっかりできました。動画回答に驚きました。お時間かけてくださって感謝します。

2018/02/07 04:46:07

その他の回答4件)

id:ken3memo No.1

回答回数317ベストアンサー獲得回数115ここでベストアンサー

ポイント200pt

>半角、全角問わず、
>1234567890、
>1234567890
>の数字が入って【いない】ときだけ、
>フォントを赤く、
>太字で表示させたいのです。

下記、テスト動画です。
https://www.youtube.com/watch?v=aqiy53cyVGs
D

北海道
北海道札幌市1-2-3
神奈川県横浜市99番地
神奈川県町田市五丁目六番七号
沖縄XXXアパート201号

1.下記のモジュールを貼り付ける
※alt+F11や開発から

Option Explicit

'半角の0から9
'全角の0から9
'が、一文字でも入っていたら"OK"の文字を返す
'入っていないときは"NG"を返す そんなユーザ関数を作成

Public Function chk0_9(strCHK As String) As String

    Dim strRET As String  'リターン値
    
    Dim n As Integer
    
    Dim strMOJI As String  '一文字
    Dim nCODE   As Integer '文字コードを保管
    
    strRET = "NG"   'NG エラーで初期化
    
    For n = 1 To Len(strCHK)  '先頭1文字目から文字数分ループ
        strMOJI = Mid(strCHK, n, 1)  '一文字取り出す
        nCODE = Asc(strMOJI)  '文字コードに変換
        
        '範囲をチェックする
        If Asc("0") <= nCODE And nCODE <= Asc("9") Then
            strRET = "OK"    '一文字でも見つかったのでリターン値にOKセット
            Exit For         'ひとつでも見つかればループを抜ける
        End If

        '全角数字のチェック
        If Asc("0") <= nCODE And nCODE <= Asc("9") Then
            strRET = "OK"    '一文字でも見つかったのでリターン値にOKセット
            Exit For         'ひとつでも見つかればループを抜ける
        End If

    Next
    
    chk0_9 = strRET   '最後にリターン値をセットして、関数終了
 
End Function

2.セルの条件書式に式を貼り付ける

2.1 セルの強調表示ルール

その他を選択する

2.2 数式を使用して、書式設定するセルを決定
式に =chk0_9(チェックするセル)="NG" を 入れ
書式をアカにする

2.3 条件書式をコピーする
ペンキのハケみたいなアイコン?
から
書式をコピーする

ユーザ関数と条件書式でやってみました。
何かの参考となれば、うれしいです・・・
※ぐだぐたのテスト動画は笑ってゆるしてください・・・

他1件のコメントを見る
id:naranara19

ありがとうございます!すごすぎる回答なので、一度ゆっくりみさせてくださいね。時間をかけたいので、お待ちくださいませ。心より感謝いたします。

2018/02/05 04:38:13
id:naranara19

ありがとうございます。しっかりできました。動画回答に驚きました。お時間かけてくださって感謝します。

2018/02/07 04:46:07
id:kimuram No.2

回答回数27ベストアンサー獲得回数11

ポイント200pt

以下を試してみてください。
Excel2016で確認しています。


Sub chkNum()
Dim wkSh As Worksheet
Dim wkRange As Range
Dim wkAddRange As Range
Dim wkCell As Range
Dim wkStr
Dim wkI
Dim wkFlg

Set wkSh = ActiveSheet

'チェック対象セル群を決定
Set wkRange = wkSh.Range("A2, I2, E2")
For wkI = 6 To 102 Step 4
Set wkAddRange = wkSh.Range("A" & wkI & ",I" & wkI & ",E" & wkI)
Set wkRange = Union(wkRange, wkAddRange)
Next wkI

'セル毎に数字を含むかチェックする
For Each wkCell In wkRange
wkStr = StrConv(wkCell, vbNarrow) '半角に統一してからチェックする
wkFlg = 0
For wkI = 1 To Len(wkStr)
If Mid(wkStr, wkI, 1) >= "0" And Mid(wkStr, wkI, 1) <= "9" Then
wkFlg = 1
Exit For
End If
Next wkI

If wkFlg = 0 Then
'If wkFlg = 0 And (Trim(wkCell) <> "") Then
' ↑セルがヌルおよびブランクのみの場合、処置しない(必要でもないけど)
'数字を含まない場合、セルの文字フォントの属性を変更する
wkCell.Font.Color = RGB(255, 0, 0)
wkCell.Font.Bold = True
Else
'設定を戻す
wkCell.Font.ColorIndex = xlAutomatic
wkCell.Font.Bold = False
End If
Next

End Sub

id:naranara19

ありがとうございます!ばっちりできました!

2018/02/07 04:55:35
id:Z1000S No.3

回答回数39ベストアンサー獲得回数27

ポイント20pt

条件付き書式でうまくいかないとのことですが
どううまくいかないのかわかりませんが
判定処理だけVBAとして、それを条件付き書式に使用すればできませんか?

判定条件は、
半角、全角問わず、1234567890、1234567890の数字が入って【いない】
とのことなので、
「0~9または、0~9が1文字でも含まれているか」の結果を否定すればよろしいかと。

例えば、次のようにすれば、数字が含まれていない時、TRUEが返ります。

Public Function notExistsDigits(ByVal sValue As String) As Boolean

  notExistsDigits = Not sValue Like "*[0-90-9]*"

End Function

ちなみに、上記の例では、長さ0の文字列もTRUEが返ります。

id:naranara19

ありがとうございます。条件付き書式に使用すればできませんか?←この条件付き書式が具体的にどのような数式になるのかわかりませんでした(スキル不足で申し訳ありません)ご回答に感謝します。

2018/02/07 04:57:39
id:webnave No.4

回答回数1ベストアンサー獲得回数0

ポイント100pt

条件付き書式
=SUMPRODUCT(ISNUMBER(VALUE(MID(A1,COLUMN(OFFSET($A$1,,,,LEN(A1))),1)))*1)=0


これで出来るはずですが

id:naranara19

ごめんなさい。なぜかできませんでした。

2018/02/07 05:02:11
id:naranara19

と、思いましたらA1を該当セルに変えたらできました。感謝いたします!

2018/02/07 05:07:11
id:gfik No.5

回答回数22ベストアンサー獲得回数10

ガイドラインの
2.Ⅵ「同一あるいは類似の内容の質問や回答を連続してあるいは多数投稿する行為」
に違反する内容の回答をしてしまったため、消しました。

すみませんでした。

id:naranara19

とんでもないです!

2018/02/07 05:07:25
  • id:gfik
    他の人の回答を見ていなかったため
    類似する回答になってしまいました。
    せっかく考えたのでコメントさせてください。

    webnaveさんと同じ条件付き書式の式です。
    =COUNT(INDEX(FIND(ROW($1:$10)-1,ASC(A2)),))=0
    でもできるはずです。
    条件付き書式の範囲の右上がA2です。
  • id:naranara19
    いつかさんへ

    ありがとうございます!できました。わざわざありがとうございました。感謝いたします!

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません