- ベストアンサー
A列の最大値が入っている横に○を入れる及び最大値の行数をマクロで所得
何方か、教えてください。 A列に下記の様な数値データが有りますが、 A列 1.24e-12 8.48e-12 4.41e-9 0.254 ○ ...... ..... 質問(1) A列の最大値が入っている横(B列)に○を入れる関数 (他のB列は空白がいいです。) 質問(2) マクロでA列の最大値の行数を所得する方法 では、宜しくお願いします。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
#4の補足について >mに数値が編入されますが、Cellsはセルの位置と本には書いています。どうしてmに数値が入るのでしょうか? 私の悪い癖で、Valueを全て省いています。省くとValueと看做してくれる仕組みがあるからです。 m=Cells(i,"A").Value というプロパティを付け加えて考えてください。ほかにセルには書式やコメントや色々のものがある中で、「値」は表計算ソフトの歴史的にも(昔は文字にも色は付かなかった)、表計算は値から始まり、一番大事なデータです。 ついでに別件ですが、他のご回答の中に >#4 のご回答のように総当りで見つける と「総当り」という表現がありますが、そもそも最大値は全部の値を読まないと決まらないものです。関数などは、裏では比較や繰り返しをやっているはずだが、表には出していません。そういう繰り返しや比較などを隠した利器(関数やメッソッドなど)を使って進むのが、進歩なんですが、時には原始的な方法でやってみたいときが有ります。
その他の回答 (6)
- KenKen_SP
- ベストアンサー率62% (785/1258)
Excel 2000 以前では VBA でワークシート関数を使う場合、最大 5461 の 配列(セルデータ)しか渡せません。(Excel2002以降は大丈夫) # 詳しくは Microsoft のサイトで したがって、A 列の最大値を VBA で求めるには、Excel のバージョンに 合わせた方法をとることになります。 ・Excel2002、2003 をお使いの場合 Msgbox Application.Max(Range("A:A")) ・Excel2000 以前をお使いの場合 1)バージョン依存しない #4 のご回答のように総当りで見つける 2)1~5461行、5462~10923行のように要素数5461のブロックにわけて、 それぞれの MAX 関数の結果の中から、さらに MAX 関数で最大値を 求めることになります。 こう考えると結構面倒くさいので、#1 のご回答をオススメしたいと思い ます。
お礼
回答ありがとう御座います。
- NCU
- ベストアンサー率10% (32/318)
#1の方が回答されている通り、ワークシート関数で十分です。 (2)を何が何でもマクロでというなら、VBAの中でそのままワークシート関数を使えばいい。 それがいやなら Find メソッドでどうぞ。
- imogasi
- ベストアンサー率27% (4737/17069)
いろいろ難しい関数など使わないで、初心に帰り A列の例で Sub test01() d = Range("A65536").End(xlUp).Row m = Cells(1, "A") For i = 2 To d If Cells(i, "A") > m Then m = Cells(i, "A") mi = i End If Next i MsgBox "最大値=" & m & " 行数=" & mi Cells(mi, "B") = "○" End Sub
お礼
回答ありがとう御座います。
補足
imogasiさんマクロ完璧でした、ありがとう御座います。 所で、このマクロで教えて欲しい所が有るのですが良ければ教えて下さい。 mに数値が編入されますが、Cellsはセルの位置と本には書いています。 どうしてmに数値が入るのでしょうか?
No.2です。間違いがあったので訂正です。 Dim m As Long Dim myrng As Range With Worksheets("Sheet1") m = WorksheetFunction.Max(.Columns(1)) Set myrng = .Range("A:A").Find(What:=m, _ After:=.Range("A1"), LookIn:=xlFormulas, LookAt:=xlPart, _ SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, _ MatchByte:=False, SearchFormat:=False) MsgBox myrng.Row
補足
M-SOFTさんマクロ回答ありがとう御座いました。 回答部分は上手い具合に動きましたが、他の部分で少し分からない 所が有るのでもし良ければ教えて下さい。 下記の要に、G17に関数を入れてカーソルを十字型にしてダブルクリック したマクロですが、なんか冗長みたいですので1行で書けないでしょうか。? ------------------------------------ Range("G17").Formula = "=(F17-F16)/0.1" Range("G17").Select Selection.AutoFill Destination:=Range("G17:G93") 宜しくお願いします。
こんばんは。 マクロでA列の最大値の行数を所得する方法 Dim m As Long Dim myrng As Range m = WorksheetFunction.Max(Worksheets("Sheet1").Columns(1)) Set myrng = Worksheets("Sheet1").Range("A:A").Find(What:=m, _ After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, _ SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, _ MatchByte:=False, SearchFormat:=False) MsgBox myrng.Row
お礼
回答ありがとう御座います。
- mshr1962
- ベストアンサー率39% (7417/18945)
関数で行うなら B1=IF(MAX(A:A)=B1,"○","") で下方にコピー、行位置なら C1=MATCH(MAX(A:A),A:A,0) ※ただし最大値が複数行に合っても最初の行を表示します。
お礼
回答ありがとう御座います。
お礼
詳しい説明ありがとう御座いました。 良い勉強になりました。