今だけ人気マンガ100円レンタル特集♪

ご存じの方がいらしたらご教示お願いします。
 http://oshiete1.goo.ne.jp/qa3061670.html
を拝見して疑問に思ったことですが、塗りつぶし色のカラーパレットに表示するToolTipの「色名」はVBAで取得可能でしょうか

色だけであれば
 ActiveWorkbook.Colors(n) nは0~56
で取得できます。でもパレットの各色にマウスをポイントしたときにポップアップする「色名」はどんなコレクションで取得できるのでしょうか。

またカラーパレットで前回選択した色は「選択された状態」になっていますが、パレットの「この色が選択されている」ということを取得するプロパティもあるのでしょうか。

この質問は「現在選択されている色」は色名(文字列)としてなら
 Application.CommandBars("Drawing").Controls(n).TooltipText
  ( n は ID=1691 のコントロールのIndex番号 )
で取得できるので、各パレットの「色名」を取得できれば、現在選択されているColorも取得できると考えての質問です

このQ&Aに関連する最新のQ&A

A 回答 (2件)

こんにちは。



おもしろそうだったので、色名からカラーインデックス変換までを関数
化してみましたが....

たぶん、カラーパレットの Click イベントをフックするのは無理では
ないかと思います。

' // 現在カラーパレットで選択されている色のカラーインデックスを返す
Public Function GetColorIndexFromPallet() As Long
  
  ' // ※ セル着色用パレット分しか対応してませんが、一応カスタマイズ
  ' // ※ されたパレットでも大丈夫なようです
    
  Dim sText As String
  Dim vBuf As Variant
  Dim i   As Long
  
  ' // Excel ディフォルトパレット
  Const COLOR_NAME As String = "自動," _
     & "黒,茶,オリーブ,濃い緑,濃い青緑,濃い青,インディゴ,80% 灰色," _
     & "濃い赤,オレンジ,濃い黄,緑,青緑,青,ブルーグレー,50% 灰色," _
     & "赤,薄いオレンジ,ライム,シーグリーン,アクア,薄い青,紫,40% 灰色," _
     & "ピンク,ゴールド,黄,明るい緑,水色,スカイブルー,プラム,25% 灰色," _
     & "ローズ,ベージュ,薄い黄,薄い緑,薄い水色,ペールブルー,ラベンダー,白"
  Const COLOR_IDEX As String = "-4142," _
     & "1,53,52,51,49,11,55,56," _
     & "9,46,12,10,14,5,47,16," _
     & "3,45,43,50,42,41,13,48," _
     & "7,44,6,4,8,33,54,15," _
     & "38,40,36,35,34,37,39,2"
  
  AppActivate (Application.Caption)
  With Application.CommandBars.Add(Temporary:=True)
     sText = .Controls.Add(ID:=1691).TooltipText
     sText = Mid$(sText, InStr(sText, "(") + 1)
     sText = Left$(sText, Len(sText) - 1)
     .Delete
  End With
  ' // ToolTipText からカラーインデックスを取得する
  vNam = Split(COLOR_NAME, ",")
  vIdx = Split(COLOR_IDEX, ",")
  For i = 0 To UBound(vNam)
    If sText = CStr(vNam(i)) Then
      GetColorIndexFromPallet = CLng(vIdx(i))
      Exit For
    End If
  Next i

End Function
    • good
    • 0
この回答へのお礼

わざわざマクロを書いていただき、ありがとうございます

やはり色名→ColorIndexの変換は、自分でテーブルもしくは配列を準備しないとならないのですね。もしカラーパレットのコレクションがあればより簡単に取得できるかと考えたのですが…

納得できました。回答ありがとうございました。

お礼日時:2007/06/07 19:13

こんばんは。



いつも読ませていただいております。

>塗りつぶし色のカラーパレットに表示するToolTipの「色名」はVBAで取得可能でしょうか

この前、この話は出ていたと思いますが、現在のは、ツールアイコン(ControlGrid) の中の選択に関してで、「塗りつぶし」の中に関してのみです。

