[[20160201141408]] 『マクロでの条件書式』(くろ) ページの最後に飛ぶ

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

 

『マクロでの条件書式』(くろ)

いつもお世話になってます。
条件書式をマクロの記録で書いたものを実行するとエラーになるので
ご教授お願いします。

適用先 Range("K8:L40")

1.数式=IF(RIGHT(TEXT(B3,"0.#"),1)=".",TRUE,FALSE)
 書式=「数値」を選択。「小数点以下の桁数」を0、「桁区切り(,)を使用する」をオン、負数はマイナス記号で赤文字に設定

2.数式=IF(RIGHT(TEXT(B3,"0.#"),1)=".",FALSE,TRUE)
 書式=「ユーザー定義」を選択。種類に「#,##0.#;[赤]-#,##0.#」

適用先に上記2つの条件を設定したいです。

以下マクロの記録

Sub test()

    Cells.FormatConditions.Delete
  Range("K8:L40").Select
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
        "=IF(RIGHT(TEXT(K8,""0.#""),1)=""."",TRUE,FALSE)"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    ExecuteExcel4Macro "(2,1,""#,##0_ "")"
    Selection.FormatConditions(1).StopIfTrue = False
    Range("K8:L40").Select
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
        "=IF(RIGHT(TEXT(K8,""0.#""),1)=""."",FALSE,TRUE)"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
     ExecuteExcel4Macro "(2,1,""#,##0.#;[赤]-#,##0.#"")"
    Selection.FormatConditions(1).StopIfTrue = False
End Sub

ExecuteExcel4Macro "(2,1,""#,##0_ "")"
箇所で黄色エラーになります。「実行エラー1004」

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 本題とは外れるが。

 比較式の結果は「TRUE」(真)か「FALSE」(偽)となる。
 なので

 =IF(RIGHT(TEXT(B3,"0.#"),1)=".",TRUE,FALSE) 
 は
 =RIGHT(TEXT(B3,"0.#"),1)="."

 =IF(RIGHT(TEXT(B3,"0.#"),1)=".",FALSE,TRUE) 
 は
 =RIGHT(TEXT(B3,"0.#"),1)<>"."
 で。

(ねむねむ) 2016/02/01(月) 14:57


こんにちは

エラーの理由は良く分からないので、

Sub test1()

    Dim f As FormatCondition
    Cells.FormatConditions.Delete
    Set f = Range("K8:L40").FormatConditions.Add( _
        xlExpression, , "=RIGHT(TEXT(B3,""0.#""),1)="".""")
    Set f = Range("K8:L40").FormatConditions.Add( _
        xlExpression, , "=RIGHT(TEXT(B3,""0.#""),1)<>"".""")

    Set f = Range("K8:L40").FormatConditions(1)
    f.NumberFormat = "#,##0_ ;[赤]-#,##0"
    f.StopIfTrue = False

    Set f = Range("K8:L40").FormatConditions(2)
    f.NumberFormat = "#,##0.#;[赤]-#,##0.#"
    f.StopIfTrue = False

End Sub

こんな感じに変更してみては?
(ウッシ) 2016/02/01(月) 15:10


 すでに皆さんから指摘ならびに記述に関する回答がでていますので、解決ということになるんでしょうが

 >>ExecuteExcel4Macro "(2,1,""#,##0_ "")" 
 >>箇所で黄色エラーになります。「実行エラー1004」 

 このポイントのみ、参考までに、以下コメントします。

 1.まず、1004のエラーですが、その時に、長い説明文章もあわせてアップされているはずです。
   1004 は、エクセルとして認識できない、おかしな領域参照や式等が指定されたときに発生します。
   発生理由は様々ですので、あわせてメッセージの内容を読むことが必要です。

   今回のケースでは、引数として与えたものが エクセルとしての式だと認識され、その式がおかしいですよというエラーです。

   "(2,1,""#,##0_ "")" を与えたということは、文字列としての (2,1,"#,##0_ ") このイメージを与えたことになり、
   ( で始まるので、エクセルとしては数式だと認識。=(2,1,"#,##0_ ") とセルに入力すると、同じようにエクセルから叱られるでしょ。

 2.ExecuteExcel4Macroは、他のメソッド同様、

   (式).メソッド 引数群 

     この記述では、そのメソッド固有の処理が行われます。 領域.Sort だったり 領域.Replace だったり。
     処理は行われますが、戻り値を受け取る記述にはなっていません。

   戻り値を受け取る変数 = (式).メソッド(引数群)

     この記述では、固有の処理をした後、その処理後の戻り値を受け取ることができます。
     Set Range型変数 = 領域.Find(引数群) や vbMsgBoxResult型変数 = MsgBox("hoge") 等々。

     提示の ExecuteExcel4Macro の記述方法は前者ですね。
     戻り値を求めてはいない記述です。
     実際には、このコードで 何がどうなるわけではなく、あくまで内部処理でおしまいになるはずなんですが
     エクセルの裏の処理をマクロ記録の成果物としてコード化すると、こうなったんでしょうね。(バグですね)

まぁ、マクロ記録で生成されたコードですから、悪いのは (くろ)さんじゃなく MicroSoftですけどね。

     
(β) 2016/02/01(月) 15:48

ねむねむさん

なるほど!
分からないとIFに頼ってしまうからダメですね!
早速使わせて頂きます。
(くろ) 2016/02/01(月) 15:53


ウッシさん

ありがとうございます。
上手くいきました。

(くろ) 2016/02/01(月) 15:54


βさん

>>1.まず、1004のエラーですが、その時に、長い説明文章もあわせてアップされているはずです。

   1004 は、エクセルとして認識できない、おかしな領域参照や式等が指定されたときに発生します。
   発生理由は様々ですので、あわせてメッセージの内容を読むことが必要です。

読みました。数式が間違ってるということだったのですが、自分がマクロを書いた訳ではなかったので
よく理解できなくて質問しました。
まだマクロの記録に頼ってばかりなのでこういう現象はとっても困ります。

参考コメントありがとうございました。
理解できるよう頑張ります。

(くろ) 2016/02/01(月) 16:03


コメント返信:

[ 一覧(最新更新順) ]


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