Excel VBA質問箱 IV

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

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


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

【66105】条件付き書式について 助けてください。 10/7/30(金) 15:03 質問[未読]
【66106】Re:条件付き書式について よろずや 10/7/30(金) 19:06 発言[未読]
【66118】Re:条件付き書式について 助けてください。 10/8/2(月) 10:15 質問[未読]
【66114】Re:条件付き書式について UO3 10/7/31(土) 18:09 発言[未読]
【66119】Re:条件付き書式について 助けてください。 10/8/2(月) 10:18 お礼[未読]
【66146】【再質問】条件付き書式について 助けてください。 10/8/4(水) 17:44 質問[未読]
【66147】Re:【再質問】条件付き書式について りん 10/8/5(木) 16:38 発言[未読]
【66152】Re:【再質問】条件付き書式について 助けてください。 10/8/5(木) 17:40 質問[未読]
【66153】Re:【再質問】条件付き書式について りん 10/8/5(木) 18:55 回答[未読]
【66160】Re:【再質問】条件付き書式について 助けてください。 10/8/6(金) 9:38 質問[未読]
【66190】Re:【再質問】条件付き書式について りん 10/8/6(金) 21:06 発言[未読]
【66154】Re:【再質問】条件付き書式について りん 10/8/5(木) 19:07 発言[未読]
【66161】Re:【再質問】条件付き書式について 助けてください。 10/8/6(金) 9:45 回答[未読]

【66105】条件付き書式について
質問  助けてください。  - 10/7/30(金) 15:03 -

引用なし
パスワード
   excel2007で下記のマクロを実行しようとしているのですが、
マクロ実行後の条件付き書式が想定通りに設定されず
上手くいきません。

なぜ、このようになるのでしょうか?
また、改良方法があればお教えください。


Sub Macro9()
  
  areaA1 = "$H$56:$X$456"
  areaA2 = "$P$56:$X$456"
  areaA3 = "$Q$56:$X$456"
  
  Cells.Select
  Selection.FormatConditions.Delete
  
  Range(areaA1).FormatConditions.Add Type:=xlExpression, Formula1:= _
  "=NOT(EXACT(TRIM($H56),""""))"
  Range(areaA1).FormatConditions(1).StopIfTrue = False
  With Range(areaA1).FormatConditions(1).Borders(xlTop)
    .Weight = xlThin
    .LineStyle = xlContinuous
  End With
  
  Range(areaA2).FormatConditions.Add Type:=xlExpression, Formula1:= _
  "=NOT(EXACT(TRIM($P56),""""))"
  Range(areaA2).FormatConditions(1).StopIfTrue = False
  With Range(areaA2).FormatConditions(1).Borders(xlTop)
    .Weight = xlThin
    .LineStyle = xlContinuous
  End With
  
  Range(areaA3).FormatConditions.Add Type:=xlExpression, Formula1:= _
  "=NOT(EXACT(TRIM($Q56),""""))"
  Range(areaA3).FormatConditions(1).StopIfTrue = False
  With Range(areaA3).FormatConditions(1).Borders(xlTop)
    .Weight = xlThin
    .LineStyle = xlContinuous
  End With
  
  Range(areaA1).FormatConditions.Add Type:=xlExpression, Formula1:= _
  "=EXACT($BB56,0)"
  Range(areaA1).FormatConditions(2).StopIfTrue = False
  Range(areaA1).FormatConditions(2).Interior.ColorIndex = 16
  
  Range(areaA2).FormatConditions.Add Type:=xlExpression, Formula1:= _
  "=EXACT($BC56,0)"
  Range(areaA2).FormatConditions(2).StopIfTrue = False
  Range(areaA2).FormatConditions(2).Interior.ColorIndex = 16
 
  Range(areaA3).FormatConditions.Add Type:=xlExpression, Formula1:= _
  "=EXACT($AA56,$AA$45)"
  Range(areaA3).FormatConditions(2).StopIfTrue = False
  Range(areaA3).FormatConditions(2).Interior.ColorIndex = 16
  
End Sub

【66106】Re:条件付き書式について
発言  よろずや  - 10/7/30(金) 19:06 -

引用なし
パスワード
   >excel2007で下記のマクロを実行しようとしているのですが、
>マクロ実行後の条件付き書式が想定通りに設定されず
>上手くいきません。

どのように想定したのか?
実際にはどうなったのか?

【66114】Re:条件付き書式について
発言  UO3  - 10/7/31(土) 18:09 -

引用なし
パスワード
   ▼助けてください。 さん:
こんにちは
よろずやさんがおっしゃるように、どう具合が悪いのかわからないのですが
たとえば各領域に対するコードブロックの先頭に
 Range(Area1).Cells(1).Activate
といった行を記述するとどうなりますか?

はずしていたらごめんなさい。 

【66118】Re:条件付き書式について
質問  助けてください。  - 10/8/2(月) 10:15 -

引用なし
パスワード
   返信ありがとうございます。
質問文が説明不足でした申し訳ございません。
下記に想定と発生した問題を記載いたします。
ご助力よろしくお願い致します。

>どのように想定したのか?
マクロに記載の範囲3つ(AreaA1〜AreaA3)に下記のように条件書式を
2つづつ設定したいと考えております。
AreaA1 = "$H$56:$X$456"には
 1)条件 =NOT(EXACT(TRIM($H56),""""))
  書式 上線
 2)条件 "=EXACT($BB56,0)"
  書式 塗りつぶし

