• ベストアンサー

セルが数値か関数かを判別する方法を教えてください。

セルが数値か関数かを判別する方法を教えてください。 マクロによって、シートの中で関数の入ったセルだけ色付したいと考えています。 エクセルのバージョンは2007です。 単純にTypeName関数、IsNumeric関数を使うだけではできませんでした。 色々な関数の組み合わせで実現できますか。

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.6

手動操作では Ctrl+Gを押す 現れたダイアログでセル選択を押す 現れたダイアログで数式にマークしてOKする と数式セルが一括選択されるので,色を塗ります。 記録マクロを録ると sub macro1() cells.specialcells(xlcelltypeformulas).interior.colorindex = 4 end sub の様なカンジでよい事が判ります。

urokogumo
質問者

お礼

ありがとうございました。 Ctrl+G という方法があったのですね。 マクロの記述も1行で済み、大変助かります。

すると、全ての回答が全文表示されます。

その他の回答 (5)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.5

こんにちは! 単純にやってみました。 Sub test() Dim c As Range For Each c In ActiveSheet.UsedRange If c.HasFormula Then c.Font.ColorIndex = 3 End If Next c End Sub これで数式が入ったセルの文字が赤くなると思います。 尚、数値だけを赤くしたいのであれば If c.HasFormula Then の部分を If c.HasFormula And IsNumeric(c.Value) Then に変更してみてください。 以上、参考になれば幸いです。m(__)m

urokogumo
質問者

お礼

ありがとうございました。 HasFormula というのがあったのですね。 For Each c In ActiveSheet.UsedRange の記述のところも勉強になりました。 tom04さん、大変参考になりましたよ。

すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

>単純にTypeName関数、IsNumeric関数を使うだけではできませんでした。 数値であり数式か、または、その片方が違うのか、ということでは? その二つは、TypeName 等の統一のステージには判定できません。 例えば、 A1: は任意 B1: =A1 と入れます。 '// Sub Test1()   Dim Rng As Range   Set Rng = Range("B1")   If Rng.HasFormula And IsNumeric(Rng.Value) Then     MsgBox "数式があり、戻り値は数値です。"   ElseIf Rng.HasFormula And Not IsNumeric(Rng.Value) Then     MsgBox "数式がありますが、戻り値は数値ではありません。"   ElseIf Rng.HasFormula = False Then     MsgBox "数式はありません。"   End If End Sub '// しかし、本来、上記のような判定はしませんね。 シートの中で関数の入ったセルだけ色付したいと考えています。 '// Sub Test2()  Dim Rng As Range  Dim Rng2 As Range  Dim c As Range  Set Rng = ActiveSheet.UsedRange    On Error Resume Next    Set Rng2 = Rng.SpecialCells(xlCellTypeFormulas, xlNumbers)    If Rng2 Is Nothing Then Exit Sub    On Error GoTo 0    For Each c In Rng2      c.Interior.ColorIndex = 35    Next End Sub '// Rng.SpecialCells(xlCellTypeFormulas, xlNumbers) 数字だけですから、もしも、すべての数式なら、xlNumbers ではなく、23 を入れます。 「23」 というのは、xlErrors + xlLogical + xlNumbers + xlTextValues の組込み定数の合計です。

urokogumo
質問者

お礼

詳しい説明ありがとうございました。 質問時に自分の頭には数値と数式の2つしか想定できていませんでしたが、最低次の4つのケースがありますね。 ・数値 ・文字列 ・数式(結果は数値) ・数式(結果は文字列) 結果が数値でも文字列でも、とにかく数式のものを色付けしたいというのが自分の要望でした。 Wendy02さんのご回答で色々な面で勉強になりました。

すると、全ての回答が全文表示されます。
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

マクロの記録で式の入ったセルに色を付けた例です。 Sub Macro1() With Application.ReplaceFormat.Interior .PatternColorIndex = xlAutomatic .Color = 65535 .TintAndShade = 0 .PatternTintAndShade = 0 End With Cells.Replace What:="=", Replacement:="", LookAt:=xlPart, SearchOrder:= _ xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=True End Sub

urokogumo
質問者

お礼

ありがとうございました。 やりたい事ができました! "="が含まれるセルを黄色にすることができました。

すると、全ての回答が全文表示されます。
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

例えば数式が無い場合でしたら IF Range("A1").Formula="" Then

urokogumo
質問者

お礼

ありがとうございました。 試してみましたところ、次のような結果になりました。  A1が空白の場合 true  A1に数式が入っている場合 false  A1に数値が入っている場合 false  A1に文字列が入っている場合 false ですので、数値と数式の区別が出来ませんでした。

すると、全ての回答が全文表示されます。
  • taekweng
  • ベストアンサー率17% (81/468)
回答No.1

セルが数値か関数かを判別するだけなら セルにポイントすれば、上部の入力バーに表示されるはずですが…

urokogumo
質問者

お礼

ありがとうございます。 ひとつのシートに複数の関数が含まれるので、それを一括して一目見て分かる状態にしたいと考えています。

すると、全ての回答が全文表示されます。

関連するQ&A