[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『条件付書式にヒットしているかを取得』(サンコン)
例えば セルA1 に 値が5より大きければ背景色を赤にするという 条件付書式を設定しているとします
このとき、背景色赤(5より大きい)の場合にのみ走らせるマクロを組もうとしています なので、セルA1 が条件にヒットしているかどうかをマクロ内で取得する方法を教えてください
(実際の条件は5より大きいではなくVLOOKUP関数を使用した計算結果からの範囲なので 使用するたびに範囲が変化します)
どなたかどうぞ宜しくお願いします
< 使用 Excel:Excel2007、使用 OS:Windows7 >
私には回答はできないのですが、↓が気になります。
>(実際の条件は5より大きいではなくVLOOKUP関数を使用した計算結果からの範囲なので >使用するたびに範囲が変化します)
よろしければ、実際の式を教えていただけますか。
(マナ) 2015/03/08(日) 14:53
マナさん 返信有難う御座います
実際の条件をそのまま書きますと セルの値が 次の値の間以外 =VLOOKUP($N12,$BL$12:$DV$1972,2,FALSE) と =VLOOKUP($N12,$BL$12:$DV$1972,3,FALSE) 適用先 =$Z$12:$Z$5015 です。
条件付書式は 列Z〜列AR の行12〜行5015に入っていて、これからまだ行数は増えて行きます 列Zは 範囲($BL$12:$DV$1972)を VLOOKUPで 列Nの文字を検索し、2列目と3列目の値範囲以外の時に背景赤 列AAは 同範囲($BL$12:$DV$1972)を同列Nの文字で検索 4列と5列の値範囲以外の時に赤 と続きます ($BL$12:$DV$1972)の範囲は数値のみが入っています 宜しくお願いします (サンコン) 2015/03/08(日) 15:34
つかぬことをお聞きして申し訳ありませんが、企業秘密でなければ教えてください。
1.条件付き書式でセルに色を付けると云うことは、人間が目視する為だと思うのですけど、 5000行のセルを目で見るって大変じゃないですか?
2.処理が重そうな感じがするんですが、現時点では何も問題が起きていないですか? いわゆる「さくっ」て感じですか?
3.検索範囲は「$N12,$BL$12:$DV$1972」との事なので、こちらは固定的のようですが、 N列の並びは昇順ですか?
4.条件付き書式が赤になっているとき、どんな事をするマクロを組もうとしているのですか?
(半平太) 2015/03/08(日) 16:28
Sub test() Dim 適用先 As Range Dim セル As Range
Set 適用先 = Range("Z12:Z5015") 適用先.Interior.ColorIndex = xlNone
For Each セル In 適用先 If 条件ヒット(セル, 2, 3) Then セル.Interior.ColorIndex = 3 Next
End Sub
Private Function 条件ヒット(対象セル As Range, 下限列 As Long, 上限列 As Long) As Boolean Dim 検索表 As Range, 検索セル As Range Dim 上限値, 下限値
Set 検索表 = Range("BL12:DV1972") Set 検索セル = 対象セル.EntireRow.Range("n1")
On Error GoTo ErrHdl 下限値 = Application.VLookup(検索セル, 検索表, 下限列, False) 上限値 = Application.VLookup(検索セル, 検索表, 上限列, False)
条件ヒット = 対象セル.Value > 上限値 Or 対象セル.Value < 下限値
Exit Function ErrHdl: 条件ヒット = False End Function
(マナ) 2015/03/08(日) 17:22
半平太さん 返信有難う御座います
長年使用しているので、現在5015行となっています 入力するのは、必ず1行づつ、他ブックから値コピーして行きます。(一日10〜20行位です) これまで条件付書式で赤になった場合、その都度、手入力で赤くならない数値に書き換えています ですので、通常は5000行あまりを見るという事はありません。(半年に一度程あります) これからも行は増えて行きますので、将来的には分かりませんが、 今のところ処理が重いと感じる事はありません 検索範囲($BL$12:$DV$1972)は固定です 順番には並んでいません。検索キーのN列もその都度バラバラです。 今現在、赤くならない数値に手入力で書き換えていますが、この作業をマクロ化しようと考えています ですので、書き換えるべきかどうかの判断が必要となります。 マクロ構文中 WorksheetFunction.Vlookup〜 等で条件をそのまま書くよりも 条件付書式がヒットしたかどうかを取得出来ないかと思っています 取得方法が有ればお教え頂きたいです。 宜しくお願いします。
マナさん 返信有難う御座います 衝突してしまいました これから検証してみます。 ところで、条件付書式ヒットの取得方法は無いものでしょうか?
(サンコン) 2015/03/08(日) 17:42
走らせるマクロはセルごとに異なるのですか、それとも同一ですか? 複数セルがマッチしていたらマクロも複数回走らせるのですか?それとも、1セルでもマッチしていたら1回のみ走らせるのですか?
(β) 2015/03/08(日) 18:05
if range("a1").formatoconditions(1).match=true then msgbox "マッチしています"
みたいなのを期待しているのであれば、ありません。
(マナ) 2015/03/08(日) 18:32
「条件付書式ヒットの取得方法は無いものでしょうか?」
2007以降、条件付き書式解析の難易度のハードルがぐぐ〜っとアップしています。 2003までなら、いろんなサイトで紹介されていたんですが。 でも、「学校」の生徒なら「特典」があります。
[[20140819105825]] 『[談] 条件付き書式の着色セル判定ツール』(半平太)
ここで、半平太さんが、2007以降で活用できるコードを紹介されています。 前提は【数式が】で設定されたものですが、【きも】は「Application.ConvertFormula」の扱いだと思いますので これを参考にされたらよろしいかと思います。
(β) 2015/03/08(日) 18:36
βさん
私のツールをご紹介いただいて、恐縮です。
今回は、条件付き書式の条件式は、既に判明しているので、 わざわざ、条件式をあぶりだして、Evaluateで判定するのは、 回り道と考えます。
個人的には、こんなケースでもチャンとワークするのか知りたい気持ちはありますが。。。
(半平太) 2015/03/08(日) 20:01
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.