最初の開いている状態での、マクロの登録した時の第一回目だけ、このマクロはデフォルトなのか、塗りつぶしなのか、区別がつかないことがあるだけですが、後は大丈夫だと思います。(理由は、Static 変数で、InstanceIdを確保していないからです。最初、デフォルトの色と塗りつぶしなしとは分からないからです。InstanceID自体は、何も意味がありませんが、マクロの第一回目を取得するためです。)


Sub getColorName()
Dim myColor As String
Const DEFCOLOR As String = "黄"
Static oldID As Long
 With Application.CommandBars("Formatting").FindControl(, 1691)
  oldID = .Controls("配色(&C)").InstanceId
  myColor = .Controls("配色(&C)").TooltipText
  If myColor Like "配色*" And oldID > 0 Then
     myColor = "色つぶしなし"
  ElseIf myColor Like "配色*" Then
    myColor = DEFCOLOR
  End If
    MsgBox myColor
 End With
End Sub


前回、実は、この ControlGrid には、新たに、RaiseEventでイベントを付けようとしたのですが、それに失敗して、最初の思惑とはだいぶ規模の小さな解決になってしまいました。(^^;
    • good
    • 0
この回答へのお礼

いつも勉強させていただいております
先日の質問も拝見していましたが「Global変数で前回の塗りつぶし色を記憶しておく」方法を紹介されており、ボタンから色を取得する方法については参考程度に書かれていたので、自分なりに考えてみた次第です

今回教えていただいたことを手がかりに深堀りしてみます
ご回答ありがとうございました

お礼日時:2007/06/07 09:35

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QExcelのVBAで、色の選択のダイアログ

エクセルのVBAで、色の選択が出来るようにしたいと思っています。セルの書式のパターンのタグを選択した時の左側部分のみの画面を表示して、ユーザーに色を選択させて、戻り値を得ることって出来るのでしょうか?どなたか詳しい方いらっしゃいましたら教えてください。宜しくお願い致します。(出来れば、オプション-色-変更で出てくる色の設定も教えてください)

Aベストアンサー

Sub Macro1()
res = Application.Dialogs(xlDialogPatterns).Show
End Sub

このマクロを実行してみてください。ただし戻り値が色番号になるわけではありません。塗りつぶされた色をActiveCell.Interior.ColorIndexで取得することは可能だと思います。

オプション-色-変更の組み込みDialogは以下になります
Sub MacroB()
res = Application.Dialogs(xlDialogColorPalette).Show
End Sub

Q塗りつぶしの色の取得方法 エクセルVBA

エクセルのメニューバーに塗りつぶしボタン(斜めになったバケツの絵)があり、最後に使った色になっています。
この色の値を知るにはどのようにしたらよいでしょうか?
尚、現在セレクトしているセルの色は関係ありません。
それから、カラーパレットなどを表示して簡単に色を選択する方法はないでしょうか。
よろしくお願い申し上げます。

Aベストアンサー

こんにちは。

ご質問の趣旨は、やっと最後で分かりました。

>エクセルを立ち上げてすぐこの作業を行う場合、以前使用した色を使いたいと思っています。

この部分があるなしでは、マクロの内容のレベルがかなり開きがあります。それ自体は、大した問題ではないと思います。

ちょっと、こちらの制作意欲がなえてしまいましたが、
ひとつは、やっぱり固定なら、ボタンを使うことですし、

以下のようなマクロなら、 「6」の部分をグローバル変数にしておいて、
With Selection.Interior
 .ColorIndex = 6
End With

#4のマクロを終了時(BeforeClose)に、色番号(ColorIndex)の変換をして、その番号を、
 .CustomDocumentProperties に保存しておけば、次に開いたときに取れます。
 

QExcelVBAで、ColorIndexの取得

エクセルのVBAで、組み込みダイアログを使用して、色の選択が出来ないか?奮闘しています。
Application.Dialogs(xlDialogColorPalette).Show
を、使用することを考えたのですが、選択したカラーインデックスをどのように取得できるのか?判りません。どなたか詳しい方いらっしゃいましたら教えて貰えないでしょうか?よろしくお願いいたします。
エクセルのカラーパレットのインデックスナンバーの選択と取得が出来れば、どのような方法でもかまわないのですが・・・?

Aベストアンサー

#3の追伸です。

ためしに、UserForm に CommonDialog を付けて
CommonDialog は、Office 2002? 以上には、ActiveX コントロールとして、標準的についています。

  CommonDialog1.ShowColor

として、カラーダイアログを使ってみましたが、個人的には、便利だとは思えませんでした。
こういうやり方もあるなって程度です。

UserForm モジュール
UserForm ひとつと、CommandButton、TextBox それぞれ一つずつ。
MsgBox が出ないものは、ColorIndex がありません。

'-----------------------------------

Const sCOLORS As String = "0,FFFFFF,FF,FF00,FF0000,FFFF,FF00FF,FFFF00,80,8000," & _
"800000,8080,800080,808000,C0C0C0,808080,FF9999,663399,CCFFFF,FFFFCC," & _
"660066,8080FF,CC6600,FFCCCC,800000,FF00FF,FFFF,FFFF00,800080,80,808000," & _
"FF0000,FFCC00,FFFFCC,CCFFCC,99FFFF,FFCC99,CC99FF,FF99CC,99CCFF,FF6633," & _
"CCCC33,CC99,CCFF,99FF,66FF,996666,969696,663300,669933,3300,3333,3399," & _
"663399,993333,333333"

Private Sub CommandButton1_Click()
Dim arColor As Variant
Dim num As String
Dim ret As Variant
  arColor = Split(sCOLORS, ",")
  CommonDialog1.Color = TextBox1.BackColor
  CommonDialog1.Flags = CommonDialog1.Flags Or MSComdlg.ColorConstants.cdlCCRGBInit
  
  CommonDialog1.CancelError = True
  On Error Resume Next
  
  CommonDialog1.ShowColor
  ret = Empty
  num = Hex(CommonDialog1.Color)
  ret = WorksheetFunction.Match(num, arColor, 0)
  TextBox1.BackColor = CommonDialog1.Color
  If Not IsEmpty(ret) Then
    MsgBox ret
  End If
  
  On Error GoTo 0
End Sub

#3の追伸です。

ためしに、UserForm に CommonDialog を付けて
CommonDialog は、Office 2002? 以上には、ActiveX コントロールとして、標準的についています。

  CommonDialog1.ShowColor

として、カラーダイアログを使ってみましたが、個人的には、便利だとは思えませんでした。
こういうやり方もあるなって程度です。

UserForm モジュール
UserForm ひとつと、CommandButton、TextBox それぞれ一つずつ。
MsgBox が出ないものは、ColorIndex がありません。

'-------------------------...続きを読む

QExcel VBA マクロ カラーパレットで図形の色を変えるとき

Excelのマクロを始めたばかりの初心者です。
図形の色を変更するために、
Application.Dialogs(xlDialogPatterns).Show
でカラーパレットを出して、選択しようと思いました。
しかし、セルを選択した時のカラーパレットと図形を選択した時のカラーパレットは
同じものではありませんでした。
セルを選択したときは"その他の色"も選択できたのですが、図形を選択した時は
"その他の色"は選択できません。
図形を選択したときも、セルを選択した時のカラーパレットにすることはできませんか?
もしくは、"その他の色"を選択できるようにはできませんか?
ご教授よろしくお願いいたします。

Aベストアンサー

こんにちは

確かにご指摘のように表示されるパレットの内容が変わるようですね。
図形を右クリックした時の「図の書式設定」のダイアログがないか探してみましたが見当たらないようでした。(ID=1~2000まで見てみました。)

ご質問の操作がどのようなシチュエーションを想定なさっているのかよくわかりませんが、上述のように右クリックのメニューからダイアログを出せますし、クイックツールバーに「図の塗りつぶし」を登録しておくことでも1クリックでダイアログを出せるようにできます。
これって、マクロを実行するのと手間としてはほとんど変わらないような気がしますが・・・


などと言っているばかりでは回答にならないので、代替案を考えてみました。
一つは、質問者様がなさろうとしていることの延長上で、もう一つは少し違った方法です。

一つ目の考え方は、
 1)(使わない)セルを選択した状態でダイアログを出す
   (ユーザの操作が終わると、セルに色が反映されている)
 2)セルの色を取得する
 3)2で取得した色で、図形を塗りを行う
