![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?08b1c8b)
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelVBAで、index、match関数を使用して、指定範囲に出力したい 3 2022/10/18 21:53
- Visual Basic(VBA) VBA横データを縦にしたいです 2 2023/08/08 19:38
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) 複数シートの複数列に入力されているデータを重複なしで抽出するVBAを作りたいです。 9 2022/06/17 10:33
- Excel(エクセル) Excelマクロ 同列内で複数の数式を繰り返す方法 5 2022/05/22 13:58
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) VBA 配列を使ったコードに直していただけますか 4 2023/05/06 15:18
- Visual Basic(VBA) excel VBA if文について 3 2022/03/27 17:42
このQ&Aを見た人はこんなQ&Aも見ています
-
これまでで一番「情けなかったとき」はいつですか?
これまでの人生で一番「情けない」と感じていたときはいつですか? そこからどう変化していきましたか?
-
何回やってもうまくいかないことは?
みなさんには、何回やってもうまくいかないことはありますか?
-
モテ期を経験した方いらっしゃいますか?
一生に一度はモテ期があるといいますが、みなさんどうですか? いまがそう! という方も、「思い返せばこの頃だったなぁ」という方も、よかったら教えて下さい。
-
テレビやラジオに出たことがある人、いますか?
テレビやラジオに取材されたり、ゲスト出演したことある方いますか?
-
集中するためにやっていること
家で仕事をしているのですが、布団をはじめ誘惑だらけでなかなか集中できません。
-
EXCEL VBA Dictionaryで複数の値を格納→離れた位置に出力する方法
Excel(エクセル)
-
cellsで特定の離れた範囲を選択する方法は?
Visual Basic(VBA)
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
-
4
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
5
VBAで離れたセルの値を一括で代入する方法について
Visual Basic(VBA)
-
6
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
7
VBAの配列サイズとメモリに関して
Visual Basic(VBA)
-
8
読み込みで一行おきに配列に格納
Visual Basic(VBA)
-
9
配列がとびとびである場合の書き方
Excel(エクセル)
-
10
エクセルVBA 配列からセルに「関数式」を一気代入したい
Visual Basic(VBA)
-
11
VBA public変数はどのようなことをしたら解放されますか?
Visual Basic(VBA)
-
12
表にフィルターをかけ、絞ったデータ(可視化セルのみ)を一次元配列として変数に入れるという動作を書きた
Visual Basic(VBA)
-
13
配列をループでたくさん宣言したいのですが、配列名や変数名を変数で宣言することはできませんか?
Visual Basic(VBA)
-
14
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
15
VBA 1次元配列を2次元に追加する
Visual Basic(VBA)
-
16
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
17
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
18
動的配列が存在(要素が有る)か否かを判定できますか?
Visual Basic(VBA)
-
19
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
20
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 配列の長さの上限
-
【C言語】配列の中に配列を入れ...
-
C# Listを使わずに2次元配列の...
-
【速いブラインドタッチ】手を...
-
ヘッダーファイルからの取り込...
-
9枚の写真がA4 1枚に印刷できま...
-
4勤2休のシフト作成
-
配列をEraseしてもメモリが開放...
-
銀行ATMの数字キーの配列
-
先頭アドレスとは何ですか?
-
CSVファイルのデータを2次元配...
-
C++ vectorに配列をプッシュしたい
-
配列の参照渡しで型が一致しま...
-
配列の重複削除について
-
配列を含む構造体の初期値について
-
市販のビンゴカードについて
-
c言語の配列の先頭アドレスが偶...
-
C言語初心者 ポインタについて...
-
複数の選択範囲の行番号を個別...
-
unsigned char の配列で途中で0...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
配列で格納したものをmsgboxで...
-
テキストファイルから文字列を...
-
C# 配列の変数宣言について。
-
C# Listを使わずに2次元配列の...
-
先頭アドレスとは何ですか?
-
C言語で特定列だけを抽出して配...
-
【速いブラインドタッチ】手を...
-
配列の参照渡しで型が一致しま...
-
unsigned char配列への入力の仕方
-
ExcelVBAで質問です。離れた二...
-
VBで構造体の配列を関数に渡す...
-
複数の選択範囲の行番号を個別...
-
C++ vectorに配列をプッシュしたい
-
【C言語】配列の中に配列を入れ...
-
配列をEraseしてもメモリが開放...
-
Excel、VBAのユーザーフォーム...
-
Redimした動的配列はEraseする...
-
VB.NET 構造体の配列の検索機能...
おすすめ情報
写真添付の為
写真の画像が荒いため、写真を取り直しました。2つになってすみません。
a1:c12の二次元配列と、f1:h12の二次元配列、この離れた2つ配列を、a17:f28の1つの二次元配列にしたいのですが、a17:c28の二次元配列になり、a17:f28になる為には、後3行3列足りません。