Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5070 / 13644 ツリー ←次へ | 前へ→

【52681】カラーパレットの使用方法 美貴 07/11/26(月) 11:45 質問[未読]
【52683】Re:カラーパレットの使用方法 じゅんじゅん 07/11/26(月) 12:46 発言[未読]
【52684】Re:カラーパレットの使用方法 美貴 07/11/26(月) 13:06 発言[未読]
【52685】Re:カラーパレットの使用方法 じゅんじゅん 07/11/26(月) 13:38 発言[未読]
【52686】Re:カラーパレットの使用方法 美貴 07/11/26(月) 13:42 発言[未読]
【52699】Re:カラーパレットの使用方法 ichinose 07/11/26(月) 21:34 発言[未読]
【52740】Re:カラーパレットの使用方法 Miki 07/11/29(木) 21:53 質問[未読]
【52744】Re:カラーパレットの使用方法 ichinose 07/11/30(金) 8:00 発言[未読]
【52753】Re:カラーパレットの使用方法 Miki 07/12/1(土) 11:52 質問[未読]
【52754】Re:カラーパレットの使用方法 横入り 07/12/1(土) 14:40 回答[未読]
【52758】Re:カラーパレットの使用方法 ichinose 07/12/1(土) 17:54 発言[未読]
【52701】Re:カラーパレットの使用方法 Mariko 07/11/26(月) 21:52 発言[未読]
【52710】Re:カラーパレットの使用方法 美貴 07/11/27(火) 11:25 お礼[未読]

【52681】カラーパレットの使用方法
質問  美貴  - 07/11/26(月) 11:45 -

引用なし
パスワード
   こんにちはー♪

おバカな質問でゴメンナサイ^_^;
カラーパレットを呼び出して、セルに色塗りしたのですが、
使用方法がよく分かりません。
ご教示お願いできないでしょうか?
よろしくお願い致します。

Sub カラーパレット()

  Selection.Interior.Color = Application.Dialogs(xlDialogColorPalette).Show
 
End Sub

【52683】Re:カラーパレットの使用方法
発言  じゅんじゅん  - 07/11/26(月) 12:46 -

引用なし
パスワード
   ▼美貴 さん:
>こんにちはー♪
>
>おバカな質問でゴメンナサイ^_^;
>カラーパレットを呼び出して、セルに色塗りしたのですが、
>使用方法がよく分かりません。
>ご教示お願いできないでしょうか?
>よろしくお願い致します。
>
>Sub カラーパレット()
>
>  Selection.Interior.Color = Application.Dialogs(xlDialogColorPalette).Show
> 
>End Sub

以前別のサイトに載っていたものの変更版。

Sub Test()
 Dim Rcol As Range
 
 Set Rcol = Selection
 Rcol.Activate
 Application.Dialogs(xlDialogPatterns).Show
End Sub

こうゆう事でしょうか?

【52684】Re:カラーパレットの使用方法
発言  美貴  - 07/11/26(月) 13:06 -

引用なし
パスワード
   ▼じゅんじゅん さん
ありがとうございます♪

同じことを
xlDialogColorPalette
でやりたいんです。

できないんでしょうか?

【52685】Re:カラーパレットの使用方法
発言  じゅんじゅん  - 07/11/26(月) 13:38 -

引用なし
パスワード
   ▼美貴 さん:
>▼じゅんじゅん さん
>ありがとうございます♪
>
>同じことを
>xlDialogColorPalette
>でやりたいんです。
>
>できないんでしょうか?

元のコードも参考に保存したもので詳しくはないんですが、
>xlDialogColorPalette
ってパレットの色を変更するのであって、セルの色を変更するものでは
ないのでは?

セルの色を変更する際に、パレットの色を変更しなければならないのですか?

【52686】Re:カラーパレットの使用方法
発言  美貴  - 07/11/26(月) 13:42 -

引用なし
パスワード
   ▼じゅんじゅん さん

ありがとうございます。

xlDialogPatternsだと、カラーパレットの色が少ないので
オプションを使って、好きな色で
設定したいんです。

2段構えにしないといけないような感じなんですね!
どうしたらいいんでしょう?(>_<)

【52699】Re:カラーパレットの使用方法
発言  ichinose  - 07/11/26(月) 21:34 -

引用なし
パスワード
   こんばんは。

色に関しては、本気でやる場合は、

www.loadsystem.net/api/lsapi3.txt



Public Function Y_GetColorDialog(ByRef color As Long) As Long

'***********************************************************
'機能 : 「色指定」ダイアログを表示する
'戻り値: 1:色が選択された 0:[キャンセル]ボタンを押された
'     引数colorに選択された色コードをセットします
'***********************************************************
この辺りを使います(APIです)。


簡単に済ませたい場合は、
nyama.jpn.org/otto/xlstip.shtml#7
これですね



Sub Test()
If Application.Dialogs(xlDialogEditColor).Show(1) Then
  Range("a1").Interior.ColorIndex = 1
  End If
End Sub

大抵は、↑この簡単な方かな!!

【52701】Re:カラーパレットの使用方法
発言  Mariko  - 07/11/26(月) 21:52 -

