
ExcelVBAで質問です。初心者です。2つの離れた二次元配列を1つにしたいのですが、
3行3列、出力されるのですが、後3行3列、出力されません。配列の勉強をしているので、意味不明かもしれませんが、大変、お手数ですが、どなたか、ご存じの方、教えて頂けでしょうか?
コード↓
Sub sample2()
Dim testValues As Variant
Dim i, j As Long
testValues = Union(Range("a1:c12"), Range("f1:h12"))
ReDim Preserve testValues(1 To 12, 1 To 6)
For i = 1 To 12
For j = 1 To 6
Cells(i + 16, j) = testValues(i, j) '←上手く、出力されません
Next j
Next i
End Sub
No.4ベストアンサー
- 回答日時:
結局「何をやりたいか?」ですよね。
今回はセル範囲が 12×3 と 12×3 でセル選択の矩形が同じなので、無理やり配列化できなくはないです。
しかし、12×3 と 4×8 みたいな場合はどうする?って話です。
また、セル範囲の行位置や列位置がずれている場合、つまり A1:C3 と F10:E100 みたいな場合はどのような2次元配列にできそうですか?
破綻しそうですよね。
↓Areas でセル範囲毎のループ回す例
Sub sampleProc()
Dim dat_range As Range
Set dat_range = Range("A1:C12,F1:H12")
'初期出力先
Dim r_pos As Long: r_pos = 17
Dim c_pos As Long: c_pos = 1
Dim area As Range
Dim buf As Variant
For Each area In dat_range.Areas
'Areas コレクションのループはセル範囲毎のRangeを返します
buf = area.Value
Cells(r_pos, c_pos).Resize(UBound(buf), UBound(buf, 2)).Value = buf
'次の書き込み先オフセット
c_pos = c_pos + UBound(buf, 2)
Next
End Sub
#余談
なお、Union は Range を返すプロパティーです。したがって
>testValues = Union(Range("a1:c12"), Range("f1:h12"))
は、Range のディフォルトプロパティー Value が補完され、Union(~).Value と解釈されます。結果 Variant 型変数 testValues にはセル範囲の値が2次元配列で代入されますが、この時連続しない2番目のセル範囲は無視されます。Value プロパティーの仕様ですね。
すみません。a1:c12,f1:h12の離れた二次元配列を、a17:f28のひとつの二次元配列にしたいのですが、出来ないですよね。
No.3
- 回答日時:
こんばんは
目的はシートへの出力ということで良いのでしょうか?
>3行3列、出力されるのですが~
12行ではないの?
よくわからないので、「a1:c12、f1:h12の範囲を、A17:F28へ転記したい」ということと解釈しました。
すでに回答にあるように、配列に直接代入できるのは連続したセル範囲のみです。
全体を含む範囲で取得して、そこから必要な範囲を配列に抽出する方法も考えられますが、シートへの転記が目的なら、配列を介さずとも直接セル範囲を転記すれば足りますね。
ご提示の例で言うなら、
Range("A17:C28").Value = Range("A1:C12").Value
Range("D17:F28").Value = Range("F1:H12").Value
とすれば足りると思います。
値を配列に格納するのが目的なら、上記の転記後の範囲を配列として取得するか、あるいは以下のような方法もあります。(あるいは、ループで回して、プリミティブに代入しても勿論可能です)
https://infoment.hatenablog.com/entry/2019/10/22 …
No.2
- 回答日時:
良くわからないけどこう?
Sub sample2()
Dim testValues As Variant
Dim i, j As Long
Dim v, v2 As Variant
testValues = Push(Range("a1:c12").Value, Range("f1:h12").Value)
j = 1
For Each v In testValues
i = 16
For Each v2 In v
Cells(i, j) = v2
i = i + 1
Next
j = j + 1
Next
End Sub
Function Push(ParamArray a() As Variant) As Variant
Push = a
End Function
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセルVBA 配列からセルに「関数式」を一気代入したい
Visual Basic(VBA)
-
VBA 1次元配列を2次元に追加する
Visual Basic(VBA)
-
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
-
-
4
読み込みで一行おきに配列に格納
Visual Basic(VBA)
-
5
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
6
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
7
Excelのセルの色指定をVBAから配列を用いて効率的に行う方法はあり
Visual Basic(VBA)
-
8
for next の不連続版があるでしょうか
その他(Microsoft Office)
-
9
EXCEL VBA Dictionaryで複数の値を格納→離れた位置に出力する方法
Excel(エクセル)
-
10
VBA 別ブックからコピペしたいのですが、軽くしたいです
Visual Basic(VBA)
-
11
範囲指定したセルを1つずつ飛ばす方法
Visual Basic(VBA)
-
12
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
13
VBAで、離れた複数の列に対して処理を施すには?
Visual Basic(VBA)
-
14
Excelで、条件と一致する最後のセルを検索したい
Excel(エクセル)
-
15
VBAで配列の計算
Excel(エクセル)
-
16
VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。
Visual Basic(VBA)
-
17
エクセル VBA・マクロ コピー 貼り付け 飛び飛び
Excel(エクセル)
-
18
表にフィルターをかけ、絞ったデータ(可視化セルのみ)を一次元配列として変数に入れるという動作を書きた
Visual Basic(VBA)
-
19
VBA:日付を配列に入れ別セルに転記するとデータ型が変わる
Visual Basic(VBA)
-
20
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
隣の枝がはみ出してきたら切ってもいい?最もやってはいけないことは?
「隣の木が越境してきて困るが、勝手に切ってはいけないと聞くし…」そう思っている方も多いだろう。実は、2023年4月1日に民法が改正され、この「越境枝」のルールが大きく変わった。 教えて!gooでも「境界から出て...
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列をEraseしてもメモリが開放...
-
c++によるジャンケンプログラム
-
プログラムが書けません。
-
市販のビンゴカードについて
-
銀行ATMの数字キーの配列
-
【エクセルVBA】Functionの引数...
-
mallocの確保要素数の限界は?
-
C言語 配列の長さの上限
-
関数ポインタについて
-
ポインタに ~0を入れること
-
C言語を使って、ファイルの読み...
-
トリプルポインタが必須!とな...
-
デバイスハンドルとは?
-
構造体を型の異なる構造体に代入
-
CStringからchar*への型変換に...
-
fopne で失敗する原因
-
「#undef」と「#define」の使い...
-
Accessで、メモリを開放するタ...
-
System.IO.Directory.GetFiles...
-
関数ポインタの利点
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
C# Listを使わずに2次元配列の...
-
配列を含む構造体の初期値について
-
先頭アドレスとは何ですか?
-
配列で格納したものをmsgboxで...
-
【速いブラインドタッチ】手を...
-
テキストファイルから文字列を...
-
ExcelVBAで質問です。離れた二...
-
配列をEraseしてもメモリが開放...
-
メモリの初期値
-
複数の選択範囲の行番号を個別...
-
unsigned char配列への入力の仕方
-
【C言語】配列の中に配列を入れ...
-
VBで構造体の配列を関数に渡す...
-
エラ-メッセ-ジの意味を教え...
-
C# 配列の変数宣言について。
-
C言語 配列の再初期化
-
LGノートPCグラムについて
-
C言語初心者 構造体 課題について
おすすめ情報
写真添付の為
写真の画像が荒いため、写真を取り直しました。2つになってすみません。
a1:c12の二次元配列と、f1:h12の二次元配列、この離れた2つ配列を、a17:f28の1つの二次元配列にしたいのですが、a17:c28の二次元配列になり、a17:f28になる為には、後3行3列足りません。