新規無料会員登録で1000名様に電子コミック1000円分が当たる!!

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

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

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

A 回答 (2件)

ボタンの色番号をマクロで取得することができるかどうかは、わかりま


せん。おそらくできないと思います。
代替案として、こういうステップのマクロ構成はいかがでしょう。

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
    • good
    • 0
この回答へのお礼

出来ました!
お忙しい時間をさいていただいてありがとうございました。

お礼日時:2007/06/06 18:15

下記で、選択されているセルに任意の色を塗ります。



Application.Dialogs(xlDialogPatterns).Show
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。
せっかくお返事いただいたのですが
マクロの言語(?)とかに全く詳しくなくて
「マクロの記録」で作る程度しかできないんです。

私が作ったのは以下の内容です。

' Keyboard Shortcut: Ctrl+l
'
With Selection.Interior
.ColorIndex = 35
.Pattern = xlSolid
ActiveCell.Offset(1, 0).Select
End With
End Sub

これだと塗りつぶしのボタンが何色でも黄色に塗られてしまうので
ボタンの色に合わせて、その都度塗られる色が代わるといいなと
思っているのですが。。。

お礼日時:2007/06/06 17:12

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

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

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

Qカラーパレットの色名はVBAで取得できますか?

ご存じの方がいらしたらご教示お願いします。
 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も取得できると考えての質問です

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

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

またカラーパレットで前回選択した色は「選択された状態」になっていますが、パレット...続きを読む

Aベストアンサー

こんにちは。

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

たぶん、カラーパレットの 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

こんにちは。

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

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

' // 現在カラーパレットで選択されている色のカラーインデックスを返す
Public Function GetColorIndexFromPallet() As Long
  
  ' // ※ セル着色用パレット分しか対応してませんが、一応カスタマイズ
  ' // ※ されたパレットでも大丈夫なようです
    
  Dim sText As String
  D...続きを読む

QEXCEL(IF関数)でCELLの色を変える。

例えば、IF関数で真ならセルの色を赤色にしたり、文字の色を変えたりする関数とかはあるのでしょうか?わかりません・・・知ってる方いらっしゃれば教えて下さい。

Aベストアンサー

こんばんは。

関数ではありませんが‥

<条件付き書式>ではダメなのでしょうか?

メニュー<書式>-<条件付き書式> です。

どのような条件を想定していらっしゃるのかわかりませんが、
<条件付き書式>については↓の参考URLをご覧ください。

▽条件付き書式・その1
http://homepage1.nifty.com/kenzo30/ex_kisosyo/ex_ks_syokyu4.htm

▽条件付き書式・その2
http://homepage1.nifty.com/kenzo30/ex_kisosyo/ex_ks_syokyu5.htm

参考URL:http://homepage1.nifty.com/kenzo30/ex_kisosyo/ex_ks_syokyu4.htm

QEXCEL VBA で特定の文字に色をつけるマクロを書きたいのですが

コードはどのように書けばよいのでしょうか?

(1)そのようなコードを持っていらっしゃったらいただけないでしょうか?

(2)または、参考になるページがありましたら教えていただけないでしょうか?

現在勉強を始めたところですが、よろしくお願いいたします。

Aベストアンサー

セルの文字列の中に,
たとえば
aaaeeessseee
ssddd
dfg
weeeff
のセルの中の
eeeに赤色文字にする。
セル範囲Range("A1:C6")を対象にしてます。
ーーーー
Sub test01()
Dim cl As Range
For Each cl In Range("a1:c6")
r = InStr(cl, "eee")
If r <> 0 Then
cl.Characters(r, 3).Font.Color = vbRed
End If
Next
End Sub

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:該当セルの行の色を変更したい

すみません。

ご存じの方、ご教授願います。

エクセル用マクロを作成しているのですが、
たとえば、

A1、A4、A9に目的の該当文”FFFF”があり、
行1、行4、行9のバックカラーを変更する場合、
どのようなマクロを作成すればよいのでしょうか?

なお、上記A1、A4、A9は毎回一定ではなく、該当セルの数がゼロの場合もあれば、10以上の場合もあります。(同じ列には存在しています。)

検索”FFFF”→SHIFT+スペースではセルの場所が特定されてしまうので、目的の文の場所がかわったあるいはないときにも背景色を変えてしまいます。

どうかよろしくお願いします。

Aベストアンサー

こんな感じで如何でしょう。

Sub Sample()
Dim aCell As Range

Application.ScreenUpdating = False
Cells.Interior.ColorIndex = xlNone
For Each aCell In Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp))
If aCell.Value = "FFFF" Then aCell.EntireRow.Interior.ColorIndex = 6
Next aCell
Application.ScreenUpdating = True
End Sub

Qマクロ登録ボタンに色をつける

