アプリ版:「スタンプのみでお礼する」機能のリリースについて

Visual Basicを学んでまだ10日です。
いま、配列中の最大値と、そのインデックス番号を取得する方法を考えています。
なるべく計算処理に時間が掛からない方法で行いたいのですが、なにか良い方法はありますか?

For j = 0 To 100

For p = 0 To 415
scan1(p) = Sheets("Sheet1").Cells(j, p + 2)
scan2(p) = Sheets("Sheet2").Cells(j, p + 2)
Next p


correlation(j) = Application.WorksheetFunction.Correl(scan1(), scan2())
Erase scan1
Erase scan2

Next j


で、この後に
correlation(j)配列の最大値とそのインデックスを求めたいです。


よろしくお願いします。

ちなみに、配列の中の値は、重複を含んでいません。

A 回答 (3件)

シートを使った例を上げます。



シートのデータに図の様にデータを並べ、降順にソートして
一番上が、その最大値になります。


Public Sub f()


Range("A1:B10").Select
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
:=xlPinYin, DataOption1:=xlSortNormal
Selection.Sort Key1:=Range("B2"), Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
:=xlPinYin, DataOption1:=xlSortNormal


Debug.Print Cells(2, 1).Value, Cells(2, 2).Value


End Sub
「配列の中の最大値とそのインデックス番号を」の回答画像3
    • good
    • 0

 配列要素の最大値を求める方法は、[ANo.1] osamuy さんがお書きのように


For ~ : If ~ Then ~ : Next
で回す方法が通例になっているようですが、私には理由が分かりません(論拠を見つけられません)。

http://okwave.jp/qa/q4955645.html
[ANo.5] Wendy02 さんが
>配列の最大値を取る方法には、裏技があって、
>ふつうは、1次元配列で、ワークシートのMax を取ります。
と書いていらっしゃいます。

 お示しの例でしたら、correlation は 倍精度浮動小数点数型 (Double) の 1次元配列ですから、普通に [Application.WorksheetFunction.Max 関数] で求められると存じますが。。。

With Application.WorksheetFunction
 [最大値] = .Max(correlation)
 [インデックス] = .Match([最大値], correlation, 0)
End With

 ちなみに、Sheet3 A1:A100 に「correlation(1 To 100)」を配置して、
=MAX(A:A)
=MATCH(MAX(A:A),A:A,0)
を何度も計算させてみましたが、VBA の「Application.WorksheetFunction.~」の値と一致しました。

 なお、「Cells(j, p + 2)」という記述がありますので、「For j = 0 To 100 」の部分は「For j = 1 ~」かと存じます。
 なおなお、「Visual Basicを学んで~」とお書きですが、「Visual Basic for Application(VBA)」ですよね。
    • good
    • 1
この回答へのお礼

質問に答えてくださったお二方、ありがとうございました!!

質問を書いてから、やっぱり自分で考えてやってみたら、できました!そして今、この質問回答を見てみるとDOUGLAS_さんが書いている方法と同じでした!
自信がつきました。

ご指摘も含め、ありがとうございます。

お礼日時:2010/03/01 01:43

最大値を覚えておく変数corr_maxと、j_maxを定義・適切に初期化しておいて、


correlation(j)を計算した直後に、
if correlation(j) > corr_max then corr_max=correlation(j): j_max=J
――としておくとか。
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A