|
こんばんは。
>>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
というようになります。
それに、マクロ実行後、最大値が変わるような値をセルに入力すると、色も変わってくれます(ユーザーに自由に検査セル範囲を選ばせるなら、最初の方がいいかもしれません)。
確認してみて下さい。
|
|