Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


9222 / 13644 ツリー ←次へ | 前へ→

【28641】配列内部の順番を 逆にする方法(関数)は? row 05/9/11(日) 15:12 質問[未読]
【28642】Re:配列内部の順番を 逆にする方法(関数... [名前なし] 05/9/11(日) 15:49 発言[未読]
【28643】Re:配列内部の順番を 逆にする方法(関数... row 05/9/11(日) 16:14 お礼[未読]
【28645】Re:配列内部の順番を 逆にする方法(関数... [名前なし] 05/9/11(日) 16:35 発言[未読]
【28647】Re:配列内部の順番を 逆にする方法(関数... row 05/9/11(日) 16:48 お礼[未読]
【28646】Re:配列内部の順番を 逆にする方法(関数... だるま 05/9/11(日) 16:40 回答[未読]
【28648】Re:配列内部の順番を 逆にする方法(関数... row 05/9/11(日) 16:49 お礼[未読]

【28641】配列内部の順番を 逆にする方法(関数)...
質問  row  - 05/9/11(日) 15:12 -

引用なし
パスワード
   みなさんの知恵を貸して下さい。

いま、比較対象ファンド1という配列に、300個のデータが存在しています。

これが、
比較対象ファンド1〜3 まで、3つ存在しているので
合計 900個のデータがあります。

その配列内部の順番を逆に変えたいのですが、簡単な方法は無いでしょうか?

逆というのは、
例えば、以下の数値が入っているとします。

比較対象ファンド1(1)=1
比較対象ファンド1(2)=2

比較対象ファンド1(299)=299
比較対象ファンド1(300)=300

この状態から、以下の状態にしたいのです。

比較対象ファンド1(1)=300
比較対象ファンド1(2)=299

比較対象ファンド1(299)=2
比較対象ファンド1(300)=1

入っている数値は、それぞれ不定ですので
単純計算という訳には、行かないのです。

関数みたいな物はありますでしょうか?

よろしくお願いいたします。

【28642】Re:配列内部の順番を 逆にする方法(関...
発言  [名前なし]  - 05/9/11(日) 15:49 -

引用なし
パスワード
   ▼row さん:
単純に入れ替えるだけじゃだめでしょうか?

Sub 使用例()
Dim 比較対象ファンド1 As Variant
Dim i As Long

  比較対象ファンド1 = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
  Call ReverseArray(比較対象ファンド1)
  MsgBox Join(比較対象ファンド1, ",") '中身確認の為
End Sub

Sub ReverseArray(ByRef Ary As Variant)
Dim i As Long, j As Long
Dim AryHalf As Long, AryMin As Long, AryMax As Long
Dim Temp As Variant

  AryMin = LBound(Ary)
  AryMax = UBound(Ary)
  AryHalf = AryMax \ 2
  For i = AryMin To AryHalf
    j = AryMax - i + AryMin
    Temp = Ary(i)
    Ary(i) = Ary(j)
    Ary(j) = Temp
  Next i
End Sub

【28643】Re:配列内部の順番を 逆にする方法(関...
お礼  row  - 05/9/11(日) 16:14 -

引用なし
パスワード
   >▼row さん:
>単純に入れ替えるだけじゃだめでしょうか?

入替えるだけでも、有り難い手法ですが
なるほど・・・こうゆう方法があったのですね。
勉強になりました。

ただ、この一文が理解できていません。

>  比較対象ファンド1 = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)

この              ↑1〜11 ???が
必要な意味が分かりません。

arrayは、 ヘルプをみると
バリアント値を返します
と書かれていますが・・・

とにかく、ありがとうございました

【28645】Re:配列内部の順番を 逆にする方法(関...
発言  [名前なし]  - 05/9/11(日) 16:35 -

引用なし
パスワード
   ▼row さん:
>>  比較対象ファンド1 = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
>
>この              ↑1〜11 ???が
>必要な意味が分かりません。

配列の中身が入れ替わっていることを確認する為に、Array関数で仮の配列を作った
だけです。「11個」にした意味は特にありませんので気になさらないでください。
連番にしておけば、入れ替わった時に数値が逆順になってるのでわかりやすいでしょう。

【28646】Re:配列内部の順番を 逆にする方法(関...
回答  だるま WEB  - 05/9/11(日) 16:40 -

引用なし
パスワード
   こんにちは

別に入れ替えなくても逆順にアクセスできれば良いんでしょう。
であれば、こんな感じでいかがでしょうか。^d^

Sub test()
  Dim A As Variant
  Dim L As Integer
  Dim U As Integer
  Dim i As Integer
  
  A = Array(1, 2, 3, 4, 5, 6, 7)
  L = LBound(A)
  U = UBound(A)
  
  For i = L To U
    Debug.Print A(U - i + L)
  Next
  
End Sub

【28647】Re:配列内部の順番を 逆にする方法(関...
お礼  row  - 05/9/11(日) 16:48 -

引用なし
パスワード
   >配列の中身が入れ替わっていることを確認する為に、Array関数で仮の配列を作っただけです

なるほど、配列を代入していたんですね。

勉強になりました、ありがとうございます

【28648】Re:配列内部の順番を 逆にする方法(関...
お礼  row  - 05/9/11(日) 16:49 -

引用なし
パスワード
   ▼だるま さん:
>であれば、こんな感じでいかがでしょうか。^d^

だるまさんも、コメントありがとうございます。

スッキリしている感じで、参考になりました。

9222 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free