- ベストアンサー
塗りつぶしの色の取得方法 エクセルVBA
エクセルのメニューバーに塗りつぶしボタン(斜めになったバケツの絵)があり、最後に使った色になっています。 この色の値を知るにはどのようにしたらよいでしょうか? 尚、現在セレクトしているセルの色は関係ありません。 それから、カラーパレットなどを表示して簡単に色を選択する方法はないでしょうか。 よろしくお願い申し上げます。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 ご質問の趣旨は、やっと最後で分かりました。 >エクセルを立ち上げてすぐこの作業を行う場合、以前使用した色を使いたいと思っています。 この部分があるなしでは、マクロの内容のレベルがかなり開きがあります。それ自体は、大した問題ではないと思います。 ちょっと、こちらの制作意欲がなえてしまいましたが、 ひとつは、やっぱり固定なら、ボタンを使うことですし、 以下のようなマクロなら、 「6」の部分をグローバル変数にしておいて、 With Selection.Interior .ColorIndex = 6 End With #4のマクロを終了時(BeforeClose)に、色番号(ColorIndex)の変換をして、その番号を、 .CustomDocumentProperties に保存しておけば、次に開いたときに取れます。
その他の回答 (5)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 今、読み直してみました。 >一旦エクセルを終わらせると以前の色は覚えていないのですね。 そんなことは、大した問題ではありません。 少なくとも3種類は他のファイルを使わないで保存する方法があります。 私には、途中からご質問の内容が変わったような気がします。 具体的にはどうしたいか、ということですが、本当は、良くわかっていません。 >現在マーキングする色は固定で、変える時はVBAを書き換えていますが、これを簡単に指定する方法を調べています 今回のような質問を、私は、今まで出会ったことがありません。 もしかしたら、塗りつぶしの色のグリッドの中身の設定を変えるということではないでしょうか?それは、できる人がいるような気もしますが、その基本的な考え方が、少なくともマクロという範疇ではないので、私は、それは追わないようにしています。それを追っても、ワザだけになってしまうからです。既存のものは、やっても難しいだけのような気がするのです。 それ自体は、固定の色にするなら、ユーザー設定のツールボタンを使えばよいと思うのです。それを、ユーザー設定のツールバーの中に入れてあげればよいわけです。
補足
やりたいことは最初から変わっていません。 ある列を選択して、任意の文字列が含まれているセルをマーキング(色をつける)すると言うものです。 現在色を変える時はVBAの色指定をダイレクトに書き換えています。 下のVBAのColorIndexの部分です。 With Selection.Interior .ColorIndex = 6 End With これを、スマートかつ簡単に色の変更を行いたいと考えていました。 それでメニューバーにある塗りつぶしのバケツを使うことを思いついたわけです。 エクセルを立ち上げてすぐこの作業を行う場合、以前使用した色を使いたいと思っています。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 >この色の値を知るにはどのようにしたらよいでしょうか? 色の名前が取れますから、後は、ワークシート関数や配列を使って、色番号に変換すればよいと思います。 Sub getColorName() Dim myColor With Application.CommandBars("Formatting").FindControl(, 1691) If myColor Like "配色*" Then myColor = "色つぶしなし" myColor = .Controls("配色(&C)").TooltipText MsgBox myColor End With End Sub ただし、ユーザー設定の色に関しては、自分で作ったリストを修正してください。 >カラーパレットなどを表示して簡単に色を選択する方法はないでしょうか。 それ自体を抜き出してどうこうということはありえないと思います。次のステップがあるはずですから、そのダイアログを出せばよいと思います。 例: Sub testPalette() Application.Dialogs(xlDialogPatterns).Show End Sub 後は、ご自身で工夫してください。
補足
回答ありがとうございます。 実行して上手く行ったと思ったのですが、一旦エクセルを終わらせると以前の色は覚えていないのですね。 と言うより、エクセルを立ち上げた状態では値を得ることはできないようですね。 何も実行しないで値を売るというのは無い物ねだりのようですね。 一度色を選択してから実行するようにいたします。
- popesyu
- ベストアンサー率36% (1782/4883)
カラーパレットはブック毎に保存されているのですが、初期値はおそらく、27番を示していることになるかと思われます。ただ一旦他の色を選択するとその最後のものが先頭?というか表に表示されることになるようですが、その値は起動しなおすと元にもどることから、設定やレジストリに残る値ではありません。メモリ上に残しているだけでしょう。ですので、もし本気で抜き取るのであれば、メモリ上の値を直接ぶっこぬくしかありません。相当に手間がかかることが予想されます。 次善の策としては、カラーパレットを自作するということでしょうか。そうすれば常に最後に使われた色を保持させておくことが簡単にできます。 http://members3.jcom.home.ne.jp/daruma_kyo/class/colorPalette_unique.html カラーパレットなどを表示して簡単に色を選択する方法 簡単と思われる順に ・単純に標準のカラーパレットをドラッグしてそのまま表示させる ・APIを利用する http://homepage1.nifty.com/MADIA/vb/API/CHOOSECOLOR.htm ・VBのコモンダイアログを利用する
補足
回答ありがとうございます。 やはりカラーパレットを自作するしかないようですね。
- x0000x
- ベストアンサー率52% (67/127)
こんばんは。 色とインデックス一覧は以下です。 Sub ColorIndex() Set objExcel = CreateObject("Excel.Application") objExcel.Visible = True Set objWorkbook = objExcel.Workbooks.Add() Set objWorksheet = objWorkbook.Worksheets(1) For i = 1 To 14 objExcel.Cells(i, 1).Value = i objExcel.Cells(i, 2).Interior.ColorIndex = i Next For i = 15 To 28 objExcel.Cells(i - 14, 3).Value = i objExcel.Cells(i - 14, 4).Interior.ColorIndex = i Next For i = 29 To 42 objExcel.Cells(i - 28, 5).Value = i objExcel.Cells(i - 28, 6).Interior.ColorIndex = i Next For i = 43 To 56 objExcel.Cells(i - 42, 7).Value = i objExcel.Cells(i - 42, 8).Interior.ColorIndex = i Next End Sub 実行することで、色のインデックスと色をEXCELシートに展開します。
補足
回答ありがとうございます。 色の値は分かっています。 あるシートを検索して該当個所にマーキングするマクロを作りました。 現在マーキングする色は固定で、変える時はVBAを書き換えていますが、これを簡単に指定する方法を調べています。
- k-f3
- ベストアンサー率31% (945/3036)
>カラーパレットなどを表示して簡単に色を選択する方法はないでしょうか。 塗りつぶしボタン(斜めになったバケツの絵)の右横の、下向きの三角ボタン▼を押してみてください。
補足
回答ありがとうございます。 三角ボタンで選んだ色をVBAで使用する為に知りたいのですが・・・
お礼
回答ありがとうございます。 CustomDocumentPropertiesとは面白い機能ですね。 自分でプロパティを設定して保存しておけるのですね。