引用なし
パスワード
   ▼美貴 さん:

>xlDialogPatternsだと、カラーパレットの色が少ないので

MarkerForegroundColorIndex プロパティで検索されると分かると思いますが
56色です。
後は
    .Pattern = xlCrissCross
    .PatternColorIndex = 12

これが二段構え?でしょうか。
のように書式設定で出来ると思いますが・・・

>オプションを使って、好きな色で
>設定したいんです。

色指定56色の制限があります

>2段構えにしないといけないような感じなんですね!
>どうしたらいいんでしょう?(>_<)

【52710】Re:カラーパレットの使用方法
お礼  美貴  - 07/11/27(火) 11:25 -

引用なし
パスワード
   みなさん、ありがとうございます。

よく理解していなかったのですが、
カラーパレットで使用可能な色は、56種類までで
それを一部変更すると、その番号で表示されているセルの
色が全て変わってしまうんですね!
そうすると、安易にパレットを変更すると
自分が知らないところでセルの色が変わってしまうことになるので
とても危険なんですね。

基本的なことが分かっていなくて、申し訳ございません。^^;

【52740】Re:カラーパレットの使用方法
質問  Miki  - 07/11/29(木) 21:53 -

引用なし
パスワード
   ▼ichinose さん:

コードを見させていただき便利なコードだと思い少し発展させる中…
疑問点が出てきました。時間がありましたら、コメントください。

先ずtest1(ichinose様のご提示されたコード)
Sub test1()
If Application.Dialogs(xlDialogEditColor).Show(1) Then
  Range("a6:a7,c6:c7").Interior.ColorIndex = 1
  End If
End Sub
これにパターンを付け加えました。
自分なりに分かったことは、同じシート上では
show(2)にしないとtest1のコードと絡んでしまうということです。
しかし、この下のコードをWith構文で出来ないかと、作成しましたが
xlDialogPatternsには反映されず、
Range("A15:B15").Selectのコードを入れないと同じセルを選択しません。
With構文を生かした作成が間違っているのでしょうか。

Sub test2()
With Range("A15:B15").Interior
 If Application.Dialogs(xlDialogEditColor).Show(2) Then
   .ColorIndex = 2
End If
Range("A15:B15").Select
 If Application.Dialogs(xlDialogPatterns).Show(1) Then
 End If
End With
End Sub
↑のコードは希望するものが得られます

↓のコードでは
With構文…これはxlDialogPatternsが反映されません。
Sub test2()
With Range("A15:B15").Interior
If Application.Dialogs(xlDialogEditColor).Show(2) Then
    .ColorIndex = 2
End If
End With

With Range("A15:B15")
Range("A15:B15").Select
If Application.Dialogs(xlDialogPatterns).Show(1) Then
    .Interior.Pattern = 1
End If
End With
End Sub

【52744】Re:カラーパレットの使用方法
発言  ichinose  - 07/11/30(金) 8:00 -

引用なし
パスワード
   おはようございます。

>コードを見させていただき便利なコードだと思い少し発展させる中…
>疑問点が出てきました。時間がありましたら、コメントください。

>自分なりに分かったことは、同じシート上では
>show(2)にしないとtest1のコードと絡んでしまうということです。
↑ここの意味が私にはわかりません。


>しかし、この下のコードをWith構文で出来ないかと、作成しましたが
>xlDialogPatternsには反映されず、
>Range("A15:B15").Selectのコードを入れないと同じセルを選択しません。
>With構文を生かした作成が間違っているのでしょうか。

Dialogs(xlDialogPatterns)は、選択されたセル範囲の色の設定等を行う
という機能ですよ!!そういう仕様なのですから、仕様に沿った使い方をするしか
ありません。

xlDialogPatternsに限らず、Dialogsオブジェクトの仕様には、私も少なからず
不満があります。一言で言えば、汎用性がない!!とまでは言いませんが、
汎用的ではないですね!!

以前にも、

www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=16412;id=excel

同じDialogsオブジェクトで↑この辺りでちょっと不満を漏らしています。

ともかく、これを踏まえると下記のコードは至極 自然なコードだと思いますよけど・・。


>Sub test2()
>With Range("A15:B15").Interior
> If Application.Dialogs(xlDialogEditColor).Show(2) Then
>   .ColorIndex = 2
>End If
>Range("A15:B15").Select
> If Application.Dialogs(xlDialogPatterns).Show(1) Then
> End If
>End With
>End Sub
>↑のコードは希望するものが得られます
>
>↓のコードでは
>With構文…これはxlDialogPatternsが反映されません。
>Sub test2()
>With Range("A15:B15").Interior
>If Application.Dialogs(xlDialogEditColor).Show(2) Then
>    .ColorIndex = 2
>End If
>End With
>
>With Range("A15:B15")
>Range("A15:B15").Select
>If Application.Dialogs(xlDialogPatterns).Show(1) Then
>    .Interior.Pattern = 1
'    Patternプロパティと.Show(1)の1とは何の脈絡もありませんよ
'    .Interior.Pattern = 1は、網掛けなしの指定ですよね
>End If
>End With
>End Sub


