Excel VBA質問箱 IV

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

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


75294 / 76738 ←次へ | 前へ→

【5884】Re:特定の列の最大値Cellに色を塗りたい
回答  ichinose  - 03/6/6(金) 0:41 -

引用なし
パスワード
   こんばんは。
>>Application.Evaluate("=IF(MAX(" & .Address & ")=" & .Address & ",1,"""")")
>の記述の意味がよくわからないのですが。。。(~_~;

Evaluateは、()の式を評価しています。中では、配列数式を使用しています(配列数式に
関しては、Helpを参照してください)。

.Addressには、例題ですと、引数に指定されたセルのアドレス("A1:A6")が入ります。

式の意味は、例のセル範囲を引用すると、
「セルA1:A6の範囲で、最大値と等しければ、1、そうでなければ ""を対応する配列に格納する」ということになり、1と""で構成された配列を返します。


>なんでFunctionで定義しているのか
この「なんで」の疑問のポイントがわかりませんが、

・「なんで」sub xxxxx(・・・・)というプロシジャーではないのか?
 という意味でしょうか?

 引数がひとつ節約できるからです。
 Functionで定義すると、定義したファンクション名をデータ変数として扱えますので、
 記述が簡略化できるのが理由です。

・「なんで」Functionをわざわざ定義して処理を分けたのか?
 という意味でしょうか?
 
 「指定されたセル範囲の中から、最大値を含むセルを取得する」という機能を持つ
 Functionを作成しておくと、他のプロシジャーからでも同じ処理をさせたい事象が発生したときの事を考えて少しでも汎用的にしたかったためです。


>また、インプットボックスでセルの開始位置と終了位置を任意で指定できるようにしたいのですが。。。
前回のコードの修正も含めて作ってみました。
'========================================================
Sub 最大値のセルに色()
  Dim rng As Range
  On Error Resume Next
  Set rng = Application.InputBox("最大値の検査対象セル範囲を指定してチョ", , Selection.Address, , , , , Type:=8)
  If Err.Number = 0 Then
    If rng.Rows.Count = 65536 Then Set rng = rng.Resize(rng.Rows.Count - 1)
'列全体指定されるとエラーになるので-1して置きました
    rng.Interior.ColorIndex = xlNone
    get_max_rng(rng).Interior.ColorIndex = 6
    End If
  On Error GoTo 0
End Sub
'=========================================================
Function get_max_rng(rng As Range) As Range
  Dim sv_val
  Set get_max_rng = Nothing
  With rng
   sv_val = .Value
   .Value = Application.Evaluate("=IF(MAX(" & .Address & ")=" & .Address & ",1,"""")")
   If .Cells.Count > 1 Then
     On Error Resume Next
     Set get_max_rng = .Cells.SpecialCells(xlCellTypeConstants)
     On Error GoTo 0
   Else
     If .Value = 1 Then Set get_max_rng = rng
     End If
   .Value = sv_val
   End With
End Function

Inputboxでセル範囲を指定できます


>↓ こちらに関しては、条件式はなにに対して使用することが一般的なのですか??
>>最大値の入ったセルの取得ができますが、
>>色を付けるのが目的なら、条件付書式を使用する方法が一般的のような気がします。
Excelの一般機能に「条件付書式」というのがあります。

検査セル範囲を選択し、「書式」----「条件付書式」で条件設定のダイアログが表示されます。
ここで、条件指定したり、書式を設定する方法です。詳細は、Helpを参照してください。
これを使って、VBAのコードを書くと、
'=================================================
Sub 条件付書式設定例()
  Call set_condition(range("a1:a6"), 6)
End Sub
'=================================================================
Sub set_condition(rng As Range, clidx As Long)
  With rng
   .FormatConditions.Delete
   .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
    Formula1:="=MAX(" & rng.Address & ")"
   .FormatConditions(1).Interior.ColorIndex = clidx
   End With
End Sub

というようになります。

それに、マクロ実行後、最大値が変わるような値をセルに入力すると、色も変わってくれます(ユーザーに自由に検査セル範囲を選ばせるなら、最初の方がいいかもしれません)。

確認してみて下さい。

2 hits

【5870】特定の列の最大値Cellに色を塗りたい takumama 03/6/4(水) 23:00 質問
【5871】Re:特定の列の最大値Cellに色を塗りたい ichinose 03/6/5(木) 2:19 回答
【5873】Re:特定の列の最大値Cellに色を塗りたい takumama 03/6/5(木) 10:20 質問
【5884】Re:特定の列の最大値Cellに色を塗りたい ichinose 03/6/6(金) 0:41 回答
【5885】Re:特定の列の最大値Cellに色を塗りたい takumama 03/6/6(金) 10:25 お礼
【5891】Re:特定の列の最大値Cellに色を塗りたい takumama 03/6/6(金) 17:15 質問
【5901】Re:特定の列の最大値Cellに色を塗りたい ichinose 03/6/7(土) 10:51 回答
【5905】Re:特定の列の最大値Cellに色を塗りたい takumama 03/6/7(土) 14:27 お礼
【5913】Re:特定の列の最大値Cellに色を塗りたい takumama 03/6/7(土) 22:41 お礼

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