プロが教える店舗&オフィスのセキュリティ対策術

何方か、教えてください。
A列に下記の様な数値データが有りますが、

A列
1.24e-12
8.48e-12
4.41e-9
0.254     ○
......
.....
質問(1)
A列の最大値が入っている横(B列)に○を入れる関数
(他のB列は空白がいいです。)

質問(2)
マクロでA列の最大値の行数を所得する方法

では、宜しくお願いします。

A 回答 (7件)

#4の補足について


>mに数値が編入されますが、Cellsはセルの位置と本には書いています。どうしてmに数値が入るのでしょうか?
私の悪い癖で、Valueを全て省いています。省くとValueと看做してくれる仕組みがあるからです。
m=Cells(i,"A").Value というプロパティを付け加えて考えてください。ほかにセルには書式やコメントや色々のものがある中で、「値」は表計算ソフトの歴史的にも(昔は文字にも色は付かなかった)、表計算は値から始まり、一番大事なデータです。
ついでに別件ですが、他のご回答の中に
>#4 のご回答のように総当りで見つける
と「総当り」という表現がありますが、そもそも最大値は全部の値を読まないと決まらないものです。関数などは、裏では比較や繰り返しをやっているはずだが、表には出していません。そういう繰り返しや比較などを隠した利器(関数やメッソッドなど)を使って進むのが、進歩なんですが、時には原始的な方法でやってみたいときが有ります。
    • good
    • 0
この回答へのお礼

詳しい説明ありがとう御座いました。
良い勉強になりました。

お礼日時:2006/07/11 22:51

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 のご回答をオススメしたいと思い
ます。
    • good
    • 0
この回答へのお礼

回答ありがとう御座います。

お礼日時:2006/07/09 19:44

#1の方が回答されている通り、ワークシート関数で十分です。



(2)を何が何でもマクロでというなら、VBAの中でそのままワークシート関数を使えばいい。
それがいやなら Find メソッドでどうぞ。
    • good
    • 1

いろいろ難しい関数など使わないで、初心に帰り


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に数値が入るのでしょうか?

補足日時:2006/07/10 21:01
    • good
    • 0
この回答へのお礼

回答ありがとう御座います。

お礼日時:2006/07/08 00:14

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")
宜しくお願いします。

補足日時:2006/07/10 17:34
    • good
    • 0

こんばんは。



マクロで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
    • good
    • 0
この回答へのお礼

回答ありがとう御座います。

お礼日時:2006/07/08 00:14

関数で行うなら


B1=IF(MAX(A:A)=B1,"○","")
で下方にコピー、行位置なら
C1=MATCH(MAX(A:A),A:A,0)
※ただし最大値が複数行に合っても最初の行を表示します。
    • good
    • 0
この回答へのお礼

回答ありがとう御座います。

お礼日時:2006/07/08 00:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!