プロが教えるわが家の防犯対策術!

dim target as variant
dim i,a as long
target = range("a1",range("a"& rows.count).end(xlup)).resize(,2).value
for i = 1 to ubound(target)
a = a + target(i,1)
next
これは合計ですが、このコードを利用して
最大値・最小値をもとめることは可能でしょうか

質問者からの補足コメント

  • うーん・・・

    シートに
    例)
    A列
    1
    2
    3
    4
    5
    とあったと致します。比較判定とはどういうことでしょうか?
    初心者なのでおしえていただけませんでしょぅか。

    No.1の回答に寄せられた補足コメントです。 補足日時:2018/05/30 07:14
  • どう思う?

    sort key:=range("a1"),order1:=xldescending,header:=xlyes
    として
    次にrange("a2")が最大値なのでこれを
    例えばrange("c5")に表示させるとして、
    range("c5").value = range("a2").value
    ってかんじですか?

    No.7の回答に寄せられた補足コメントです。 補足日時:2018/05/30 16:30

A 回答 (8件)

No.7への補足に対して。



これは単純にそれぞれの『値』を求める手段を書いてみただけであり、取得できた値をどうしたいのか?については質問文にもありませんから、

>例えばrange("c5")に表示させるとして、

目的がこれであれば

>range("c5").value = range("a2").value
>ってかんじですか?

って感じですね。
    • good
    • 0

まぁ~、それぞれの値だけを調べたいなら、邪道なやり方としては



・空いてる列にコピペして並べ替えをする。
・昇順なら1行目が最小値、最終行が最大値とわかる。

なんてね。
この回答への補足あり
    • good
    • 0

No.5のお礼について。



流石にループして1個ずつ比較しますので、行数次第では・・・と言う所ですよね。
    • good
    • 0
この回答へのお礼

ありがとうござます
また、かんがえます

お礼日時:2018/05/30 11:49

No.3です。



あれ?
私はワークシート関数(のつもり)で回答していて、変数を使った比較判定としては回答してないつもりではあります・・・よ?
ん~私の思い違い?

変数を使った比較判定って良くC言語などで『Mathを使わないで求めよ』って見かける物だと思ってたのですが。
    • good
    • 0
この回答へのお礼

なんとか自分でできました。
比較判定でただ、繰り返し処理なので、
遅いのかな?
Dim target As Variant
Dim i As Long

target = Range("f5", Range("f" & Rows.Count).End(xlUp)).Resize(, 2).Value
m = Range("f5")

For i = 1 To UBound(target)
If target(i, 1) > m Then
m = target(i, 1)
End If
Next
Range("g1") = m

お礼日時:2018/05/30 09:41

比較判定に関しては、別の方が回答しているので良いとして、VBAでもワークシート関数は利用できます。


そちらも検討されてはどうでしょうか?
選択の幅が広がりますし、何より、繰り返し処理より全然早いです。バグも無いし。
    • good
    • 0
この回答へのお礼

有難うございました。

お礼日時:2018/05/30 09:37

No.2です。



>target = range("a1",range("a"& rows.count).end(xlup)).resize(,2).value

Resizeされている点が気になったので、No.1 を列毎(A~B列)求める場合を。

Dim r As Range, rc As Range, i As Integer

Set r = Range("a1", Range("a" & Rows.Count).End(xlUp)).Resize(, 2)

For i = 1 To 2

Set rc = Intersect(r, Columns(i)) ' r (A:B)の範囲のうち列 Columns(1),Columns(2)...と重なる範囲を取得する

If Not rc Is Nothing Then ' 上記で重複した範囲があった(Nothing ではない)なら

With Application
MsgBox "列(" & i & ")番目の結果" & vbCrLf & _
"MAX: " & .Max(rc) & vbTab & "MIN: " & .Min(rc) & vbTab & "SUM: " & .Sum(rc)
End With

Set rc = Nothing

End If

Next

Set r = Nothing
    • good
    • 0
この回答へのお礼

有難うございました。

お礼日時:2018/05/30 09:41

Dim r As Range


Set r = Range("a1", Range("a" & Rows.Count).End(xlUp))
With Application
MsgBox "MAX: " & .Max(r) & vbTab & "MIN: " & .Min(r) & vbTab & "SUM: " & .Sum(r)
End With
    • good
    • 0
この回答へのお礼

いつも有難うございます。
納得です。

お礼日時:2018/05/30 07:10

可能です。


比較判定と変数を用意してください。

ワークシート関数でもいいですけどね。
この回答への補足あり
    • good
    • 0
この回答へのお礼

有難うございました。

お礼日時:2018/05/30 09:41

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