ここから本文です

エクセルVBA、セルの文字色変換について 現在以下のようなVBAを記述しています。

アバター

ID非公開さん

2016/10/1410:00:06

エクセルVBA、セルの文字色変換について
現在以下のようなVBAを記述しています。

これにより、まずセルに数字が直接入力されているものについては青色フォントに、数字が同一シート内参照であれば黒色フォントに、数字が異なるシートからの参照値がある場合は緑色フォントになるようなものとしています。しかし、利用しているうちに、どうも特定のエクセルファイルにおいては、以下の★部分にエラーが起こってしまうことがわかりました。
どうしてもそのエラーの原因が分からず、もしわかる方がいらっしゃればご教示願いたく、そしてコードの改良をお願いできないかと考えてご連絡を致しました。ご検討のほど、どうぞ宜しくお願い申し上げます。

Sub TextColor2()
Dim scnt As Integer
Dim wr As Range
Dim i As Long, j As Long
Dim a As String
Application.ScreenUpdating = False
For scnt = 1 To Worksheets.Count
With Worksheets(scnt)
i = .UsedRange.Rows.Count
j = .UsedRange.Columns.Count

For Each wr In .Range(.Cells(1, 1), .Cells(i, j))
If IsNumeric(wr.Value) Then
wr.Font.ColorIndex = 1 (⇒★。ここでエラーが出ます。)
End If
Next wr

For Each wr In .Range(.Cells(1, 1), .Cells(i, j))
If IsNumeric(wr.Value) Then
If wr.HasFormula Then
a = wr.Formula
For c = 1 To Len(a)
If Mid(a, c, 1) = "!" Then
wr.Font.ColorIndex = 10
Exit For
End If
Next c
Else
wr.Font.ColorIndex = 23

End If
End If
Next wr
End With
Next scnt
Application.ScreenUpdating = True
End Sub

閲覧数:
260
回答数:
1
お礼:
250枚

違反報告

ベストアンサーに選ばれた回答

nag********さん

2016/10/1411:13:10

Font.ColorIndex を使わずにFont.Colorを使えばエラーは出なくなります。

黒はColor = RGB(0, 0, 0)
青はColor = RGB(0, 0, 255)
緑はColor = RGB(0, 255, 0)

です。
コードにすると

Option Explicit
Sub TextColor2()
Dim scnt As Integer
Dim wr As Range, col As Long
Application.ScreenUpdating = False
For scnt = 1 To Worksheets.Count
For Each wr In Worksheets(scnt).UsedRange
'基本は黒
col = 0
'セルの内容が空白でなく、かつ数字のとき
If wr.Value <> "" And IsNumeric(wr.Value) Then
If wr.HasFormula Then
'別シート参照なら緑
If InStr(wr.Formula, "!") > 0 Then
col = RGB(0, 255, 0)
End If
Else
'数式でなければ青
col = RGB(0, 0, 255)
End If
End If
'セルに文字色を設定する
wr.Font.Color = col
Next wr
Next scnt
Application.ScreenUpdating = True
End Sub

  • アバター

    質問者

    ID非公開さん

    2016/10/1619:58:29

    ありがとうございます!
    こちらで試したのですが、実行時エラー13 型が一致しませんというエラーが出てきてしまいます。

    If wr.Value <> "" And IsNumeric(wr.Value) Then

    こちらの部分です。
    何か問題ある表現になっているのでしょうか?
    何度もループとなり恐縮です。

  • その他の返信(2件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この回答は投票によってベストアンサーに選ばれました!

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる