![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
いつもお世話になっております。
連想配列の質問ですが、
下記のように書き出したいのですが、
おしえてくれませんでしょうか
ReDim Preserve Vz(1 To UBound(Vz), 1 To 2)
に格納したものを
Cells(i, "i") = Vz(iB, 1)
Cells(i, "J") = Vz(iB, 2)
ように書きだしたいのです。
おしえてくれませんでしょうか
Sub fa()
Dim Dic As Object
Dim Vz As Variant, Vk
Dim iA As Long, iB As Long
Set Dic = CreateObject("Scripting.Dictionary")
With Range("B2").CurrentRegion
Vk = .Value
End With
For iA = UBound(Vk) To 3 Step -1
If (Vk(iA, 1)) <> "" Then _
Dic(Vk(iA, 1)) = iA
Next
With ActiveSheet
With .Range("H2", .Cells(Rows.Count, "H").End(xlUp))
Vz = .Value
ReDim Preserve Vz(1 To UBound(Vz), 1 To 2)
For iB = 2 To UBound(Vz)
iA = Dic(Vz(iB, 1))
If (iA = 0) Then
Vz(iB, 1) = ""
Else
Vz(iB, 1) = Vk(iA, 2)
Vz(iB, 2) = Vk(iA, 3)
End If
Cells(i, "i") = Vz(iB, 1)
Cells(i, "J") = Vz(iB, 2)
Next
End With
End With
End Sub
![「連想配列について」の質問画像](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/b/543034290_61b9c5e7204ba/M.png)
No.1ベストアンサー
- 回答日時:
連想配列ではなく2次元配列のように思いますけど、配列のインデックス№はシートの行番号とは一致しませんよ。
⇒1行目に項目行があってその項目名を取得するなら別ですけど。
UBound と共に LBound も知っておくと良いかも。
【VBA入門】UBound、LBound関数で配列の要素数を取得
https://www.sejuku.net/blog/29317
あとは配列変数:Vz は最後に Resize を用いて一括出力しないと使用している意味が薄まるかなと。
いつもお世話になっております
変更前
For iB =1 To UBound(Vz)
変更後
For iB = LBound(Vz) To UBound(Vz)
うまくいきました。
ありがとうございました。
ReDim Preserve Vz(1 To UBound(Vz), 1 To 2)
For iB = LBound(Vz) To UBound(Vz)
iA = Dic(Vz(iB, 1))
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) このマクロの説明文を教えてほしいです。 1 2023/01/12 09:17
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたい 6 2023/01/23 12:00
- Visual Basic(VBA) 【VBA】特定のワードが入っている行全体を塗りつぶしたい 4 2022/04/20 15:22
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) ExcelVBAで、index、match関数を使用して、指定範囲に出力したい 3 2022/10/18 21:53
- Visual Basic(VBA) 抽出結果を別シートに貼り付ける 2 2022/07/09 22:59
- Visual Basic(VBA) VBA 請求書自動作成 3 2022/04/24 01:58
- Visual Basic(VBA) A列B列C列 3 2023/04/26 18:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチファイルの作り方(CSV→...
-
Edge スクレイピング
-
空白文字 \\f と\\v の違いに...
-
テキストファイル(tsv)を改行...
-
htaccessで特定のディレクトリ...
-
ExcelをCSV書き出す場合のシー...
-
VBAでCSVファイルを途中行まで...
-
ReadLineでの読み出し行を指定する
-
batファイルでrenameができませ...
-
window.open でのファイル指定方法
-
openした後、closeしないでプロ...
-
Windowsで複数のファイルを同じ...
-
巨大なテキストの最終行を取得...
-
microsoft multimedia control ...
-
perlで複数行のデータを自由に...
-
sprintfについて
-
JavaでCSVファイルを高速に読む...
-
「パスが見つかりません」とい...
-
fopenでディレクトリ内の全ファ...
-
ListBoxのデータを高速でファイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチファイルの作り方(CSV→...
-
C言語で特定の行を抽出する方法...
-
タブの色を変更する方法
-
htaccessで特定のディレクトリ...
-
Edge スクレイピング
-
【エクセル】改行無しテキスト...
-
全角と半角文字が混在している...
-
csv出力
-
空白文字 \\f と\\v の違いに...
-
デルファイ TabControl タブの...
-
VBAでタブ区切りテキストの保存...
-
VB6でのデータの編集(ファイル...
-
Access2007のADOの使い方が分か...
-
VBAのFileFormatで悩んでいるこ...
-
サーブレットで出力したHTMLの...
-
エクセルのデータをテキストデ...
-
タブコントロールに付いて
-
掲示板の過去ログDLについて
-
ファイルへデータ登録2
-
txtをエクセルなどに貼り付けて...
おすすめ情報
いつもお世話になっております。
For i = LBound(Vz) To UBound(Vz)
Cells(i + 1, "i") = Vz(i, 1)
Cells(i + 1, "J") = Vz(i, 2)
Next
でやりましたが、
4だけ 4と表示されます。
4 4
5 沼田 梨恵子 女
6 本多 八洲子 女
7 石井 芙美子 女
8 亀井 水泉 男
9 白井 真樹 女
10 柏木 悠里 女
11 村松 利人 男
Vz は最後に Resize を用いて一括出力しないと使用している意味が薄まるかなと。
なんとなくですが、
ReDim Preserve Vz(1 To UBound(Vz), 1 To 2)
格納して 一気に吐き出す 速さがおちるということですか