「夫を成功」へ導く妻の秘訣 座談会

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

A 回答 (1件)

こんにちは



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

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


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

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

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


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

ご回答ありがとうございます。
また、色々と調べていただき、ありがとうございました。
私はエクセルで図形を描くことが多く、毎回右クリックなどで色などを変更していたため、それを解消するのが目的でした。
確かにクイックツールバーも使えますね。すっかり忘れておりました。
しかし、教えていただきました2つの方法についてはとても勉強になりました。そのような考え方や方法があることを知りませんでした。私のやりたいことも満足しております。
考え方や方法も含めて、参考させていただきます。

お礼日時:2016/01/26 23:15

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

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

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

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

QExcelのマクロを使用してオートシェイプ図形の色を変えたいのです。

Excelのマクロを使用してオートシェイプ図形の色を変えたいのです。

オートシェイプ図形を50個ならべて、マウスでクリックしてものは色が変わるようにしたいと思います。
マクロ記録をすると以下のようになりました。
Sub Macro1()
ActiveSheet.Shapes("AutoShape 1").Select
Selection.ShapeRange.Fill.ForeColor.SchemeColor = 45
Selection.ShapeRange.Fill.Visible = msoTrue
Selection.ShapeRange.Fill.Solid
End Sub

このプログラムを50個書くわけにはいかないのですが、プログラムで処理するのに問題点が2つ出てきました。

・オートシェイプ図形の名前が"AutoShape 1"となっていますが、これを変更したいのですが、書式設定にはありませんでした。変更するにはどうすればよいのでしょう?

・クリックしたオートシェイプ図形がどれであるかを返す関数がないと、どの図形がクリックされたかわからないのですが、これを返す関数はあるのでしょうか?

よろしくお願いします。

Excelのマクロを使用してオートシェイプ図形の色を変えたいのです。

オートシェイプ図形を50個ならべて、マウスでクリックしてものは色が変わるようにしたいと思います。
マクロ記録をすると以下のようになりました。
Sub Macro1()
ActiveSheet.Shapes("AutoShape 1").Select
Selection.ShapeRange.Fill.ForeColor.SchemeColor = 45
Selection.ShapeRange.Fill.Visible = msoTrue
Selection.ShapeRange.Fill.Solid
End Sub

このプログラムを50個書くわけにはいかないのですが、プログラムで...続きを読む

Aベストアンサー

質問者さんが何をなさりたいのかによって、答えが全く変わってきますが (^_^)

50ある図形の一部について色を変えたい、その手間を省きたい
ということなら F4 キーで繰り返し処理ができます。


手間がかかってもよいから、ご質問の通り動くプログラムを作りたい
ということなら、

> オートシェイプ図形の名前が"AutoShape 1"となっていますが、これを変更したい
  Worksheets("シート名").Shapes("シェイプ名").Name = "あなたの好きな名前"

で変えられます。

ちなみにエクセルが自動でつけてくれた名前を知るには

Sub List()
Dim シェイプ As Shape
  For Each シェイプ In Worksheets("Sheet1").Shapes
    Debug.Print シェイプ.TopLeftCell.Address; " "; シェイプ.Name
  Next
End Sub

などとすればよろしいかと思います。こうすればセル位置で確認できます。
なおここで表示される名前は右端に半角空白を一つあけて連番がついているようです。


> ・クリックしたオートシェイプ図形がどれであるかを返す関数
ありません。但し、その関数を自分で作ることはできます。
例えばこんな感じです

Sub Shapeの色を変える()
  With Worksheets("Sheet1").Shapes(Application.Caller)
    .Fill.ForeColor.RGB = RGB(255, 0, 0)
    .Line.ForeColor.RGB = RGB(0, 255, 0)
  End With
End Sub

で、その自作関数を図形にリンクしてやる方法は
  図形を右クリックして 『マクロの登録』 で登録するか
  シェイプ.OnAction プロパティにそのマクロ名を文字列でセットしてやる
試してみましたが、この自作関数はモジュール上に書く必要があるようです。
それと、もちろんですが、50の図形全部についてマクロの登録がひつようです。
マクロを使って登録してもよろしい。
但し、シートにコマンドボタンがあるときは除外しないとエラーになります。

Sub btnShape_Click()
  Dim Shp0 As Shape
  For Each Shp0 In Worksheets("Sheet1").Shapes
    Shp0.OnAction = "Shapeの色を変える"
  Next
End Sub

質問者さんが何をなさりたいのかによって、答えが全く変わってきますが (^_^)

50ある図形の一部について色を変えたい、その手間を省きたい
ということなら F4 キーで繰り返し処理ができます。


手間がかかってもよいから、ご質問の通り動くプログラムを作りたい
ということなら、

> オートシェイプ図形の名前が"AutoShape 1"となっていますが、これを変更したい
  Worksheets("シート名").Shapes("シェイプ名").Name = "あなたの好きな名前"