今までは上記の条件書式を手動で設定していたのですが、
対象範囲内でセル結合されると上記範囲が崩れてしまうため、
マクロで設定し直す機能を追加しようとしております。

>実際にはどうなったのか?
マクロを実行したところ、
 「実行時エラー'1004':
  BorderクラスのLineStyleプロパティを設定できません」
と表示されマクロがストップします。
Range(AreaA3)の一つ目の条件書式の設定まででマクロを停止
させると、上手く設定されているのですが、
Range(AreaA1)の2つ目の条件書式が設定される時点で上記の
エラーが発生することまでは、わかっております。

【66119】Re:条件付き書式について
お礼  助けてください。  - 10/8/2(月) 10:18 -

引用なし
パスワード
   ▼UO3 さん:
ご回答ありがとうございます。
> Range(Area1).Cells(1).Activate
上記、記述しましたが変化ありませんでした。

説明文が拙かったです。
こちらこそ、ごめんなさい。


>▼助けてください。 さん:
>こんにちは
>よろずやさんがおっしゃるように、どう具合が悪いのかわからないのですが
>たとえば各領域に対するコードブロックの先頭に
> Range(Area1).Cells(1).Activate
>といった行を記述するとどうなりますか?
>
>はずしていたらごめんなさい。

【66146】【再質問】条件付き書式について
質問  助けてください。  - 10/8/4(水) 17:44 -

引用なし
パスワード
   質問文が説明不足でした申し訳ございません。
下記に想定と発生した問題を記載いたします。
ご助力よろしくお願い致します。

