
いつもお世話になっております。
連想配列の質問ですが、
下記のように書き出したいのですが、
おしえてくれませんでしょうか
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

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ランキング
-
INPUTデータを分割したい!
-
【エクセル】改行無しテキスト...
-
C言語で特定の行を抽出する方法...
-
Arduino Excel
-
VBAでタブ区切りテキストの保存...
-
ExcelをCSV書き出す場合のシー...
-
MATLAB グローバル変数の宣言
-
エクセルVBA コードが同じでも...
-
awkスクリプトでダブルクォーテ...
-
Perlで特定行から特定行までを...
-
Windowsで複数のファイルを同じ...
-
Perlの変数に文字数制限(容量...
-
fgets で値が取得できない
-
ファイル全てを .xlsm に変更し...
-
Perl-CGI で排他制御はどうすれ...
-
ディレクトリー内のリスト出力...
-
ファイルの結合
-
VBA テキストファイルを読み取...
-
絶対+相対アドレスから絶対ア...
-
2つのCSVファイルをマッチング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチファイルの作り方(CSV→...
-
C言語で特定の行を抽出する方法...
-
空白文字 \\f と\\v の違いに...
-
全角と半角文字が混在している...
-
Edge スクレイピング
-
【Access2003】VBAでタブ区切り...
-
【エクセル】改行無しテキスト...
-
VBAでタブ区切りテキストの保存...
-
\\tはどんなときに使うのでしょ...
-
タブコントロールに付いて
-
Javaのコーディングスタイル
-
エクセルのデータをテキストデ...
-
タブの色を変更する方法
-
デルファイ TabControl タブの...
-
エクセル→XML 要素のコピー
-
掲示板の過去ログDLについて
-
Access2007のADOの使い方が分か...
-
AccessからExcelをタブ指定で開...
-
Excelのマクロで改行を含んだテ...
-
テキストファイル(tsv)を改行...
おすすめ情報
いつもお世話になっております。
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)
格納して 一気に吐き出す 速さがおちるということですか