で変えられます。

ちなみにエクセルが自動でつけてく...続きを読む

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

QVBAマクロで、図形等のオブジェクトを選択(特定)する方法ってありますか

こんにちは。VBAマクロを少しかじっています。
顔写真付きの従業員の検索システムを作りました。名前を入力(選択)したら、データシートから職員コード、住所、電話番号などの情報を検索し検索画面に表示します。この際、別のシートに顔写真を貼り付けたもの(1セルに1枚。セルに従業員名を入力してある。)から、VLOOKUP関数を使ってセル照会することで、画像も同時に表示することができます。
別の職員に切り換えたり、クリアする場合の画像の処理は、削除用のシートを用意し、そこにセルごと移動し、終了時にシートごと削除する方法をとりました。(当然、確認用のダイアログボックスが表示されます。)
前置きが長くなりましたが、問題は、用済みの画像を選択するプロシージャがあれば、あえて削除用のシートを用意する必要はありません。セルの場合は、Rangeプロパティやcellsプロパティで特定できますが、画像などのオブジェクトをセル番地などを使って特定する方法ってあるのでしょうか。
因みに、画像の選択処理を、マクロ記録でプロシージャを作成したら、
ActiveSheet.Shapes("Picture 1").Select などとなります。
よろしくお願いします。

こんにちは。VBAマクロを少しかじっています。
顔写真付きの従業員の検索システムを作りました。名前を入力(選択)したら、データシートから職員コード、住所、電話番号などの情報を検索し検索画面に表示します。この際、別のシートに顔写真を貼り付けたもの(1セルに1枚。セルに従業員名を入力してある。)から、VLOOKUP関数を使ってセル照会することで、画像も同時に表示することができます。
別の職員に切り換えたり、クリアする場合の画像の処理は、削除用のシートを用意し、そこにセルごと移動し、終了時...続きを読む

Aベストアンサー

検索シートにシェイプが1つしかなければ
ActiveSheet.Shapes(1).Select
で選択
ActiveSheet.Shapes(1).Delete
で削除できます。

Q【Excel】セルの背景色、文字色のRGB値を求める方法

Excel(関数orマクロ)でセルを参照して、
そのセルの背景色、文字色それぞれのRGB値(255,255,255 等)を自動取得することは可能でしょうか?

例えば、
A1セルの背景色RGB値をB1セルに。
A1セルの文字色RGB値をC1セルに、というイメージです。

※バージョンはExcel2007です

宜しくお願い致します。
背景色、文字色のRGB値を求める方法

Aベストアンサー

次のコードを参考に。
Sub test()
c = Right("000000" & Hex(Range("A1").Interior.Color), 6)
r = Val("&H" & Right(c, 2))
g = Val("&H" & Mid(c, 3, 2))
b = Val("&H" & Left(c, 2))
MsgBox "RGB(" & r & "," & g & "," & b & ")"
End Sub

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...続きを読む

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で計算値を四捨五入、切り上げ、切捨てする方法

ネットで探してみたのですが、計算結果を四捨五入して特定のセルを
返すにはどうしたらいいのでしょうか?

Sub hokangosa()

Dim ZPS As Double
Dim ZPOS As Double
Dim DMN As Double
MsgBox (" >>> 補間誤差自動計算 <<< ")
MsgBox (" >>> 初期値入力します <<< ")
ZPS = InputBox(">>> ステップを入力してください<<<")
ZPOS = Sheet1.Cells(22, 4).Value
DMN = ZPOS / ZPS
Sheet1.Cells(23, 6).Value = DMN
End Sub

ここでDMNの値を四捨五入したいです。

またこれとは別に切上げ、切捨ても教えていただけるとありがたいです。

Aベストアンサー

DMN = Application.WorksheetFunction.Round(ZPOS / ZPS, 0)
で、四捨五入
DMN = Application.RoundDown(ZPOS / ZPS, 0)
で切り捨て
DMN = Application.RoundUp(ZPOS / ZPS, 0)
で切り上げです。

引数で、対象桁を変更できます。

Qエクセル VBA ユーザーフォームを閉じる

ユーザーフォームを開く時は
UserForm1.Showですが
閉じる時は?
UserForm1.Close
だとコンパイルエラーになります。
End
にするしかないですか?

Aベストアンサー

Unload Me とか Unload UserForm1 でユーザーフォームを閉じることができます。

QExcel VBA で自在に図形を変化させたい

Excel VBAを使って図形を自由に変化させたいと思っています。

一つの形の四角形や三角形をVBAを使ってシート上に表記することは出来ます。

私はユーザーインターフェースを作り、テキストボックスに値を入れることで図形を変化させることをしたいと思っています。

例えば、一つの三角形を正三角形にしたり、直角二等辺三角形にしたり、自在に角度を変えてVBAに描かせたいと思っています。

三角形は以下のようにコードを記述しましたらシートに表示できました。

