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も見ています
-
10代と話して驚いたこと
先日10代の知り合いと話した際、フロッピーディスクの実物を見たことがない、と言われて驚きました。今後もこういうことが増えてくるのかと思うと不思議な気持ちです。
-
家・車以外で、人生で一番奮発した買い物
どんなものにお金をかけるかは人それぞれの価値観ですが、 誰もが一度は清水の舞台から飛び降りる覚悟で、ちょっと贅沢な買い物をしたことがあるはず。
-
忘れられない激○○料理
これまでに食べたもののなかで、もっとも「激○○」だった料理を教えて下さい。 激辛、でも激甘でも。 激ウマ、でも激マズでも。
-
牛、豚、鶏、どれか一つ食べられなくなるとしたら?
牛肉、豚肉、鶏肉のうち、どれか一種類をこの先一生食べられなくなるとしたらどれを我慢しますか?
-
うちのカレーにはこれが入ってる!って食材ありますか?
カレーって同じルーから作っても、家庭によって入っているものや味が微妙に違っていて面白いですよね! 「我が家のカレーにはこれが入ってるよ!」 という食材や調味料はありますか?
-
VBAで離れたセルの値を一括で代入する方法について
Visual Basic(VBA)
-
EXCEL VBA Dictionaryで複数の値を格納→離れた位置に出力する方法
Excel(エクセル)
-
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
-
4
cellsで特定の離れた範囲を選択する方法は?
Visual Basic(VBA)
-
5
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
6
読み込みで一行おきに配列に格納
Visual Basic(VBA)
-
7
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
8
VBAで、離れた複数の列に対して処理を施すには?
Visual Basic(VBA)
-
9
配列がとびとびである場合の書き方
Excel(エクセル)
-
10
VBAでの Replace関数で、ワイルドカードは使えないのでしょうか?
Visual Basic(VBA)
-
11
表にフィルターをかけ、絞ったデータ(可視化セルのみ)を一次元配列として変数に入れるという動作を書きた
Visual Basic(VBA)
-
12
VBAでユーザーフォームの表示を確認
Visual Basic(VBA)
-
13
VBAの配列サイズとメモリに関して
Visual Basic(VBA)
-
14
エクセルVBA Unionはなぜ遅い?
Visual Basic(VBA)
-
15
VBA 1次元配列を2次元に追加する
Visual Basic(VBA)
-
16
VBA public変数はどのようなことをしたら解放されますか?
Visual Basic(VBA)
-
17
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
18
【Excel VBA】マクロでExcel自体を終了させたい
Excel(エクセル)
-
19
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
20
エクセル イベントマクロ Changeイベントを複数作りたい
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
unsigned char配列への入力の仕方
-
メモリの初期値
-
複数の選択範囲の行番号を個別...
-
配列で格納したものをmsgboxで...
-
C# 配列の変数宣言について。
-
C言語で特定列だけを抽出して配...
-
テキストファイルから文字列を...
-
配列を含む構造体の初期値について
-
C言語初心者 ポインタについて...
-
C++ vectorに配列をプッシュしたい
-
C言語初心者 構造体 課題について
-
#N/Aを含む列の最小値の求め方
-
C言語 変換指定%sについてです。
-
std::listの代入について
-
Excel、VBAのユーザーフォーム...
-
VBでC言語のポインタみたい...
-
先頭アドレスとは何ですか?
-
関数の引数に括弧を使う理由
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
先頭アドレスとは何ですか?
-
C# 配列の変数宣言について。
-
配列で格納したものをmsgboxで...
-
C# Listを使わずに2次元配列の...
-
VBで構造体の配列を関数に渡す...
-
テキストファイルから文字列を...
-
C言語で特定列だけを抽出して配...
-
Excel、VBAのユーザーフォーム...
-
【C言語】配列の中に配列を入れ...
-
配列を含む構造体の初期値について
-
unsigned char配列への入力の仕方
-
複数の選択範囲の行番号を個別...
-
【速いブラインドタッチ】手を...
-
配列の参照渡しで型が一致しま...
-
ExcelVBAで質問です。離れた二...
-
VB.NET 構造体の配列の検索機能...
-
VBでC言語のポインタみたい...
-
Redimした動的配列はEraseする...
おすすめ情報
写真添付の為
写真の画像が荒いため、写真を取り直しました。2つになってすみません。
a1:c12の二次元配列と、f1:h12の二次元配列、この離れた2つ配列を、a17:f28の1つの二次元配列にしたいのですが、a17:c28の二次元配列になり、a17:f28になる為には、後3行3列足りません。