Excel VBA質問箱 IV

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

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


2038 / 13645 ツリー ←次へ | 前へ→

【70344】ルールの管理による色の取得 亜矢 11/11/3(木) 13:52 質問[未読]
【70345】Re:ルールの管理による色の取得 UO3 11/11/3(木) 17:06 発言[未読]
【70346】Re:ルールの管理による色の取得 亜矢 11/11/3(木) 17:12 お礼[未読]
【70352】Re:ルールの管理による色の取得 n 11/11/4(金) 20:27 発言[未読]
【70355】Re:ルールの管理による色の取得 亜矢 11/11/5(土) 15:35 お礼[未読]

【70344】ルールの管理による色の取得
質問  亜矢  - 11/11/3(木) 13:52 -

引用なし
パスワード
   いつもお世話になります。
 ルールの管理の設定によりセルに色が設定されています。
その色を塗ってある部分(セル)を取得したいと思います。
 Selection.FormatConditions(1).Interior.ColorIndex
 で検出しようとすると色付けがされているところで無いところが
 同じ番号−4142で表示されます。
 色がつけてあるところを検出する方法を教えていただきたいと思います。
 

【70345】Re:ルールの管理による色の取得
発言  UO3  - 11/11/3(木) 17:06 -

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

この質問は、皆さんからよく出されますね。

条件付き書式で設定された色は、、セルのInteriorプロパティに、その色がついているわけではありません。
あくまで、画面上、その色がついて表示(描画)されているだけです。

条件付き組織で色がついているわけですから、そのセルは「設定した条件」を満たしています。
ですので、その設定した条件になっているかどうかのロジックを自分で組んでセルを判定するということが
必要になります。

テクニックとしては、設定した条件をVBAで抜き出して、条件チェックをすることもできますが
設定した条件が単純な数式だった場合以外は解析が煩雑になると思います。

【70346】Re:ルールの管理による色の取得
お礼  亜矢  - 11/11/3(木) 17:12 -

引用なし
パスワード
   ▼UO3 さん:
>▼亜矢 さん:
>
>この質問は、皆さんからよく出されますね。
>
>条件付き書式で設定された色は、、セルのInteriorプロパティに、その色がついているわけではありません。
>あくまで、画面上、その色がついて表示(描画)されているだけです。
>
>条件付き組織で色がついているわけですから、そのセルは「設定した条件」を満たしています。
>ですので、その設定した条件になっているかどうかのロジックを自分で組んでセルを判定するということが
>必要になります。
>
>テクニックとしては、設定した条件をVBAで抜き出して、条件チェックをすることもできますが
>設定した条件が単純な数式だった場合以外は解析が煩雑になると思います。
ありがとうございました。理解しました。

【70352】Re:ルールの管理による色の取得
発言  n  - 11/11/4(金) 20:27 -

引用なし
パスワード
   データバーやアイコンセット以外の単純単色の条件付き書式だったら。
..力技的ですが:D

'■標準Module
'■参照設定:[Microsoft Forms 2.0 Object Library]
Option Explicit

Private Declare Function CloseClipboard Lib "user32.dll" () As Long

Private Declare Function OpenClipboard Lib "user32.dll" ( _
                    ByVal hwnd As Long) As Long

Private Declare Function GetClipboardData Lib "user32.dll" ( _
                     ByVal wFormat As Long) As Long

Private Declare Function RegisterClipboardFormatA Lib "user32.dll" ( _
                         ByVal lpszFormat As String) As Long

Private Declare Function GlobalSize Lib "kernel32.dll" ( _
                  ByVal hMem As Long) As Long

Private Declare Function GlobalLock Lib "kernel32.dll" ( _
                  ByVal hMem As Long) As Long

Private Declare Function GlobalUnlock Lib "kernel32.dll" ( _
                   ByVal hMem As Long) As Long

Private Declare Sub RtlMoveMemory Lib "kernel32.dll" ( _
                 ByVal hpvDest As Any, _
                 ByVal hpvSource As Any, _
                 ByVal cbCopy As Long)
'-------------------------------------------------

Sub test()
  If TypeName(Selection) = "Range" Then
    MsgBox getcol(Selection)
  End If
