
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件)
- 最新から表示
- 回答順に表示
No.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

No.2
- 回答日時:
配列要素の最大値を求める方法は、[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)」ですよね。
質問に答えてくださったお二方、ありがとうございました!!
質問を書いてから、やっぱり自分で考えてやってみたら、できました!そして今、この質問回答を見てみるとDOUGLAS_さんが書いている方法と同じでした!
自信がつきました。
ご指摘も含め、ありがとうございます。
No.1
- 回答日時:
最大値を覚えておく変数corr_maxと、j_maxを定義・適切に初期化しておいて、
correlation(j)を計算した直後に、
if correlation(j) > corr_max then corr_max=correlation(j): j_max=J
――としておくとか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
EXCEL VBA 2次元配列に格納された値の最小値を調べたい
Access(アクセス)
-
Excel vba 配列内の最大値を求めたいです。
Excel(エクセル)
-
2つ以上の変数を比較して最大数を求めたい
Word(ワード)
-
-
4
配列に中で一番小さい値を教えてくれる関数ありませんか/アクセス、VBA
PowerPoint(パワーポイント)
-
5
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
6
VBA 配列に格納した値の平均のやり方についてお教え願います
Visual Basic(VBA)
-
7
【VBA】テキストファイルを指定行数からの読み込み
Visual Basic(VBA)
-
8
もしセルが#N/A"なら~をする・・・には?"
Excel(エクセル)
-
9
VBAでEmpty値って何ですか?
Excel(エクセル)
-
10
VBAでダブルコーテーション入りの数式をセルにセットしたい
Visual Basic(VBA)
-
11
EXCEL VBA で、0から?1から?
Excel(エクセル)
-
12
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
13
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
14
【EXCEL VBA】Range(A:A").Find(What:="キーワード")の1行目について"
Visual Basic(VBA)
-
15
配列の中から最大値だけ取り出す方法
Visual Basic(VBA)
-
16
【Excel VBA】指定した行の最大値を持つセル番地を取得したい
Excel(エクセル)
-
17
VBAのプログラムで、DIAG = 1# / A(L, L) や R(
その他(プログラミング・Web制作)
-
18
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
-
19
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
20
MSFormsとは何ですか?
XML
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
VB6のメモリ解放に関して
-
VB.NETの配列の限界を教えてく...
-
エクセルでXY座標に並べられた...
-
Excel2010のinputboxで複数デー...
-
配列の中の最大値とそのインデ...
-
Variant型配列の文字コード変換
-
C#でbyte配列から画像を表示さ...
-
配列のペースト出力結果の書式...
-
VBA: Select Caseを短くしたい
-
配列の要素がすべてカラかどう...
-
大量の変数を定義するにはどう...
-
.NET 文字コードの変換
-
OutOfMemoryExceptionの回避策...
-
RPG 配列宣言について
-
Excelマクロ:配列データからグ...
-
Imagelist の使い回しについて
-
VBAでMODE関数をつくる
-
クリスタルレポートで文字列の...
-
2つ目のレコードの値を取得す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
C#でbyte配列から画像を表示さ...
-
エクセルでXY座標に並べられた...
-
vba フィルター 複数条件 3つ以...
-
配列のペースト出力結果の書式...
-
OutOfMemoryExceptionの回避策...
-
配列の中の最大値とそのインデ...
-
複数のtextboxの処理を一括で行...
-
Dir関数で読み取り順を操作でき...
-
VB6からの移行したいけど、VB.N...
-
COBOLの基本的な事なので...
-
構造体配列の特定のメンバーをF...
-
大量の変数を定義するにはどう...
-
EXCEL VBAの課題です
-
Redim とEraseの違いは?
-
VB.NETの配列にExcelから読み込...
-
VBAでMODE関数をつくる
-
VB.NETにて、構造体へデータを...
-
1ビットごとの配列を作りたい
-
VBAで配列引数を値渡しできない...
おすすめ情報