プロが教える店舗&オフィスのセキュリティ対策術

VBAをはじめて一か月です。 今回、初めて作成していますがなかなかうまくいきません。
禁止文字をチェックするマクロを作成中ですが、下記のプログラムでエラーがあればメッセージは出せるんですが、そこのセルに色付けをするにはどうしたらいいのかわからず、相談しました。

Sub ボタン1_Click()

Dim check_cell

Dim dcount As Integer

For i = 1 To 5

dcount = 0

check_cell = Cells(i, 4).Value

cell_check (check_cell)

Next i

End Sub

Function cell_check(check_cell)
MsgBox "入力されている文字は" & check_cell

If check_cell Like "*[\]*" Then

dcount = dcount + 1
MsgBox "文字に\が入っています"

ElseIf check_cell Like "*[#]*" Then

dcount = dcount + 1
MsgBox "文字に#が入っています"

End If

If dcount > 0 Then
MsgBox "エラーがあります"

Else

MsgBox "エラーはありませんでした"

End If

End Function

質問者からの補足コメント

  • うーん・・・

    すみません。早速、やってみましたが、エラーでもないのに塗りつぶされました。(全て真っ赤になりました。)
    エラーの場所を塗りつぶすようにしたいです。
    よろしくお願いします。

    No.2の回答に寄せられた補足コメントです。 補足日時:2021/01/19 22:22

A 回答 (2件)

No.2さんの回答で、ご質問者の訴える


>すみません。早速、やってみましたが、エラーでもないのに塗りつぶされま>した。(全て真っ赤になりました。)
という症状は再現されませんでした。

No.2さんの回答のままでも、希望の結果となる動作はするはずですが、構文チェックするとエラーが出る箇所もあるので、作り直してみました。
ただし、「禁止文字○があります」と「エラーがあります」は重複しているので、「エラーがあります」の表示は割愛し、禁止文字のないときは「禁止文字はありません」と表示するようにしました。

Option Explicit
Sub ボタン1_Click()
Dim target As Range
Dim i As Integer
For i = 1 To 5
Set target = ActiveSheet.Cells(i, 4)
target.Interior.Pattern = xlNone
MsgBox target.Address & "に入力されている文字は '" & target.Value & "' です"
If exist_bad_char(target) Then
target.Interior.Color = vbRed
Else
MsgBox "禁止文字はありません"
End If
Next i
End Sub
Function exist_bad_char(ByVal target As Range) As Boolean
exist_bad_char = False
If target.Value Like "*[\]*" Then
exist_bad_char = True
MsgBox "禁止文字\があります"
End If
If target.Value Like "*[#]*" Then
exist_bad_char = True
MsgBox "禁止文字#があります"
End If
End Function
    • good
    • 0

ヒマだったから。



'=======================================
Sub ボタン1_Click()

Dim check_cell

Dim dcount As Integer

For i = 1 To 5

dcount = 0

Cells(i, 4).Interior.Pattern = xlNone
check_cell = Cells(i, 4).Value

If cell_check(check_cell) = False Then
Cells(i, 4).Interior.Color = vbRed
End If

Next i

End Sub
'=======================================
Function cell_check(check_cell) As Boolean
'MsgBox "入力されている文字は" & check_cell

If check_cell Like "*[\]*" Then

dcount = dcount + 1
' MsgBox "文字に\が入っています"

ElseIf check_cell Like "*[#]*" Then

dcount = dcount + 1
' MsgBox "文字に#が入っています"

End If

If dcount > 0 Then
' MsgBox "エラーがあります"
cell_check = False
Else

' MsgBox "エラーはありませんでした"
cell_check = True

End If

End Function
この回答への補足あり
    • good
    • 0
この回答へのお礼

うれしい

こんにちは。早速の回答ありがとうございました。早速、試してみます。また、機会がありましたら、よろしくお願いいたします。

お礼日時:2021/01/19 12:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!