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も見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
EXCEL VBA 2次元配列に格納された値の最小値を調べたい
Access(アクセス)
-
配列に中で一番小さい値を教えてくれる関数ありませんか/アクセス、VBA
PowerPoint(パワーポイント)
-
Excel vba 配列内の最大値を求めたいです。
Excel(エクセル)
-
-
4
配列でデータが入っている要素を求める方法
Visual Basic(VBA)
-
5
配列の重複する値とその個数を取得したい
Visual Basic(VBA)
-
6
VBA:日付を配列に入れ別セルに転記するとデータ型が変わる
Visual Basic(VBA)
-
7
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
8
配列の中から最大値だけ取り出す方法
Visual Basic(VBA)
-
9
VBAで配列の計算
Excel(エクセル)
-
10
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
11
【Excel VBA】指定した行の最大値を持つセル番地を取得したい
Excel(エクセル)
-
12
VBAのWorksheetFunctionの引数に配列を使いたい
PowerPoint(パワーポイント)
-
13
ExcelのVBA。public変数の値が消える
Visual Basic(VBA)
-
14
EXCEL 年月表示をするVBAを教えてください。
Excel(エクセル)
-
15
「amp;」ってどういう意味?
HTML・CSS
-
16
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
17
Enterキーでマクロを起動さす。
その他(ソフトウェア)
-
18
Access フォームのテキストボックスに半角英字のみで入力する設定は
Access(アクセス)
-
19
VBA シートのボタン名を変更したい
Visual Basic(VBA)
-
20
Excel マクロ VBA プロシージャが大きすぎます のエラー対処方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
C#でbyte配列から画像を表示さ...
-
vba フィルター 複数条件 3つ以...
-
定数配列の書き方
-
VBScript で ADO Streamオブジ...
-
Dir関数で読み取り順を操作でき...
-
デバイスマネージャーの一覧取得
-
順位をつける VB.NET2008
-
構造体配列内の文字列検索のよ...
-
2次元配列の初期値
-
エクセル(VBA)の空白配列の削除...
-
構造体配列の特定のメンバーをF...
-
コンボボックスのインデックス...
-
配列の中から最大値だけ取り出...
-
配列の中の最大値とそのインデ...
-
大量の変数を定義するにはどう...
-
Redim とEraseの違いは?
-
VB.NETの配列の限界を教えてく...
-
C++で作成したDLLにVBAから配列...
-
複数のtextboxの処理を一括で行...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
C#でbyte配列から画像を表示さ...
-
vba フィルター 複数条件 3つ以...
-
Dir関数で読み取り順を操作でき...
-
エクセルでXY座標に並べられた...
-
配列の中の最大値とそのインデ...
-
VB.NETの配列にExcelから読み込...
-
定数配列の書き方
-
Excel2010のinputboxで複数デー...
-
大量の変数を定義するにはどう...
-
構造体配列の特定のメンバーをF...
-
構造体配列内の文字列検索のよ...
-
Redim とEraseの違いは?
-
Segmentation Fault (メモリ制限?)
-
OutOfMemoryExceptionの回避策...
-
VBAでMODE関数をつくる
-
COBOLの基本的な事なので...
-
Excelのメモリ(配列)の上限は2G...
-
コンボボックスのインデックス...
-
VB6のメモリ解放に関して
おすすめ情報