- ベストアンサー
マクロで最大値を表示する方法
- マクロを使用してセル範囲内の最大値を表示する方法について説明します。
- 指定されたセル範囲内のデータの中から最大値を求め、結果を別のセルに表示します。
- 最大値が0の場合、代わりに「履歴無し」と表示されるように設定しています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
各データの詳細がわかりませんので、とりあえずご質問の中で記述されたままの処理を繰り返します。 ---------- Sub 最終履歴を表示する() Dim c as Integer '列番号をcという名前の数字変数として定義します。 c = 3 'C列(先頭から3番目の列)から始まるので最初は3 '以下、Do~Loopで、6行目のセル(C6,D6,E6,…)が空白でない限り列の処理を繰り返します。 Do While Cells(6, c).Value <> "" With Cells(4, c) '4行目のセル(C4,D4,E4,…)に関して以下のように設定します。 .NumberFormatLocal = "G/標準" .Value = Application.WorksheetFunction.Max(Range(Cells(6, c), Cells(10000, c))) .Replace What:="0", Replacement:="履歴無し", LookAt:=xlWhole .NumberFormatLocal = "yyyy/m/d;@" End With '4行目のセルに関する記述を終了します。 c = c + 1 '次の列を処理するため列番号を1つ加算します。 Loop End Sub
その他の回答 (2)
- WindFaller
- ベストアンサー率57% (465/803)
こんばんは。 >連続したデータとはどんなものでしょうか? 空の列・行のない四角形のデータです。つまり、CurrentRegion で囲まれる範囲 ActiveSheet.Range("C6").CurrentRegion.Select で選択できる範囲。 >j = .Range("C6").CurrentRegion.Columns.Count - 1 四角形のデータの左上端をC6とした場合のCurrentRegion の列の数を数えて、 その列数から、-1 を引く。つまり、その左端の列を、0として、その列の右端までの数。 と書いても、簡単には納得できないと思います。 1つの行だけを、それぞれ試してみると良いです。 VBA入門当初だったら、私も理解できなかったと思います。
お礼
少しずつ覚えていきます。回答ありがとうございました。
- WindFaller
- ベストアンサー率57% (465/803)
こんにちは。 前回の延長です。 こちらからは、解説はしません。分からない所があれば聞いてください。 連続したデータに、数式を入れる場合は、ループは必要ありません。 VBAのコーディングは、記録マクロとは違う種類のものです。 '// Sub Test_LatestDatePickup() Dim j As Long With ActiveSheet j = .Range("C6").CurrentRegion.Columns.Count - 1 With .Range("C4", .Cells(4, 3 + j)) .Formula = "=IF(MAX(R[2]C:R[9996]C)=0,""履歴無し"",MAX(R[2]C:R[9996]C))" .Value = .Value .NumberFormatLocal = "yyyy/m/d" End With End With End Sub
お礼
回答ありがとうございました。 連続したデータとはどんなものでしょうか? 列単位?行単位?それとも両方?途中で空白があってもOK? 理解力なくてすみません。 Dim j As Long ← どんな意味でしょうか? j = .Range("C6").CurrentRegion.Columns.Count - 1 ←どんな意味でしょうか? 御指導よろしくお願いします。
お礼
この質問の為に貴重な時間を割いて頂き、ありがとうございました。 詳しく説明されていたので、ちょっとした修正もすぐにできました。 役に立ちそうな事例と思うので、本当に嬉しいです。