[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『条件付き書式の表示』(たか)
各セルに設定した条件付き書式を一括に表示できないものでしょうか?
各セル一つ一つ表示させるしかないのでしょうか?
また、条件付き書式を印刷できますか?
98SE エクセル2000
どのセルに「条件付き書式」を組み込んだかを知る「検索」までしか、 出来ないような気がします。 スクリプトみたいに出力ができるのかな〜? どなたか、+アドヴァイスを。 (EUREKA)
思いつきで、ちょっと作ってみたんですが、、 条件付き書式があったらコメントに表示する?? でも、数式の時とそうじゃないときもあるし、、 駄目かな??改良すればなんとかならないかな? まぁ、一案ということで汗 範囲を選択してから実行 (SoulMan) Sub Macro1() Dim C As Range Dim i As Long Dim MyFormat() As Variant For Each C In Selection If C.FormatConditions.Count > 0 Then ReDim MyFormat(1 To 3) For i = 1 To C.FormatConditions.Count MyFormat(i) = C.FormatConditions.Item(i).Formula1 Next If TypeName(C.Comment) = "Nothing" Then With C.AddComment .Text Text:=CStr(MyFormat(1)) & Chr(10) & _ CStr(MyFormat(2)) & Chr(10) & _ CStr(MyFormat(3)) End With Else With C.Comment .Text Text:=CStr(MyFormat(1)) & Chr(10) & _ CStr(MyFormat(2)) & Chr(10) & _ CStr(MyFormat(3)) End With End If Else If Not TypeName(C.Comment) = "Nothing" Then C.ClearComments End If Next Erase MyFormat End Sub 相対参照の式の時に上手く表示されませんね汗
一応シートに書き出す場合も書いておきます。 同じく範囲を選択してから実行 シート2のA1から書き出します。 (SoulMan) Sub おまけ() Dim C As Range Dim i As Long, j As Long Dim MyFormat() As Variant For Each C In Selection If C.FormatConditions.Count > 0 Then j = j + 1 For i = 1 To C.FormatConditions.Count ReDim Preserve MyFormat(1 To 4, 1 To j) MyFormat(i + 1, j) = C.FormatConditions.Item(i).Formula1 Next MyFormat(1, j) = ActiveSheet.Name & C.Address(False, False) End If Next With Sheet2 With .Range("A1") .CurrentRegion.ClearContents If j = 0 Then Exit Sub .Resize(j, 3).Offset(1, 1).NumberFormatLocal = "@" .Resize(j, 4).Offset(1).Value = Application.WorksheetFunction.Transpose(MyFormat) .Value = "アドレス" .Range("B1").Value = "条件1" .Range("C1").Value = "条件2" .Range("D1").Value = "条件3" .CurrentRegion.Columns.AutoFit End With End With Erase MyFormat End Sub
たかさん!おはようございます。 上の二つのコードをAlt+F11でVBEを立ち上げて 標準モジュールを挿入して真っ白なところに貼り付けてください。 貼り付けたら、普通のエクセルに戻って D7からD47を選択した状態で ツール→マクロ→から Macro1 おまけ を実行してみてください。 でも、 >数式は使用していません。 だったら、多分駄目かもね(^^;; ヒヤアセ Formula1しか取得していないし、そっちの方は、パターンも色々あって 難しそうだから、、、σ(^◇^;) でも、お試し程度で、これを機にマクロでも勉強して、後は適当に応用してください。 ではでは、v(=∩_∩=)v (SoulMan)
SoulManさんの提示してくださったマクロをみて自分も勉強してみたっす。
>セルの値の条件が〜の間で以上、以下の場合はダメみたいですね。 これについて、セルの値の条件については C.FormatConditions.Item(i).Operator の値を参照する事で判断できる。 Operator の値は、 XlFormatConditionOperator クラスにて定義されている定数。 ヘルプから引くと、 FormatCondition の Operator は以下の値を取る。 xlBetween xlNotBetween xlEqual xlNotEqual xlGreater xlLess xlGreaterEqual xlLessEqual この中で、Operator が xlBetween 又は xlNotBetween の場合には Formula2 の値がセットされる。 その前に「数式が〜」なのか「セルの値が〜」なのかについては C.FormatConditions.Item(i).Type の値を参照する事で判断できる。 Type の値は xlFormatConditionType クラスにて定義されている定数。 ヘルプから引くと、 FormatCondition の Type は以下の値を取る。 xlCellValue xlExpression 以上を踏まえると、良い感じに。 ちなみに Windows2000 Excel2000 (ご近所PG)
ありがとうございます。(^^;; ヒヤアセ 流石!ご近所PGさん。 そうなんですよねぇ。。数式だけだったら、意外と簡単なんですけど、 もう一つの方のことを考えると、σ(^◇^;) でも、原型は出来てる?でしょ???? ここは一つ、たかさんの宿題?ということで?? それともぉ、、、、ご近所PGさんが、やってくれたりしてぇ???(^^;) いずれにしても学校らしくいい課題が出来たような? v(=∩_∩=)v (SoulMan)
自分では検証済みコードは作成済みなので誰かしらの要望があれば載せてみるっす。 >いずれにしても学校らしくいい課題が出来たような? と、自分も思ったので「こうやると良いんでない?」って 方向性だけとりあえず載せて見たっす。 >でも、原型は出来てる?でしょ???? SoulManさんのマクロが無ければ自分だけでは思いつきもしなかったっす。 Excelむずいっす。 (ご近所PG)
ご近所PGさんの話を(゚ー゚)(。_。)うんうんって聞いてたら、出来ちゃったです。(^^;; ヒヤアセ (はじめからやれって?(^^;;;) 今日はこれから出かけるのでシート編はご近所PGさんにお願いするか また、暇な時にね(^_^X) とりあえずコメント編 v(=∩_∩=)v (SoulMan) 一部訂正 2004/09/26 10:10 2004/09/26 10:30 2004/09/29 20:06 Sub 条件付き書式コメント編() '***************************** '変数の宣言 Dim C As Range Dim i As Long Dim MyFormat() As String '画面更新の停止 Application.ScreenUpdating = False '******************************** 'あらかじめ選択された範囲に対してループのはじまり For Each C In Selection '相対参照ずれ防止 C.Select With C.FormatConditions '条件付き書式があったら If .Count > 0 Then '動的配列 MyFormat にメモリ領域の再割り当てを行う ReDim MyFormat(1 To 3) For i = 1 To .Count With .Item(i) '条件付き書式の種類を判断 If .Type = xlCellValue Then Select Case .Operator Case xlBetween MyFormat(i) = "次の値の間" & .Formula1 & "と" & .Formula2 Case xlNotBetween MyFormat(i) = "の間以外" & .Formula1 & "と" & .Formula2 Case xlEqual MyFormat(i) = "次の値に等しい" & .Formula1 Case xlNotEqual MyFormat(i) = "次の値に等しくない" & .Formula1 Case xlGreater MyFormat(i) = "次の値より大きい" & .Formula1 Case xlLess MyFormat(i) = "次の値より小さい" & .Formula1 Case xlGreaterEqual MyFormat(i) = "次の値以上" & .Formula1 Case xlLessEqual MyFormat(i) = "次の値以下" & .Formula1 End Select Else MyFormat(i) = "数式が" & .Formula1 End If End With Next '**************************************** 'コメントがなかった場合 If TypeName(C.Comment) = "Nothing" Then With C.AddComment .Text Text:=MyFormat(1) & Chr(10) & _ MyFormat(2) & Chr(10) & _ MyFormat(3) End With Else 'コメントがあった場合 With C.Comment .Text Text:=MyFormat(1) & Chr(10) & _ MyFormat(2) & Chr(10) & _ MyFormat(3) End With End If Else '条件付き書式がなくてコメントがあったらコメントをクリア If Not TypeName(C.Comment) = "Nothing" Then C.ClearComments End If End With Next '画面更新の解除 Application.ScreenUpdating = True '配列の初期化 Erase MyFormat End Sub
>コードは作成済みなので ありゃま、私がお願いします。v(=∩_∩=)v (SoulMan)
失礼!条件付き書式が無かった時に前のリストが残るので、 一部修正しました。m(__)m 2004/09/26 8:40 2004/09/26 10:10 2004/09/26 10:28 2004/09/29 20:07 Sub 条件付き書式シート編() '************************ '変数の宣言 Dim C As Range Dim i As Long, j As Long Dim MyFormat() As String '************************* '画面の更新停止 Application.ScreenUpdating = False '******************************** 'あらかじめ選択された範囲に対してループのはじまり For Each C In Selection '相対参照ずれ防止 C.Select With C.FormatConditions '条件付き書式があったら If .Count > 0 Then j = j + 1 '動的配列 MyFormat を要素が追加出来る様に行列を逆にして 'メモリ領域の再割り当てを行う ReDim Preserve MyFormat(1 To 4, 1 To j) For i = 1 To .Count With .Item(i) '条件付き書式の種類を判断 ' セルの値が「xlCellValue」数式が「xlExpression」 '今回は「xlCellValue」のみで判断している。 If .Type = xlCellValue Then Select Case .Operator 'アドレスを追加できる様にプラス1している。 Case xlBetween MyFormat(i + 1, j) = "次の値の間" & .Formula1 & "と" & .Formula2 Case xlNotBetween MyFormat(i + 1, j) = "の間以外" & .Formula1 & "と" & .Formula2 Case xlEqual MyFormat(i + 1, j) = "次の値に等しい" & .Formula1 Case xlNotEqual MyFormat(i + 1, j) = "次の値に等しくない" & .Formula1 Case xlGreater MyFormat(i + 1, j) = "次の値より大きい" & .Formula1 Case xlLess MyFormat(i + 1, j) = "次の値より小さい" & .Formula1 Case xlGreaterEqual MyFormat(i + 1, j) = "次の値以上" & .Formula1 Case xlLessEqual MyFormat(i + 1, j) = "次の値以下" & .Formula1 End Select Else MyFormat(i + 1, j) = "数式が" & .Formula1 End If End With Next '一つ空けたインデックスに「アドレス」を代入する。 MyFormat(1, j) = ActiveSheet.Name & C.Address(False, False) End If End With Next '*************************************** '転記先のシート2をクリアにする。 Worksheets("Sheet2").Cells.ClearContents 'カウンターがあったら If j > 0 Then With Worksheets("Sheet2") With .Range("A1") .Value = "アドレス" .Range("B1").Value = "条件1" .Range("C1").Value = "条件2" .Range("D1").Value = "条件3" .Resize(j, 3).Offset(1, 1).NumberFormatLocal = "@" 'ワークシート関数 Transpose で行列を逆にしている。 .Resize(j, 4).Offset(1).Value = Application.WorksheetFunction.Transpose(MyFormat) .CurrentRegion.Columns.AutoFit End With End With '配列の初期化 Erase MyFormat End If '画面更新の解除 Application.ScreenUpdating = True End Sub コメントが出来たら中身を変えるだけでしたぁ(^^;; ヒヤアセ ではでは、行ってきます。 v(=∩_∩=)v おっと!署名忘れあいあむあ「SoulMan」v(=∩_∩=)v
ほぼ一緒なので私の方では改めてコードは載せないっす。 一部だけ…動作には変わりない点だけど、
>If .Type = 1 Then 「= 1」と固定値を使うよりはExcel定数 xlCellValue xlExpression を使用して判断した方が好ましいです。 コードから意味を読み取りやすくなるという点と、 (まず無いと思うが)今後定数値が変更された場合を考慮。
>ReDim Preserve MyFormat(1 To 4, 1 To j) の位置ですが、 >j = j + 1 の直後でOKでしょう。For〜Nextの中にある必要は無いかな。
>If j = 0 Then Erase MyFormat: Exit Sub 無理にここでErase 及び Exit Subを行うよりは素直に最後まで行った方が 処理的にも見栄え的にも好ましいかな。 If j > 0 Then '書式があった時だけセット End If とかで。 With でくくられた中から直接 Exit Sub で抜けてしまうのは避けたほうが無難です。 と、細かい所ばかり突っ込む。 (ご近所PG)
ご近所PGさん!こんばんは! 今、飲み会から帰ってきましたぁ、、 いくつかのご指摘点、その通りだと思います。汗 というか、これって、ご近所PGさんの親心だったのかな?と思います。 というのは、最初に考えた時に性格的に投げちゃったのねσ(^◇^;) 今も解決されているかどうかわからないけど、相対参照の解決策に走っちゃたんです。 でも、出来なくて(;^_^A あせあせ・・・・ で、飲み会の時に考えていたのですが、「ご近所PGさんのコードは載ってるかなぁ??」って で、多分載ってないなっと思いました。 申し訳ないですが、今は思考回路が完全に寸断されていますので、後日、ご指摘の点を 修正したいと思います。 特に、 >If j = 0 Then Erase MyFormat: Exit Sub は、ありえない処理かな(^^;; ヒヤアセ 今回は、大変勉強になりました。 ありがとうございました。 これからも、ご指導ご鞭撻のほどよろしくお願い致します。 ご近所PGさんのレスが無かったら、、あのままほり投げていたと思います。 また一つ大きな収穫を得た気がします。本当にありがとうございました。m(__)m やっぱり、この学校は素晴らしいです。 ではでは、飲酒運転中ですが、これからもよろしくお願い致します。 あいあむあ(SoulMan)v(=∩_∩=)v
おはようございます。 ご指摘の点を修正しました。(スレッドが長くなるので上のコードを修正しています。) まだ、他にもありましたら、どんどん突っ込んじゃってください。(^^;; ヒヤアセ よろしくお願い致します。m(__)m ところで、トピ主のたかさんは、もう見てないかな???(^^;;; ではでは、v(=∩_∩=)v 追伸!一つ前のレスでご近所PGさんの敬称が抜けておりました。 大変失礼いたしました。すみませんでした。ごめんなさいm(__)m (SoulMan)
本当は↓かな?と、ちょっこっと考えた時もありましたぁ。 Sub 表示() Application.Dialogs(xlDialogConditionalFormatting).Show End Sub v(=∩_∩=)v (SoulMan)
これ数式のセル参照がずれませんか?
どうでもいいことですが、Dim MyFormat() As Variant
はStringでもよいような。
Worksheets("Sheet2").Range("A1").CurrentRegion.ClearContentsは
全部消していいなら
Worksheets("Sheet2").Cells.ClearContents
(ramrun)ぉはょぅ
ramrunさま、おはようございます。m(._.)m ペコッ >これ数式のセル参照がずれませんか? それなんですよ!それ!相対参照の時のことでしょ??? (違ってたら(×_×;)ぐしゅん) それを、止められなくて、嫌になって(・_・ )ノ" ゜ ポイッ しちゃったんです。。( ̄□ ̄;)!! 止められませんか? その他のご指摘の点は、訂正させていただきます。 ありがとうございました。m(__)m v(=∩_∩=)v (SoulMan)
For Each C In Selection の下に C.Select あたりが一番簡単だと思います。
"さま"付けでしたっけ(笑)。
(ramrun)
しっしっしっしっしっしっ師匠!!!!!!
ありがとうございましたぁm(__)m
↑これ以上の顔文字を知らない(×_×;)グシュン
>"さま"付けでしたっけ(笑)。 いやだなぁ(^^;; ヒヤアセ いつも、そうですよσ(^◇^;) これからも、よろしくお願い致します。m(__)m v(=∩_∩=)v (SoulMan)
色々改良された様子で。 正直言って私はこの学校で色々見るまで、 「条件付き書式」っていうものの存在を知りませんで(まて) 相対参照ってものがあるんすね。 いや〜Excelって本当に難しいものっすね。 せっかくここまで伸びたので、コーディング面で一つ。 コメントは出来るだけ入れた方がいいっす。 よく言われることに「一ヶ月前のコードは他人のコード」みたいなのがあるっす。 たとえ自分が作ったものでも一ヶ月経つと他人が作ったもののように訳が解らなくなる、 という意味っす。 私は「他人の為」というより「未来の自分の為」にコメントを細かく入れるように 心掛けているっす。 (とはいえ流石にそこまでこの公の場でやるのは難しい&個人又は管理者の判断か) まぁ舅姑の老婆心から来る小言とでも思って適当に流してくださいっす。 あとどーでもいいのが一つ >"の間以外" となってたのが無性に気になったので直したっす。 (ご近所PG)どうしても長話になるな…(笑)
僭越ではございますが、ご近所PGさんのせっかくのご提案ですので コメントを入れさせていただきました。(^^;; ヒヤアセ 今後とも、ご指導ご鞭撻のほどよろしくお願い致します。m(__)m あってる???かなぁ??? v(=∩_∩=)v (SoulMan)
解決済みのモノに更に時間をかけさせてしまったようで失礼。 コメント云々は自由だと思いますんで、適度に捕らえてください。 でもコメントが入ったおかげで「なるほどそう言う思考の流れなのか」 というのが見えやすくなりました。感謝。 今回のにコメントが入った事で知った事〜 'ワークシート関数 Transpose で行列を逆にしている。 なるほどそういう意味だったのか、と、初めて知った私っす(笑) (ご近所PG)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.