というマクロを作成するものです。
お考えの方法より、若干手順が長いかも知れませんが、一応目的は達成できるかと思います。

二つ目の方法は、マクロでコマンドリボンの操作を行うという考え方です。
通常の設定だと、ALT、H、H、Mの順でキーを押すと「その他の色」のダイアログが表示されますので、これを行うだけのマクロです。
(ショートカットなどを変更している場合は、キーの内容が変わりますのでご注意。)
以下はこの方法のサンプルです。(図形を選択した状態でマクロを実行してください)
Sub test()
SendKeys "%H", True
SendKeys "HM", True
End Sub


長々と書きましたが、最初に記しましたように、マクロを実行する手間とほぼ同様の操作で手動でダイアログの表示ができてしまうので、あまり有用な気はしないのですが・・・

こんにちは

確かにご指摘のように表示されるパレットの内容が変わるようですね。
図形を右クリックした時の「図の書式設定」のダイアログがないか探してみましたが見当たらないようでした。(ID=1~2000まで見てみました。)

ご質問の操作がどのようなシチュエーションを想定なさっているのかよくわかりませんが、上述のように右クリックのメニューからダイアログを出せますし、クイックツールバーに「図の塗りつぶし」を登録しておくことでも1クリックでダイアログを出せるようにできます。
これって、マクロを...続きを読む

