Excel VBA質問箱 IV

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

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


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

【24067】2次配列の拡大 ささ 05/4/11(月) 16:39 質問[未読]
【24068】Re:2次配列の拡大 ウッシ 05/4/11(月) 16:50 回答[未読]
【24069】Re:2次配列の拡大 ささ 05/4/11(月) 17:10 質問[未読]
【24070】Re:2次配列の拡大 ichinose 05/4/11(月) 18:51 発言[未読]
【24071】Re:2次配列の拡大 ni 05/4/11(月) 18:54 発言[未読]
【24083】Re:2次配列の拡大 ささ 05/4/12(火) 9:14 お礼[未読]

【24067】2次配列の拡大
質問  ささ  - 05/4/11(月) 16:39 -

引用なし
パスワード
   いつもお世話になっております

 2次配列を少しづつ増やしていきたいのですが
 例えばはじめ (0,0) 〜 (2,30)の配列で
    次に  (3,30)〜(6、30)までを追加する
    このようことをくりかえしおこないたいのです
      
    ReDim Preserve を使ってやりたいのですが
    上手く行きません
   何か良い方法が有れば教えて下さい

【24068】Re:2次配列の拡大
回答  ウッシ  - 05/4/11(月) 16:50 -

引用なし
パスワード
   ▼ささ さん:
>いつもお世話になっております
>
> 2次配列を少しづつ増やしていきたいのですが
> 例えばはじめ (0,0) 〜 (2,30)の配列で
>    次に  (3,30)〜(6、30)までを追加する
>    このようことをくりかえしおこないたいのです
>      
>    ReDim Preserve を使ってやりたいのですが
>    上手く行きません
>   何か良い方法が有れば教えて下さい

こんにちは

>ReDim Preserve
は、最後の次元の上限インデックス番号しか変更出来ないです。

【24069】Re:2次配列の拡大
質問  ささ  - 05/4/11(月) 17:10 -

引用なし
パスワード
   追加の2次配列分
2次配列を拡大すれば、
データを入れれるので問題ないと思ったのですが
よろしくお願いします

▼ウッシ さん:
>▼ささ さん:
>>いつもお世話になっております
>>
>> 2次配列を少しづつ増やしていきたいのですが
>> 例えばはじめ (0,0) 〜 (2,30)の配列で
>>    次に  (3,30)〜(6、30)までを追加する
>>    このようことをくりかえしおこないたいのです
>>      
>>    ReDim Preserve を使ってやりたいのですが
>>    上手く行きません
>>   何か良い方法が有れば教えて下さい
>
>こんにちは
>
>>ReDim Preserve
>は、最後の次元の上限インデックス番号しか変更出来ないです。

【24070】Re:2次配列の拡大
発言  ichinose  - 05/4/11(月) 18:51 -

引用なし
パスワード
   ささ さん、ウッシ さん、こんばんは。

Redim Preserve 〜は、この場合使用できませんね!!
単純に大きい配列を用意してみては?
'=============================================
Sub test()
  ReDim a(2, 30)
  For idx = 0 To 2
   For jdx = 0 To 30
    a(idx, jdx) = idx + jdx
    Next
   Next
  Range(Cells(1, 1), Cells(UBound(a(), 1) + 1, UBound(a(), 2) + 1)).Value = a()
  MsgBox "ok"
  a() = special_redim(a(), 6, 30)
  MsgBox LBound(a(), 1) & ":::" & UBound(a(), 1)
  MsgBox LBound(a(), 2) & ":::" & UBound(a(), 2)
  Cells.ClearContents
  Range(Cells(1, 1), Cells(UBound(a(), 1) + 1, UBound(a(), 2) + 1)).Value = a()
End Sub
'==================================================================
Function special_redim(myarray(), x, y)
'但し、x>=ubound(myarray(),1) ,y>=ubound(myarray(),2)
  ReDim wk(LBound(myarray(), 1) To x, LBound(myarray(), 2) To y) As Variant
  For idx = LBound(myarray(), 1) To UBound(myarray(), 1)
   For jdx = LBound(myarray(), 2) To UBound(myarray(), 2)
    wk(idx, jdx) = myarray(idx, jdx)
    Next jdx
   Next idx
  special_redim = wk()
End Function

【24071】Re:2次配列の拡大
発言  ni  - 05/4/11(月) 18:54 -

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

>>>ReDim Preserve
>>は、最後の次元の上限インデックス番号しか変更出来ないです。

ということなので、別の提案です。

その1
作業用の配列を作って、そこにデータを全て移してから、
元の配列をPreserveを使わずに拡張して、
作業用の配列から値を戻す。

その2
最初から大きめの配列を用意しておく。

他人に渡すものなら、サイズを超えないように、チェックなどが必要ですが、
自分で使う分には、その2 が簡単でお勧めです。

【24083】Re:2次配列の拡大
お礼  ささ  - 05/4/12(火) 9:14 -

引用なし
パスワード
   ウッシ さん、 ichinose さん、 ni さん
ありがとうございました
>ReDim Preserve
でわ、やはり無理みたいですね
ichinose さんの案を参考に
アレンジしてみます
また、よろしくお願いします

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