[[20181004141018]] 『VBA:セルの値が直接入力か参照しているかで文字ax(YOYO) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBA:セルの値が直接入力か参照しているかで文字の色分け』(YOYO)

現在以下の条件付書式で、値の色分けを行っております。

他シートを参照している場合
=SEARCH("!",FORMULATEXT(A1)) → 書式で文字色を緑

数値を直接入力している場合
=AND(NOT(ISFORMULA(A1)),ISNUMBER(A1)) → 書式で文字色を青

VBAで同じこと(他シート参照か直接入力によって文字色を変える)をしたいのですが、ご教示頂けませんでしょうか?

< 使用 Excel:Excel2016、使用 OS:Windows10 >


他シート参照ということは数式を書いているので、RangeのHasFormulaプロパティで数式かどうか判定しましょう。数式だった場合、Formulaプロパティに "!" が含まれていることを調べれば良いと思います。

直接入力した数値かどうかは、IsNumeric関数で調べるのが良いでしょう。 ただし、空欄でもTrueと判定してしまうので、空欄の場合を除外しましょう。
(???) 2018/10/04(木) 15:05


返信ありがとうございます。

素人故どうも解決せず。可能であれば、サンプルコード等ご教示頂けませんでしょうか。
Hasfomulaを使って以下のようなコードまでは作ってみましたが、上手くいかず。
恐れ入りますが、宜しくお願いいたします。

Sub FormulaCheck()

    'ループカウンタ初期化
    i = 1

    'ループ
    Do While Cells(i, 1) <> ""

        If Cells(i, 1).HasFormula Then
            '式が設定されている場合、セル色を赤色へ変更

            Range(Cells(i, 1).Address(RowAbsolute:=False, ColumnAbsolute:=False)).Interior.ColorIndex = 3
        Else
            '式が設定されていない場合、セル色を緑色へ変更

            Range(Cells(i, 1).Address(RowAbsolute:=False, ColumnAbsolute:=False)).Interior.ColorIndex = 4
        End If

        'ループカウンタインクリメント
        i = i + 1
    Loop
End Sub
(YOYO) 2018/10/04(木) 18:04

>Range(Cells(i, 1).Address(RowAbsolute:=False, ColumnAbsolute:=False))

これは、単に

Cells(i, 1)

でよいのではないでしょうか。

(マナ) 2018/10/04(木) 18:55


他シートを参照している場合 → 数式が入っているセル
数値を直接入力している場合 → 定数が入っているセル

と判定できるなら、ジャンプ機能でセルを検索できますよ。
手動でまずは試して、マクロの記録でコードを確認することをお勧めします。

Sub Macro1()

    With ActiveSheet.Columns("A")
        .SpecialCells(xlCellTypeConstants).Interior.Color = vbRed
        .SpecialCells(xlCellTypeFormulas).Interior.Color = vbGreen
    End With
End Sub
(まっつわん) 2018/10/04(木) 20:12

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.