Qエクセルのマクロでセルに色を付けたい

エクセルでセルに色を付けるマクロを作る場合の
色の選択なのですが、特定の色を付けるのではなく、
そのマクロを実行した時に選択されている
「塗りつぶしの色」のボタンのバケツの色にするには
どうしたら良いでしょうか?

よろしくお願いいたします。

Aベストアンサー

ボタンの色番号をマクロで取得することができるかどうかは、わかりま
せん。おそらくできないと思います。
代替案として、こういうステップのマクロ構成はいかがでしょう。

1.ボタンの色が変わるということは、変わった時点でアクティブだった
 セルが塗りつぶされているということですから、そのセルで色を取得
 します。(そのセルを選択して、下記 "GetColor" を実行)
2."GetColor" を実行しますと、その色番号が MyCol という名前で定義
 されますので、以降のマクロでは、下記 "PaintCell" のようにして
 色番号を取得します。

Sub GetColor()
 ActiveWorkbook.Names.Add Name:="MyCol", _
      RefersToLocal:=Selection.Interior.ColorIndex
End Sub
'
Sub PaintCell()
 Dim C
 C = Replace(ActiveWorkbook.Names("MyCol"), "=", "")
 Selection.Interior.ColorIndex = C
End Sub

ボタンの色番号をマクロで取得することができるかどうかは、わかりま
せん。おそらくできないと思います。
代替案として、こういうステップのマクロ構成はいかがでしょう。

1.ボタンの色が変わるということは、変わった時点でアクティブだった
 セルが塗りつぶされているということですから、そのセルで色を取得
 します。(そのセルを選択して、下記 "GetColor" を実行)
2."GetColor" を実行しますと、その色番号が MyCol という名前で定義
 されますので、以降のマクロでは、下記 "PaintCell" のよ...続きを読む

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

QVB上で実行中の無限ループの止め方

今まで、CUIベースのBASICでのプログラムの経験はあるのですが
Visual系のBASICは初心者です。
原因はわかっているのでプログラムの修正はできるのですが
VB上でコンパイルして実行したときに無限ループに陥ってしまって
どうにもプログラムをとめられなくなります。
そんなことがないように、実行前に全てのプロジェクトを保存して
いますので、そんなに実害はないのですが、どうすればとめられるのでしょう・・
今現在は、タスクマネージャーから強制終了させています。

Aベストアンサー

無限ループの一番内側に
DoEvents
を入れておくと、ウィンドウ切替え->デバッガ終了操作が出来ますよ

危なそうなとこにも入れておくと、何かと安心です。

QExcel VBAで、ユーザーフォームの値を、モジュールで使用したい。