End Sub
'-------------------------------------------------
Private Function getcol(ByRef r As Range)
  Dim buf As String
  Dim mem As Long
  Dim sz As Long
  Dim lk As Long
  Dim x  As Long

  Application.ScreenUpdating = False
  r.Item(1).Copy
  OpenClipboard 0&
  mem = GetClipboardData(RegisterClipboardFormatA("HTML Format"))
  CloseClipboard
  If mem = 0 Then Exit Function
  sz = GlobalSize(mem)
  lk = GlobalLock(mem)
  buf = String(sz + 1, vbNullChar)
  RtlMoveMemory buf, lk, sz
  GlobalUnlock mem
  buf = Left$(buf, InStr(buf, vbNullChar) - 1)
  buf = Replace$(buf, "mso-ignore:style;", "") '■2007,2010では無くてもOK
  With New DataObject
    .Clear
    .SetText buf
    .PutInClipboard
  End With
  With Workbooks.Add
    .Sheets(1).Paste
    x = Selection.Interior.ColorIndex
    .Close False
  End With
  getcol = x
  Application.ScreenUpdating = True
End Function
'-------------------------------------------------

#参考にさせて頂いたサイト
ht tp://homepage2.nifty.com/kmado/kvba.htm(E03M121)
ht tp://www.tsware.jp/study/vol1/kaibo_15.htm

【70355】Re:ルールの管理による色の取得
お礼  亜矢  - 11/11/5(土) 15:35 -

引用なし
パスワード
   ▼n さん:
>データバーやアイコンセット以外の単純単色の条件付き書式だったら。
>..力技的ですが:D
>
>'■標準Module
>'■参照設定:[Microsoft Forms 2.0 Object Library]
>Option Explicit
>
>Private Declare Function CloseClipboard Lib "user32.dll" () As Long
>
>Private Declare Function OpenClipboard Lib "user32.dll" ( _
>                    ByVal hwnd As Long) As Long
>
>Private Declare Function GetClipboardData Lib "user32.dll" ( _
>                     ByVal wFormat As Long) As Long
>
>Private Declare Function RegisterClipboardFormatA Lib "user32.dll" ( _
>                         ByVal lpszFormat As String) As Long
>
>Private Declare Function GlobalSize Lib "kernel32.dll" ( _
>                  ByVal hMem As Long) As Long
>
>Private Declare Function GlobalLock Lib "kernel32.dll" ( _
>                  ByVal hMem As Long) As Long
>
>Private Declare Function GlobalUnlock Lib "kernel32.dll" ( _
>                   ByVal hMem As Long) As Long
>
>Private Declare Sub RtlMoveMemory Lib "kernel32.dll" ( _
>                 ByVal hpvDest As Any, _
>                 ByVal hpvSource As Any, _
>                 ByVal cbCopy As Long)
>'-------------------------------------------------
>
>Sub test()
>  If TypeName(Selection) = "Range" Then
>    MsgBox getcol(Selection)
>  End If
>End Sub
>'-------------------------------------------------
>Private Function getcol(ByRef r As Range)
>  Dim buf As String
>  Dim mem As Long
>  Dim sz As Long
>  Dim lk As Long
>  Dim x  As Long
>
>  Application.ScreenUpdating = False
>  r.Item(1).Copy
>  OpenClipboard 0&
>  mem = GetClipboardData(RegisterClipboardFormatA("HTML Format"))
>  CloseClipboard
>  If mem = 0 Then Exit Function
>  sz = GlobalSize(mem)
>  lk = GlobalLock(mem)
>  buf = String(sz + 1, vbNullChar)
>  RtlMoveMemory buf, lk, sz
>  GlobalUnlock mem
>  buf = Left$(buf, InStr(buf, vbNullChar) - 1)
>  buf = Replace$(buf, "mso-ignore:style;", "") '■2007,2010では無くてもOK
>  With New DataObject
>    .Clear
>    .SetText buf
>    .PutInClipboard
>  End With
>  With Workbooks.Add
>    .Sheets(1).Paste
>    x = Selection.Interior.ColorIndex
>    .Close False
>  End With
>  getcol = x
>  Application.ScreenUpdating = True
>End Function
ありがとうございました。色の取得をあきらめていました。
これで解決しました。本当にありがとうございました。

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