Sub 三角形作成()

Set ArwLine = ActiveSheet.Shapes.AddLine(10, 10, 200, 200)
Set ArwLine = ActiveSheet.Shapes.AddLine(200, 200, 100, 400)
Set ArwLine = ActiveSheet.Shapes.AddLine(100, 400, 10, 10)

End Sub

これを以下のようにして変数(x、y)にユーザーインターファースから値を代入するようにしたいのですがどのようにすればよいのでしょうか教えてください。

Private Sub CommandButton1_Click()
UserForm1.Show

End Sub

Sub 三角形作成()

Set ArwLine = ActiveSheet.Shapes.AddLine(10, 10, 200, 200)
Set ArwLine = ActiveSheet.Shapes.AddLine(200, 200, x, y)
Set ArwLine = ActiveSheet.Shapes.AddLine(x, y, 10, 10)

End Sub

前回、「Excel VBAで図面を書きたい」という質問をしたのですがややこしく書いたため解答される方が居ませんでしたので編集して再質問をさせていただきます。
よろしくお願いします。

Excel VBAを使って図形を自由に変化させたいと思っています。

一つの形の四角形や三角形をVBAを使ってシート上に表記することは出来ます。

私はユーザーインターフェースを作り、テキストボックスに値を入れることで図形を変化させることをしたいと思っています。

例えば、一つの三角形を正三角形にしたり、直角二等辺三角形にしたり、自在に角度を変えてVBAに描かせたいと思っています。

三角形は以下のようにコードを記述しましたらシートに表示できました。

Sub 三角形作成()

Set ArwLine ...続きを読む

Aベストアンサー

VBAで出来ると思いますし、もちろん他の言語でも可能でしょう。
質問で書かれたコード「Sub 三角形作成()」で kakusan_t さん自身が既に三角形を描画してますよね?
あとは辺の長さや角度を指定するたびに、以前の図形を消してから三角形を書き直せば良いだけです。

ただ、角度が1度かわる毎に終点の座標をどれだけずらせば良いかなど、コンピューター上で座標に置き換える計算式を作る知識が必要で、これが簡単ではないと思います。(数学の知識がある方なら簡単かも知れませんけど)
本にずばりの例文があるようなものでは無いと思いますよ。

ちなみに
1.新規にExcelを開く
2.VB Editorを開く
3.VBE画面の挿入-ユーザーフォームでUserFormを作り、TextBoxを2つと、CommandButtonを1つ置く
4.CommandButtonをダブルクリックして下記をコピペ

'-----------------------------------------------------------------------------
Private Sub CommandButton1_Click()
Dim x As Single, y As Single, sh As Shape
 On Error Resume Next
 x = CSng(TextBox1.Value)
 y = CSng(TextBox2.Value)
 With ActiveSheet
  For Each sh In .Shapes
    sh.Delete
  Next sh
  .Shapes.AddLine 10, 10, 200, 200
  .Shapes.AddLine 200, 200, x, y
  .Shapes.AddLine x, y, 10, 10
 End With
End Sub
'-----------------------------------------------------------------------------

5.VBE画面の挿入-標準モジュールでModule1が追加されるので、下記をコピペ

'-----------------------------------------------------------------------------
Sub Test()
  UserForm1.Show
End Sub
'-----------------------------------------------------------------------------

6.Excelに戻りツール→マクロ実行→Testを実行

VBAで出来ると思いますし、もちろん他の言語でも可能でしょう。
質問で書かれたコード「Sub 三角形作成()」で kakusan_t さん自身が既に三角形を描画してますよね?
あとは辺の長さや角度を指定するたびに、以前の図形を消してから三角形を書き直せば良いだけです。

ただ、角度が1度かわる毎に終点の座標をどれだけずらせば良いかなど、コンピューター上で座標に置き換える計算式を作る知識が必要で、これが簡単ではないと思います。(数学の知識がある方なら簡単かも知れませんけど)
本にずばりの例文が...続きを読む

Qエクセルのセルにカレンダーを表示させ、日付をセルに入力させたい

エクセルについて教えて下さい。

エクセルのセルをクリックすると、
カレンダーのようなものが表示され、
マウスで選択すると、
セルに日付が入力されるようにするには
どうしたらよいですか?

すみませんが、宜しくお願い致します。

Aベストアンサー

#02です。foo-mさんがVBAをお使いになるなら、以下のサンプルをいじってみてください。

このサンプルはC4セルがクリックされたときにカレンダーコントロールを表示して、日付を選んだらその日付をC4に書き込み、カレンダーコントロールを閉じるマクロです。

Private Sub Calendar1_Click()
Selection.Value = Calendar1.Value
ActiveSheet.Calendar1.Visible = False
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$C$4" Then
ActiveSheet.Calendar1.Visible = True
End If
End Sub

マクロはシートのモジュールとしてペーストして下さいね


人気Q&Aランキング