VBA初心者です。(おそらく)基本的な質問で、申し訳ありません。
ユーザーフォーム1には、テキストボックス1とコマンドボタン1が配置されているとします。

Sub TEST ()
Dim N
Userform1.Show
MsgBox N
End Sub

Private Sub CommandButton1_Click()
Dim N
N = TextBox1.Text
UserForm1.Hide
End Sub

Sub TESTを実行した時に、ユーザーフォーム1からNの値を引き継ぐには、どうしたら良いのでしょうか?よろしくお願いします。

Aベストアンサー

'モジュールに変数宣言(グローバル変数)
'Public 宣言すると他のモジュールやフォームと
'共有できる変数になります。
Public AA As String

'sample
'A1 を実行する。

Sub A1()
Call A2
AA = InputBox("input", , AA)
End Sub

Sub A2()
AA = InputBox("input", , AA)
End Sub

QエクセルVBAでUserFormを起動した時

エクセルVBAでUserFormを起動した時に自動的に実行される動作を記述したいのですが、
どうすればよいでしょうか?

Private Sub UserForm1_Load()

End Sub

だとだめでしょうか?

Aベストアンサー

こんにちは。お邪魔します。

> UserFormを起動した時
というのが、一意の表現ではないので、
多少混乱しているようですが、

UserFormを読み込んだ時、
にあたるイベントが
Private Sub UserForm_Initialize()

End Sub

UserFormを表示(再表示)した時
にあたるイベントが
Private Sub UserForm_Activate()

End Sub

という感じです。

UserFormを読み込みながら表示する場合、
(UserFormが読み込まれていない状態で、UserForm.Show、など)
UserForm_Initialize()
の次に
UserForm_Activate()
が発効します。

UserForm(のインスタンス)が読み込まれてている間、
常に有効にしたいプロパティ設定などは
UserForm_Initialize()

UserFormを表示した時の条件によって処理を換えたい場合などは
UserForm_Activate()

といった感じの使い分けをします。

こんにちは。お邪魔します。

> UserFormを起動した時
というのが、一意の表現ではないので、
多少混乱しているようですが、

UserFormを読み込んだ時、
にあたるイベントが
Private Sub UserForm_Initialize()

End Sub

UserFormを表示(再表示)した時
にあたるイベントが
Private Sub UserForm_Activate()

End Sub

という感じです。

UserFormを読み込みながら表示する場合、
(UserFormが読み込まれていない状態で、UserForm.Show、など)
UserForm_Initialize()
の次に
UserForm_Activate()
が発効します...続きを読む

QエクセルVBAで条件付書式の色を取得

セルに条件付書式で書式設定してあります。

A1は「値」100以下
A2は「値」500以下
A3は「値」1~10の間
B1は「数式」で=B1<A1
以下さまざまな数式があります。

条件に一致すると、セルの文字が「赤」になります。

このとき、
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox Target.Font.ColorIndex
End Sub
を実行しても、ColorIndexは、赤の「3」ではなく「-4105」と表示されます。
「-4105」は何もフォントの色を指定してないセルでも同じく表示されます。

質問1.条件付書式で、条件が一致して表示されたフォントの色は取得できないのでしょうか?

質問2.-4105とは何でしょうか?

Aベストアンサー

merlionXXさん、いつも、スレッドでおさがわせしてすみません。

今回は、別なところで、KenKen_SPさんのコードに感化されまして、私としては、良い勉強させていただいております。

さて、
>No4で教えていただいたコートが「数式が」しか対応しないなら、条件付書式の方を「セルの値が」を「数式が」に変えてやればいいわけですよね?

#9 のコードは、「数式が」でも、「セルの値が」でも、両方使えるはずだと思って作っております。

If .FormatConditions(i).Type = 2

というところで、振り分けをしています。

>「値」の定義?(等しい、間、以上、以下等)ってすべて数式で表せますよね?

一応、すべて当たってみたつもりですが、なにぶんにも夕飯前でしたので、万が一にも、おかしいようでしたら、
FormatCndOperand 関数の myOperand の中の配列の中にある文字列の等号式がおかしいことになります。


人気Q&Aランキング