こんにちわ! 私はtutogaと言います。
今Excel2000のソフトを使用して、ExcelVBAの勉強をしております。
最近始めたばかりで、分からないことだらけです(^^;

質問です・・・
マクロをボタンに登録する時、[フォーム]ツールバーの[ボタン]を使用しております。
登録したボタンの色を変えることはできないのでしょうか?
ボタンがいくつか並んでおりまして、その中でも一番重要なボタンなので、色を付けて強調したいのです。
いろんなWebサイトで調べてみたのですが、なかなか見つけることができなくて・・・
どなたかご教授願います!

Aベストアンサー

コントロールツールボックスからコマンドボタンを貼り付けてはいかがですか。「表示」「ツールバー」→「コントロール ツールボックス」の中にあります。
実行したいマクロをコピーしていれてやれば簡単です。
Private Sub CommandButton1_Click()
(実行したいマクロ)
End Sub
と言う形になると思います。
詳しくは以下のサイトを参考にしてください。
http://www.sigoto.co.jp/excel/activex/actmenu01.htm
「レッスン11 コマンドボタン」
Private Sub CommandButton1_Click()
(実行したいマクロ)
End Sub
と言う形になると思います。

参考URL:http://www.sigoto.co.jp/excel/activex/actmenu01.htm

Qエクセル 特定の文字を入れると他のセルの色が変わる

例えばセルA1に[りんご]と入力したらB2からB5までの文字の色が赤に変わる・・・などということは、関数や書式の設定なので出来るのでしょうか?
おわかりの方教えてくださーい!

Aベストアンサー

B2からB5のセルを選択し
書式メニューの条件付書式設定を選択し
数式が
=$A$1="りんご"
と入力し、書式で色を赤に変更してください。

Qエクセルでランダムな座席表を作成したい

excel 2003を使用しています。

エクセルで、100名程度の座席表を作成したいと思っています。
今、机の絵をレイアウトどおりに表示させて、該当する机に社員番号を入れれば、社員名が表示されるように設定しています。

席替えを毎日行うので、1-100の数字をランダムかつ重複せずに入れて、簡単に座席変更をしたいのですが、方法がわかりません。RANDBETWEENだと、ランダムに数字が入りますが、重複してしまい、困っております。

ランダムに数字を入力でき、かつ重複しない方法を教えてください。
どうぞよろしくお願いいたします。

Aベストアンサー

#02、04です。
う~ん困りました。補足していただいた内容だけでは到底期待に添うマクロは書けないからです。例えば「机の絵をレイアウトどおりに表示させて」って、具体的にはどのセルが氏名の表示セルなのかも分かりません。回答者は質問者さまのパソコンは見えないのです。

それにVLOOKUP関数を使用する方法は試していただけましたか?
これでも毎回異なる座席表は作成できるはずです。どんな問題がありました?(試さずに「マクロでお願いします」はないですよね)

とりあえずマクロは書いてみました。でもこちらで不足する情報を想像で補っていますから、きっと期待通りのものにはなりません。後はご自身で修正するなりしてください。

前提
・シート1に座席表がある。氏名が入るセルはB,D,F,H,J列の2行目から2行おきとする
・シート2のA列に1~100の連番。B列に100人分の氏名が入力されている。C列は作業列として使うので何も入力しない
・実際の人数が100人に満たない場合、空席もランダムに発生する(人を前方に詰めることはしない。マクロを変更すれば詰めることも可能ですが…)

以下のマクロをALT+F11でVBE画面を開き、左上のVBA Projectでシート名を右クリックし「挿入」→「標準モジュール」で表示される画面に貼り付けて下さい。マクロの実行はワークシート画面に戻ってALT+F8でマクロ一覧を開き、マクロ名を選択して「実行」ボタンです。
Sub Macro1()
Dim idx, R, C As Integer
  Randomize
  For idx = 1 To 100
    Sheets("Sheet2").Cells(idx, 3) = Rnd
  Next idx
  With Sheets("sheet2")
    .Activate
    .Cells(1, 1).CurrentRegion.Select
    Selection.Sort key1:=Range("C1"), Order1:=xlAscending, _
      header:=xlGuess, DataOption1:=xlSortNormal
    For idx = 1 To 100
      R = Int((idx - 1) / 5 + 1) * 2 'この式は実際の配置に合わせる
      C = ((idx - 1) Mod 5 + 1) * 2 '必要があります
      If .Cells(idx, "B") = "" Then
        Sheets("Sheet1").Cells(R, C).ClearContents
      Else
        Sheets("Sheet1").Cells(R, C).Value = .Cells(idx, "B")
      End If
    Next idx
    .Cells(1, 1).CurrentRegion.Select
    Selection.Sort key1:=Range("A1"), Order1:=xlAscending, _
      header:=xlGuess, DataOption1:=xlSortNormal
    .Columns(3).ClearContents
  End With
  Sheets("Sheet1").Activate
End Sub

このマクロを実行するボタンを作成するなら、「ツールバー右クリック」→「フォーム」から「コマンドボタン」を選択し、画面上にコマンドボタンを配置して、マクロを登録すればよいでしょう

#02、04です。
う~ん困りました。補足していただいた内容だけでは到底期待に添うマクロは書けないからです。例えば「机の絵をレイアウトどおりに表示させて」って、具体的にはどのセルが氏名の表示セルなのかも分かりません。回答者は質問者さまのパソコンは見えないのです。

それにVLOOKUP関数を使用する方法は試していただけましたか?
これでも毎回異なる座席表は作成できるはずです。どんな問題がありました?(試さずに「マクロでお願いします」はないですよね)

とりあえずマクロは書いてみま...続きを読む

Qセル色を、ある条件で自動的に色分けして塗りつぶしさせたい

こんにちは。いつもお世話になっております。
まさに標題の通りなのですが、有る位置のセル内に入れた数字によって設定済みの色でセルを
塗りつぶしたい場合、どのようにすれば宜しいでしょうか。
因みに現在は下記の通りに設定しております。


●現在の設定●
書式(D)→条件付き書式(D) にて

条件1(1)
数式が =$G2=1 であればセル色を黄緑

条件2(2)
数式が =$G2=2 であればセル色をピンク

条件3(3)
数式が =$G2=3 であればセル色を水色

◆この度、設定変更しなくてはならない背景◆
来月からセルG2に入れる数字が現状では1,2,3のみですが1,2,3,4,5と変更になる為。
(書式付き設定ではMAX3つまでしか設定できないように見受けられるので)


尚、当方はさほどエクセルに精通しておりませんのでマクロやVBAなど組んだ事が無く、かつ、
以前ちょっと挑戦しようと思ったのですが全く理解できなかった為、例えば関数などを用いて
設定出来る方法がありましたら例文を記載して戴けますと非常に助かります。

また、エクセルのヘルプで検索した結果
「VBAを使用してセルの塗りつぶしの色を変更する」というものを見つけたので閲覧↓
http://office.microsoft.com/ja-jp/excel/HA011366271041.aspx?pid=CL100570551041
したのですが、式らしきものを見つけたものの、その意味が理解できず、どのように記述して
よいのか判りませんでした。。。

以上、お手隙の方、いらっしゃいましたら何卒ご教授の程、お願い致します。

こんにちは。いつもお世話になっております。
まさに標題の通りなのですが、有る位置のセル内に入れた数字によって設定済みの色でセルを
塗りつぶしたい場合、どのようにすれば宜しいでしょうか。
因みに現在は下記の通りに設定しております。


●現在の設定●
書式(D)→条件付き書式(D) にて

条件1(1)
数式が =$G2=1 であればセル色を黄緑

条件2(2)
数式が =$G2=2 であればセル色をピンク

条件3(3)
数式が =$G2=3 であればセル色を水色

◆この度、設定変更しなくてはなら...続きを読む

Aベストアンサー

#02です。補足を見て変更しました。
色番号はご自由に直してください

Private Sub Worksheet_Change(ByVal Target As Range)
Dim r, rng As Range
Const trg As String = "G2:G50" ' "A1:A3"のように複数セルでもよい
 Set rng = Intersect(Target, Range(trg))
 If Not rng Is Nothing Then
  For Each r In rng
   Select Case r.Value
   Case Is = 1 'もし入力されたのが1ならば
    Cells(r.Row, 1).Resize(1, 8).Interior.ColorIndex = 4 '背景色を黄緑
   Case Is = 2 'もし入力されたのが2ならば
    Cells(r.Row, 1).Resize(1, 8).Interior.ColorIndex = 7 '背景色をピンク
   Case Is = 3 'もし入力されたのが3ならば
    Cells(r.Row, 1).Resize(1, 8).Interior.ColorIndex = 8 '背景色を水色
   Case Is = 4 'もし入力されたのが4ならば
    Cells(r.Row, 1).Resize(1, 8).Interior.ColorIndex = 6 '背景色を黄色
   Case Is = 5 'もし入力されたのが5ならば
    Cells(r.Row, 1).Resize(1, 8).Interior.ColorIndex = 3 '背景色を赤
   Case Else 'その他の値なら色を消す
    Cells(r.Row, 1).Resize(1, 8).Interior.ColorIndex = xlNone
   End Select
  Next r
 End If
End Sub

#02です。補足を見て変更しました。
色番号はご自由に直してください

Private Sub Worksheet_Change(ByVal Target As Range)
Dim r, rng As Range
Const trg As String = "G2:G50" ' "A1:A3"のように複数セルでもよい
 Set rng = Intersect(Target, Range(trg))
 If Not rng Is Nothing Then
  For Each r In rng
   Select Case r.Value
   Case Is = 1 'もし入力されたのが1ならば
    Cells(r.Row, 1).Resize(1, 8).Interior.ColorIndex = 4 '背景色を黄緑
   Case Is = 2 '...続きを読む

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 がありません。

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


人気Q&Aランキング