
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) vba 等間隔の列に対しての計算 6 2022/05/17 20:15
- Visual Basic(VBA) vbaのvlookup関数エラー原因を教えていただけないでしょうか。 3 2022/04/25 16:16
- Visual Basic(VBA) VBA横データを縦にしたいです 2 2023/08/08 19:38
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- Visual Basic(VBA) VBAで時間(00:00形式)を積算(足し算)したい 1 2022/11/15 17:04
- Visual Basic(VBA) Sheet1のA列にコードB列にメアド、Sheet2のB列にコード一覧とD列にメアド一覧があり、Sh 3 2022/10/19 11:57
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) 改行ごとに行を追加し、数量を分割 4 2023/07/11 16:39
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
このQ&Aを見た人はこんなQ&Aも見ています
-
EXCEL VBA 2次元配列に格納された値の最小値を調べたい
Access(アクセス)
-
2つ以上の変数を比較して最大数を求めたい
Word(ワード)
-
配列に中で一番小さい値を教えてくれる関数ありませんか/アクセス、VBA
PowerPoint(パワーポイント)
-
-
4
Excel vba 配列内の最大値を求めたいです。
Excel(エクセル)
-
5
配列の中から最大値だけ取り出す方法
Visual Basic(VBA)
-
6
【Excel VBA】指定した行の最大値を持つセル番地を取得したい
Excel(エクセル)
-
7
VBAの配列サイズとメモリに関して
Visual Basic(VBA)
-
8
【VBA】テキストファイルを指定行数からの読み込み
Visual Basic(VBA)
-
9
エクセルVBA 配列からセルに「関数式」を一気代入したい
Visual Basic(VBA)
-
10
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
-
11
配列の値を置換するにはどうすればいいでしょう?
Excel(エクセル)
-
12
VBA 配列に格納した値の平均のやり方についてお教え願います
Visual Basic(VBA)
-
13
VBAコード記述に際して、コード全体を自動的にインデント付ける方法
Access(アクセス)
-
14
もしセルが#N/A"なら~をする・・・には?"
Excel(エクセル)
-
15
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
16
最も近い数値のあるセルを探す
Excel(エクセル)
-
17
EXCEL VBA で、0から?1から?
Excel(エクセル)
-
18
VBAで多次元配列のインデックス番号の取得
Excel(エクセル)
-
19
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
20
VBAで仕様書は書きますか?
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
複数のtextboxの処理を一括で行...
-
エクセルでXY座標に並べられた...
-
配列の格納方法
-
VB6.0からVB.NETへの移行
-
配列の中から最大値だけ取り出...
-
visual basicのテキストボック...
-
C#でbyte配列から画像を表示さ...
-
配列の中の最大値とそのインデ...
-
Dir関数で読み取り順を操作でき...
-
構造体配列内の文字列検索のよ...
-
CheckBoxの配列化
-
COBOLの基本的な事なので...
-
テキストボックの文字を一行ず...
-
vb2008 コントロール配列
-
vba フィルター 複数条件 3つ以...
-
pictureboxの名前を変数で設定...
-
配列について
-
VB上でのレコードセットの扱い...
-
VBAの構造体について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
vba フィルター 複数条件 3つ以...
-
C#でbyte配列から画像を表示さ...
-
Dir関数で読み取り順を操作でき...
-
エクセルでXY座標に並べられた...
-
配列のペースト出力結果の書式...
-
定数配列の書き方
-
大量の変数を定義するにはどう...
-
構造体配列の特定のメンバーをF...
-
Redim とEraseの違いは?
-
複数のtextboxの処理を一括で行...
-
VB.NETの配列にExcelから読み込...
-
COBOLの基本的な事なので...
-
Excel2010のinputboxで複数デー...
-
VBAでMODE関数をつくる
-
レコードセットの中身を配列に...
-
ReDim PreserveよりもReDimが遅い
-
EXCELを使って、アクセスログを...
-
配列の中の最大値とそのインデ...
-
VB6のメモリ解放に関して
おすすめ情報