>どのように想定したのか?
マクロに記載の範囲3つ(AreaA1〜AreaA3)に下記のように条件書式を
2つづつ設定したいと考えております。
AreaA1 = "$H$56:$X$456"には
 1)条件 =NOT(EXACT(TRIM($H56),""""))
  書式 上線
 2)条件 "=EXACT($BB56,0)"
  書式 塗りつぶし

今までは上記の条件書式を手動で設定していたのですが、
対象範囲内でセル結合されると上記範囲が崩れてしまうため、
マクロで設定し直す機能を追加しようとしております。

>実際にはどうなったのか?
マクロを実行したところ、
 「実行時エラー'1004':
  BorderクラスのLineStyleプロパティを設定できません」
と表示されマクロがストップします。
Range(AreaA3)の一つ目の条件書式の設定まででマクロを停止
させると、上手く設定されているのですが、
Range(AreaA1)の2つ目の条件書式が設定される時点で上記の
エラーが発生することまでは、わかっております。

【66147】Re:【再質問】条件付き書式について
発言  りん E-MAIL  - 10/8/5(木) 16:38 -

引用なし
パスワード
   こんにちわ。

▼助けてください。 さん:
>質問文が説明不足でした申し訳ございません。
>下記に想定と発生した問題を記載いたします。
>ご助力よろしくお願い致します。
>
>>どのように想定したのか?
>マクロに記載の範囲3つ(AreaA1〜AreaA3)に下記のように条件書式を
>2つづつ設定したいと考えております。
>AreaA1 = "$H$56:$X$456"には
> 1)条件 =NOT(EXACT(TRIM($H56),""""))
>  書式 上線
> 2)条件 "=EXACT($BB56,0)"
>  書式 塗りつぶし
>
>今までは上記の条件書式を手動で設定していたのですが、
>対象範囲内でセル結合されると上記範囲が崩れてしまうため、
>マクロで設定し直す機能を追加しようとしております。
>
>>実際にはどうなったのか?
>マクロを実行したところ、
> 「実行時エラー'1004':
>  BorderクラスのLineStyleプロパティを設定できません」
今手元にXL2007がないのですが、XL2007では条件付書式の条件はいくつまで可能なんでしょうか?


Sub Macro9()

↓Q56:X456(areaA3)が3つで重複宣言
  areaA1 = "$H$56:$X$456"
  areaA2 = "$P$56:$X$456"
  areaA3 = "$Q$56:$X$456"
  
  Cells.Select
↓ここで条件つき書式はクリア 
  Selection.FormatConditions.Delete
↓一つ目の条件設定
  Range(areaA1).FormatConditions.Add Type:=xlExpression, Formula1:= _
  "=NOT(EXACT(TRIM($H56),""""))"
↓二つ目の条件設定
  Range(areaA1).FormatConditions.Add Type:=xlExpression, Formula1:= _
  "=EXACT($BB56,0)"
  (略)
↓三つ目の条件設定
  Range(areaA2).FormatConditions.Add Type:=xlExpression, Formula1:= _
  "=NOT(EXACT(TRIM($P56),""""))"
  (略)
↓四つ目の条件設定 areaA3に対しては初めてだけど、実際は4つめ。
  Range(areaA3).FormatConditions.Add Type:=xlExpression, Formula1:= _
  "=NOT(EXACT(TRIM($Q56),""""))"
  (略)
↓五つ目の条件設定
  Range(areaA2).FormatConditions.Add Type:=xlExpression, Formula1:= _
  "=EXACT($BC56,0)"
  (略)
↓六つ目の条件設定
  Range(areaA3).FormatConditions.Add Type:=xlExpression, Formula1:= _
  "=EXACT($AA56,$AA$45)"
  (略)
End Sub
というふうに、areaA3に6つの条件を追加しようとしています。
質問の内容からすると適用したい条件は2つみたいなので、指定する範囲を見直すか、設定する時にクリアするようにしてみては?

範囲をみなおす場合

  areaA1 = "$H$56:$O$456"
  areaA2 = "$P$56:$P$456"
  areaA3 = "$Q$56:$X$456"


設定をクリアする場合(もっとコンパクトにできると思いますが、ざっとwithでくくってあります)

Sub Macro9()
  areaA1 = "$H$56:$X$456"
  areaA2 = "$P$56:$X$456"
  areaA3 = "$Q$56:$X$456"
  '関係ないところにもあるかもしれないので一応
  Cells.FormatConditions.Delete
  '
  With Range(areaA1)
   .Cells(1).Select '数式の基準セル選択(しないと予定外の結果になります)
   .FormatConditions.Delete '初期化
   .FormatConditions.Add Type:=xlExpression, Formula1:="=NOT(EXACT(TRIM($H56),""""))"
   .FormatConditions(1).StopIfTrue = False
   With .FormatConditions(1).Borders(xlTop)
     .Weight = xlThin
     .LineStyle = xlContinuous
   End With
   .FormatConditions.Add Type:=xlExpression, Formula1:="=EXACT($BB56,0)"
   .FormatConditions(2).StopIfTrue = False
   .FormatConditions(2).Interior.ColorIndex = 16
  End With
  '
  With Range(areaA2)
   .Cells(1).Select '数式の基準セル選択(しないと予定外の結果になります)
   .FormatConditions.Delete '初期化
   .FormatConditions.Add Type:=xlExpression, Formula1:="=NOT(EXACT(TRIM($P56),""""))"
   .FormatConditions(1).StopIfTrue = False
   With .FormatConditions(1).Borders(xlTop)
     .Weight = xlThin
     .LineStyle = xlContinuous
   End With
   .FormatConditions.Add Type:=xlExpression, Formula1:="=EXACT($BC56,0)"
   .FormatConditions(2).StopIfTrue = False
   .FormatConditions(2).Interior.ColorIndex = 16
  End With
  '
  With Range(areaA3)
   .Cells(1).Select '数式の基準セル選択(しないと予定外の結果になります)
   .FormatConditions.Delete '初期化
   .FormatConditions.Add Type:=xlExpression, Formula1:="=NOT(EXACT(TRIM($Q56),""""))"
   .FormatConditions(1).StopIfTrue = False
   With .FormatConditions(1).Borders(xlTop)
     .Weight = xlThin
     .LineStyle = xlContinuous
   End With
   .FormatConditions.Add Type:=xlExpression, Formula1:="=EXACT($AA56,$AA$45)"
   .FormatConditions(2).StopIfTrue = False
   .FormatConditions(2).Interior.ColorIndex = 16
  End With
End Sub

【66152】Re:【再質問】条件付き書式について
質問  助けてください。  - 10/8/5(木) 17:40 -

引用なし
パスワード
   ▼りん さん:
ご回答ありがとうございます。


>今手元にXL2007がないのですが、XL2007では条件付書式の条件はいくつまで可能なんでしょうか?

調べてみると、Excel2007では64件だそうです。

>というふうに、areaA3に6つの条件を追加しようとしています。
>質問の内容からすると適用したい条件は2つみたいなので、指定する範囲を見直すか、設定する時にクリアするようにしてみては?

areaA3に6つの条件(areaA1での重複2つ、areaA2からの重複2つ)がつくことになります。areaA1、areaA2からの条件は、条件式が異なるため別の条件書式と考える必要があります。
最終的にやりたいことは、下記の条件書式6つをマクロで設定したいと考えています。
AreaA1 = "$H$56:$X$456"には1)条件 =NOT(EXACT(TRIM($H56),""""))
               書式 上線
              2)条件 "=EXACT($BB56,0)"
               書式 塗りつぶし
AreaA2 = "$P$56:$X$456"には1)条件 =NOT(EXACT(TRIM($P56),""""))
               書式 上線
              2)条件 "=EXACT($BC56,0)"
               書式 塗りつぶし
AreaA3 = "$Q$56:$X$456"には1)条件 =NOT(EXACT(TRIM($Q56),""""))
               書式 上線
              2)条件 "=EXACT($AA56,$AA$45)"
               書式 塗りつぶし


上記6つの条件書式を手動で設定すると、問題なく設定でき動作もするので、エクセルの仕様にはひっかからないと考えていたのですが・・・。

手動で問題無く設定出来ているため、余計にマクロで設定出来ない理由がわからなくて困っております。

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

【66153】Re:【再質問】条件付き書式について
回答  りん E-MAIL  - 10/8/5(木) 18:55 -

引用なし
パスワード
   助けてください。 さん、こんばんわ。

>>今手元にXL2007がないのですが、XL2007では条件付書式の条件はいくつまで可能なんでしょうか?
>調べてみると、Excel2007では64件だそうです。
それなら6つくらい余裕ですね。

問題点をみつけました。

  areaA1:条件1 areaA2:条件1  areaA3:条件1
  Range(areaA1).FormatConditions.Add  問題ないので略
  
  areaA2:条件2  areaA3:条件2
  Range(areaA2).FormatConditions.Add 〜
  Range(areaA2).FormatConditions(1) 〜
  ↑今回追加したものはRange(areaA2).FormatConditions(2)
  
  areaA3:条件3
  Range(areaA3).FormatConditions.Add  〜
  Range(areaA3).FormatConditions(1) 〜
  ↑今回追加したものはRange(areaA3).FormatConditions(3)

  
  areaA1:条件2 areaA2:条件3  areaA3:条件4
  Range(areaA1).FormatConditions.Add  〜
  Range(areaA1).FormatConditions(2) 〜
  ↑今回追加したものはRange(areaA1).FormatConditions(1)
  ↑今回追加したものはRange(areaA2).FormatConditions(3)
  ↑今回追加したものはRange(areaA3).FormatConditions(4)
  
  areaA2:条件4  areaA3:条件5
  Range(areaA2).FormatConditions.Add 〜
  Range(areaA2).FormatConditions(2) 〜
  ↑今回追加したものはRange(areaA2).FormatConditions(4)
  ↑今回追加したものはRange(areaA3).FormatConditions(5)
 
  areaA3:条件6
  Range(areaA3).FormatConditions.Add 〜
  Range(areaA3).FormatConditions(2) 〜
  ↑今回追加したものはRange(areaA3).FormatConditions(6)


範囲が重複しているので、インデックス値がずれています。

なので、条件式を追加した時にwithでそのまま書式を設定するようにしました。
ついでに配列に入れて整理しました。

Sub Macro9()
  'ループさせるために配列で処理
  Dim areaA(1 To 3) As String '範囲をあらわす文字列
  Dim s1(1 To 3, 1 To 2)    '条件式の文字列
  Dim II As Long, TP As Long
  '内容をセット
  areaA(1) = "$H$56:$X$456"
  areaA(2) = "$P$56:$X$456"
  areaA(3) = "$Q$56:$X$456"
  '条件式
  s1(1, 1) = "=NOT(EXACT(TRIM($H56),""""))" 'area1 条件1,area2 条件1,area3 条件1
  s1(2, 1) = "=NOT(EXACT(TRIM($P56),""""))" 'area2 条件2,area3 条件2
  s1(3, 1) = "=NOT(EXACT(TRIM($Q56),""""))" 'area3 条件3
  s1(1, 2) = "=EXACT($BB56,0)"       'area1 条件2,area2 条件3,area3 条件4
  s1(2, 2) = "=EXACT($BC56,0)"       'area2 条件4,area3 条件5
  s1(3, 2) = "=EXACT($AA56,$AA$45)"     'area3 条件6
  
  '条件消去
  Cells.FormatConditions.Delete
  '
  For TP = 1 To 2
    For II = 1 To 3
      With Range(areaA(II))
        .Cells(1).Select
         With .FormatConditions.Add(Type:=xlExpression, Formula1:=s1(II, TP))
          .StopIfTrue = False
          If TP = 1 Then
            With .Borders(xlTop)
              .Weight = xlThin
              .LineStyle = xlContinuous
            End With
          Else
            .Interior.ColorIndex = 16
          End If
        End With
      End With
    Next
  Next
  '
  Erase areaA, s1
End Sub

2007がないので.StopIfTrueや4つめ以降の条件は試せていませんが、とりあえず設定はできているようでした。

【66154】Re:【再質問】条件付き書式について
発言  りん E-MAIL  - 10/8/5(木) 19:07 -

引用なし
パスワード
   いまさらですが。

>AreaA1 = "$H$56:$X$456"には1)条件 =NOT(EXACT(TRIM($H56),""""))
>               書式 上線
>              2)条件 "=EXACT($BB56,0)"
>               書式 塗りつぶし

>AreaA2 = "$P$56:$X$456"には上記+  3)条件 =NOT(EXACT(TRIM($P56),""""))
>                  書式 上線
>                   4)条件 "=EXACT($BC56,0)"
>                  書式 塗りつぶし


>AreaA3 = "$Q$56:$X$456"には上記+ 5)条件 =NOT(EXACT(TRIM($Q56),""""))
>                  書式 上線
>                  6)条件 "=EXACT($AA56,$AA$45)"
>                  書式 塗りつぶし
>
ということですよね?

もし、それぞれの範囲に2つずつならば最初に提示したものを、2、4、6と増えるのなら今回提示したものを試してみてください。

【66160】Re:【再質問】条件付き書式について
質問  助けてください。  - 10/8/6(金) 9:38 -

引用なし
パスワード
   ▼りん さん:
大変丁寧な回答ありがとうございます。

頂いたマクロをためしてみたところ、以下の現象が出ました。
・各エリア3つに各条件2つで条件書式6つは設定されている。
・ただし、areaA(2)、areaA(3)の条件書式の書式が「書式が設定されていません。」と表示される。(ルール、適用範囲は記述されている)

2007のバグでしょうか?
(他のバージョンでは問題ないのですよね。。。)

どなたか2007で確認して頂けると助かります。

【66161】Re:【再質問】条件付き書式について
回答  助けてください。  - 10/8/6(金) 9:45 -

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

>もし、それぞれの範囲に2つずつならば最初に提示したものを、2、4、6と増えるのなら今回提示したものを試してみてください。

今回頂いたマクロが、やりたい事に対するマクロになっております。
ありがとうございます。

【66190】Re:【再質問】条件付き書式について
発言  りん E-MAIL  - 10/8/6(金) 21:06 -

引用なし
パスワード
   助けてください。 さん、こんばんわ。

>(他のバージョンでは問題ないのですよね。。。)
他のバージョンだと3つまでしか式が入れられないので完全な形では試せていませんが、3つずつ適用してみたりして試してますが一応不具合はなかったです。

範囲によって該当するインデックスがずれているのが良くないのかもしれないので、範囲ごとに条件式を追加するようにしてみました。

Sub Macro9()
  'ループさせるために配列で処理
  Dim areaA(1 To 3) As String '範囲をあらわす文字列
  Dim s1(1 To 3, 1 To 2)    '条件式の文字列
  Dim II As Long, TP As Long
  '内容をセット
  areaA(1) = "$H$56:$O$456"
  areaA(2) = "$P$56:$P$456"
  areaA(3) = "$Q$56:$X$456"
  '条件式
  s1(1, 1) = "=NOT(EXACT(TRIM($H56),""""))" 'area1 条件1,area2 条件1,area3 条件1
  s1(2, 1) = "=NOT(EXACT(TRIM($P56),""""))" 'area2 条件2,area3 条件2
  s1(3, 1) = "=NOT(EXACT(TRIM($Q56),""""))" 'area3 条件3
  s1(1, 2) = "=EXACT($BB56,0)"       'area1 条件2,area2 条件3,area3 条件4
  s1(2, 2) = "=EXACT($BC56,0)"       'area2 条件4,area3 条件5
  s1(3, 2) = "=EXACT($AA56,$AA$45)"     'area3 条件6
 
  '条件消去
  Cells.FormatConditions.Delete
  '範囲によって式の数=ループの回数を変える
  For JJ = 1 To 3
    With Range(areaA(JJ))
      .Cells(1).Select
      For TP = 1 To 2
        For II = 1 To JJ
           With .FormatConditions.Add(Type:=xlExpression, Formula1:=s1(II, TP))
            .StopIfTrue = False
            If TP = 1 Then
              With .Borders(xlTop)
                .Weight = xlThin
                .LineStyle = xlContinuous
              End With
            Else
              .Interior.ColorIndex = 16
            End If
          End With
        Next
      Next
    End With
  Next
  '
  Erase areaA, s1
End Sub

試してみてください。

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