トップページ > プログラム > 2014年06月27日 > tthd8i7m

書き込み順位&時間帯一覧

9 位/217 ID中時間01234567891011121314151617181920212223Total
書き込み数1110100000000010000000005



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
945
Excel VBA 質問スレ Part33

書き込みレス一覧

Excel VBA 質問スレ Part33
945 :デフォルトの名無しさん[]:2014/06/27(金) 00:47:50.48 ID:tthd8i7m
配列の操作に関して教えてほしいんですが
2重ループにしないで(For j=・・・・・なしに)配列を一発で
代入できないでしょうか?

k=0
For i = LBound(Arry1, 1) To UBound(Arry1, 1)
  if とある条件 then
    k=k+1
    For j = LBound(Arry1, 2) To UBound(Arry1, 2)
      Arry2(k, j) = Arry1(i, j)
    Next
  end if
Next
Excel VBA 質問スレ Part33
951 :945[]:2014/06/27(金) 01:01:09.42 ID:tthd8i7m
>>948
無理ですか ありがとうございます

この前に少し重い処理があって それを含めて 全体をもっと効率化できないかと考えておりました
重い処理の方をもっと効率化するように考えてみます。
Excel VBA 質問スレ Part33
967 :945[]:2014/06/27(金) 02:59:21.01 ID:tthd8i7m
>>959
えっとごめんなさい
>2重ループにしないで(For j=・・・・・なしに)配列を一発で
が主眼で if とある条件 then
をつけないと Arry2 = Arry1 でいいじゃんとかいわれそうで付けた
説明不足で申し訳ありません

実際の処理は以下なんです
当初これで質問しようとしてたんだけどここまで聞くのは どうなのかって感じでもっとシンプルな質問に変えたんです(^^;
(ソート処理をFunction化したものの 一部なんだけどね)

配列 Arry(1 TO n,1 TO m)
配列 Sortdata(1 TO n)・・・・実際は2次元配列だけど 説明上1次元としている
があって

配列Sortdataは 1〜n の 数値が 入っていて(同じ数値は入っていない)  配列Arryのインデックス値に対応してます

配列Dataを元に 配列Arrayの配置を変えたいのです。
Sortdata(1) = 100 なら 配列Arry(100, j) → 配列Arry(1, j)
Sortdata(5) = 200 なら 配列Arry(200, j) → 配列Arry(5, j)って感じで
※配列Arryのある列をキーにして昇順になるように 配列Sortdataが作られていると考えて下さい。

'Orgin配列へ書戻し
Arry_Copy = Arry
For i = LBound(Sortdata, 1) To UBound(Sortdata, 1)
  For j = LBound(Arry, 2) To UBound(Arry, 2)
    Arry(i, j) = Arry_Copy(Sortdata(i), j)
  Next
Next

PS. ソート処理本体を バブルソート から クイックソート に変えようとアルゴリズム勉強中です(^^
Excel VBA 質問スレ Part33
978 :945[]:2014/06/27(金) 04:39:09.43 ID:tthd8i7m
>>975
たしかにそれでも出来るけど
それ用のシート作らんとだめだし処理速度的にどうなんだろうか
配列内ソートの方が圧倒的に早いと思うんだけど
数百件程度のソートでは低速といわれてるバブルソートでも使えたけど
数千件のソートで処理速度的に不満が出てきたので効率化できないかなと

>>975 のやり方も含めて検討してみる ありがとう
あとは個人的な興味もありクイックソートも勉強中してみるっス

さて さすがに眠いな そろそろ仮眠タイムなので寝るっす
ではでは
Excel VBA 質問スレ Part33
989 :945[]:2014/06/27(金) 14:55:39.03 ID:tthd8i7m
>>980さん >>984さん ありがとうございます。

>>967でもちょっと書いたけど
>(ソート処理をFunction化したものの 一部なんだけどね)
各プロシージャで使われる共通Functionなんです
なんでIn/Outの配列仕様は変えたくないのです(あっちこち変更しないとだから)

そのごく一部の処理で 元々数百件のデータを扱うもりで書いた処理が
データ量増加で 数千件に肥大してまい処理時間がかかるようになり
その主要因が 件の共通Functionだったのです。

とは言えそもそも 呼び足し元の処理自体もデータ量増加に対応出来てない部分もあるんで
>>980さんの言われるとおり 根本から見直したほうがよさそうです(D/B利用も含めて)

>>984さん
そうゆう手法もありですね今後の参考にさせてもらいます。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。