疑問に思われたのですから、記述することは良いことです。
が、
この場合、コード提示して、

>↑のコードは希望するものが得られます
>
>↓のコードでは
>With構文…これはxlDialogPatternsが反映されません。

では、不十分です。
Daialogs().showメソッドでオペレータの入力を促されます。
ここで、何をするかも具体例として提示してください。
それとその操作による結果も記述してください。
これは、ふたつのプロシジャーの両方です。
(私とMikiさんで同期をとる記述を出来る限り多くする必要があります)

ここまで記述されると、何を疑問に思われているのか
具体的にわかってくると思うのですがいかがですか?

【52753】Re:カラーパレットの使用方法
質問  Miki  - 07/12/1(土) 11:52 -

引用なし
パスワード
   ▼ichinose さん:
おはようございます。
最後まで読ませていただき大分判ってきました。

欲張った内容を一度に書きすぎたことや
説明が不十分で、また説明しきれない?ので、
ご迷惑をかけてしまいました。

今回は色指定のみに絞って、もう一度書かせていただきます。
先ず
Sub test1()
If Application.Dialogs(xlDialogEditColor).Show(1) Then
  Range("a6:a7,c6:c7").Interior.ColorIndex = 1
  End If
End Sub
test1で「色の設定」ユーザ設定タブ画面でR120,G240,B120を設定して
動作させるとtest1のセル指定範囲に「明るいグリーン」の色が指定されます。
しかし、更にtest2の指定範囲にもこの色が付きます。

次にtest2から
「色の設定」ユーザ設定タブ画面でR240,G120,B120に設定して 
動作させるとtest2の指定範囲に「明るい赤」の色が付きますが、
test1の指定範囲にも同じ色が付きます。

前回の質問のこの部分です↓
>show(2)にしないとtest1のコードと絡んでしまうということです。
↑ここの意味が私にはわかりません。(ichinoseさんからのご質問)
現在のコードを利用してtest1と2の色が同じ色にならない方法があるのでしょうか。


Sub test2()
With Range("A15:B15").Interior
If Application.Dialogs(xlDialogEditColor).Show(1) Then
    .ColorIndex = 1
End If
End Sub

'・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・


しかしながら
Sub test2()
With Range("A15:B15").Interior
If Application.Dialogs(xlDialogEditColor).Show(2) Then
    .ColorIndex = 2           '~~~~
End If       '~~~~
End Sub

~~~~の部分を1から2に変更するとtest1に影響を及ぼさない(絡まない)
単独の動作=つまりA15:B15に色指定が出来ます。ですから
このコードの中のColorIndex=2は色指定の意味では無いと
判断したらよいのでしょうか。あるいは「白」と理解すれば
良いのでしょうか?2を→3にすると黒になってこのコードが
生かされません。

ちなみに
Sub test10()
With Range("D6")
   .Interior.ColorIndex = 2
End With
End Sub
とすると普通だったら「白」ですが、test2で実行した色が反映されます。
これはそのようなものだと理解すればよいのでしょうか
Application.Dialogs(xlDialogEditColor).Show()はそのようなものだ
と理解すればよいのでしょうか。

どこかで誤解していると思います。もしお時間がありましたらアドバイス
お願いします。

.Interior.Pattern = 1の件はよく理解できました。
有難うございました。

【52754】Re:カラーパレットの使用方法
回答  横入り  - 07/12/1(土) 14:40 -

引用なし
パスワード
   セルに設定できる色はExcel2003まではColorIndexで設定できる色だけで既定で設定されている色を変更するのがxlDialogColorPaletteでColorIndex=1で既定では黒を赤に変更するとColorIndex=1を指定しているセルすべてが赤に変わるという事です。

セルには赤を設定しているのではなくColorIndex=1を設定していると思うと納得いきますか。

【52758】Re:カラーパレットの使用方法
発言  ichinose  - 07/12/1(土) 17:54 -

引用なし
パスワード
   こんばんは。

>しかしながら
>Sub test2()
>With Range("A15:B15").Interior
>If Application.Dialogs(xlDialogEditColor).Show(2) Then
>    .ColorIndex = 2           '~~~~
>End If       '~~~~
>End Sub
>
>~~~~の部分を1から2に変更するとtest1に影響を及ぼさない(絡まない)
>単独の動作=つまりA15:B15に色指定が出来ます。ですから
>このコードの中のColorIndex=2は色指定の意味では無いと
>判断したらよいのでしょうか。
横入りさんの説明で十分だと思いますが、ちょっとだけ。

パレットって、実際には

store.shopping.yahoo.co.jp/inobun/013825.html#

↑こんな道具ですよね!!

この写真のパレットは、12色の色を一度に置けるのですよね?

Excelは、56色置けます。Colorindexは、この色の置く場所を示す番号です。

Application.Dialogs(xlDialogEditColor).Show(2)

は、パレット番号2の色を現在の色から、自由に変更してください
というメソッドです。

ですから、特別な色を作成したいなら、現在パレット上にあるどれか色と交換する
ことになります。

Show(n)やColorindex=n、このnは、色のある場所を示す識別番号です。

いかがでしょうか?

5070 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free