Excel VBA質問箱 IV

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

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


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

【65861】variant型の配列の結合方法 totoro 10/7/1(木) 18:50 質問[未読]
【65862】Re:variant型の配列の結合方法 中二 10/7/1(木) 21:12 発言[未読]
【65863】Re:variant型の配列の結合方法 参考にならない? 10/7/1(木) 22:05 発言[未読]
【65877】Re:variant型の配列の結合方法 totoro 10/7/4(日) 22:04 お礼[未読]
【65984】Re:variant型の配列の結合方法 熊谷隆史 10/7/13(火) 6:49 発言[未読]

【65861】variant型の配列の結合方法
質問  totoro  - 10/7/1(木) 18:50 -

引用なし
パスワード
   配列の結合方法を教えてください。
For〜Nextを使用せず、配列操作によって実現したいです。

'------------------------------
Public Sub AAAAA()

 Dim a() As Variant
 Dim b() As Variant
 Dim c() As Variant

 a = Range("A1:E10")
 b = Range("A21:E30")
 c = Array(a, b)

End Sub
'------------------------------

配列の次元とデータ数が
 配列a は (1 to 10,1 to 5)
 配列b は (1 to 10,1 to 5)
 配列c は (0 to 1)(1 to 10,1 to 5)
ができます。

結果として欲しい配列の次元とデータ数は
 配列c が (1 to 20,1 to 5)
です。

上記プログラムは例ですが、
実際の使い方は、
tのシートにまたがるデータを一つの配列にまとめたいと考えております。

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

【65862】Re:variant型の配列の結合方法
発言  中二  - 10/7/1(木) 21:12 -

引用なし
パスワード
   apiで配列をコピーするやつがあった

Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As Long, ByVal Source As Long, ByVal Length As Long)
Sub aaa()
Dim a
a = Range("A1:E10")
b = Range("A21:E30")
ReDim Preserve a(1 To 10, 1 To 10)
MoveMemory VarPtr(a(1, 6)), VarPtr(b(1, 1)), ??? ←コピーするバイト長
End Sub

これでa(6,10)〜a(10,10)にbが入るはず
???の部分はバリアントだからわからんかった
長すぎるとPCぶっ壊れる恐れあり

ちなみにa(20,5)にするのは配列の仕組み上めんどい

ってかfornext使ったほうが絶対いい

【65863】Re:variant型の配列の結合方法
発言  参考にならない?  - 10/7/1(木) 22:05 -

引用なし
パスワード
   >tのシートにまたがるデータを一つの配列にまとめたいと考えております。
ワークシートを活用することを勧めます。
連続した場所にコピーして、配列に吸い上げればいいんじゃないですか?
メモリを直接触るのはどうでしょうか。

【65877】Re:variant型の配列の結合方法
お礼  totoro  - 10/7/4(日) 22:04 -

引用なし
パスワード
   ご助言ありがとうございます。
apiのものはやはりバイト単位なのがネックですね。

必要なところはfor〜nextで対応することにいたしました。


ありがとうございました。

【65984】Re:variant型の配列の結合方法
発言  熊谷隆史  - 10/7/13(火) 6:49 -

引用なし
パスワード
   ▼totoro さん:
一応書いておくと、旧VB/VBAの配列はSAFEARRAYです。
なので一旦、Variant型変数(VARIANT構造体)にコピーしてSAFEARRAYのポインタを得てからって話になります。
で、次元数の調整は簡単な方でも要素数までとなると、VBAだけで処理するよりも却って手間がかかるのでは。
# この手の質問は、旧VB系の掲示板向きかも。

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