先日こちらで、Dictionaryを使用して別シートの離れた位置に値を転記する方法を教えていただいたのですが、さらに条件式を組み合わせる場合にはどのようにしたらよいか、お尋ねしたく投稿させていただきます。
現在は、prefShのB列をキーにしてA列、E列、T列をアイテムとして格納し、workShのA列、U列、C列にそれぞれ出力するプログラムになっております。(下記に記載)
これを、prefShのB列に対応する行(520行分)全て引っ張ってくるのではなく、
workShのB列に元々入っている値(512行分)を条件に、prefShのB列の範囲で検索してもし該当があれば、同じ行のA列、E列、T列を引っ張ってくる形に変更したいです。
(もともと、Findメソッドを使ってエラーが出たので、Dictionaryにしたという経緯があります)
大変恐れ入りますが、ご教示頂けますようお願い致します。
ーーー
Dim myDic As Object
Set myDic = CreateObject("Scripting.Dictionary")
Dim i As Long
With prefSh
For i = 2 To .Cells(.Rows.Count, 2).End(xlUp).Row
If Not myDic.Exists(.Cells(i, 2).Value) Then
myDic.Add .Cells(i, 2).Value, Array(.Cells(i, "A").Value, .Cells(i, "E").Value, .Cells(i, "T").Value)
End If
Next i
End With
Dim vKey As Variant
With workSh
i = 3
For Each vKey In myDic
.Cells(i, 2).Value = vKey
.Cells(i, "A").Value = myDic(vKey)(0)
.Cells(i, "U").Value = myDic(vKey)(1)
.Cells(i, "C").Value = myDic(vKey)(2)
i = i + 1
Next
End With
Set myDic = Nothing
'発見できなかった場合はNothingとなる
wb.Save ' 上書き保存
No.2ベストアンサー
- 回答日時:
以下のようにしてください。
------------------------------------
Dim myDic As Object
Set myDic = CreateObject("Scripting.Dictionary")
Dim i As Long
With prefSh
For i = 2 To .Cells(.Rows.Count, 2).End(xlUp).Row
If Not myDic.exists(.Cells(i, 2).Value) Then
myDic.Add .Cells(i, 2).Value, Array(.Cells(i, "A").Value, .Cells(i, "E").Value, .Cells(i, "T").Value)
End If
Next i
End With
Dim vKey As Variant
With workSh
For i = 3 To .Cells(.Rows.Count, 2).End(xlUp).Row
vKey = .Cells(i, 2).Value
If myDic.exists(vKey) Then
.Cells(i, "A").Value = myDic(vKey)(0)
.Cells(i, "U").Value = myDic(vKey)(1)
.Cells(i, "C").Value = myDic(vKey)(2)
End If
Next
End With
Set myDic = Nothing
'発見できなかった場合はNothingとなる
wb.Save ' 上書き保存
教えていただいた内容で、解決できました!
vKey = .Cells(i, 2).Value
If myDic.exists(vKey) Then
このようにすれば良いのですね。
大変助かりました!ありがとうございました。
No.1
- 回答日時:
こんにちは
ご自身で条件式は、コードに出来ますでしょうか?
出来ると思いますので参考程度で
myDic.Add .Cells(i, 2).Value, Array(.Cells(i, "A").Value, .Cells(i, "E").Value, .Cells(i, "T").Value)を変更したいと言う事だと思いますが、
myDic.Add 処理の前で 論理式の解を変数に入れて、
配列に入れている各値をその変数に変えれば良いと思います。
If ~.Cells(i, "A")>0 Then
変数1=.Cells(i, "A").Value
・
Else
変数1=~
・
myDic.Add .Cells(i, 2).Value, Array(変数1, 変数2,変数3)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
- Visual Basic(VBA) VBAで、シート間の転記するコードをFOR~NEXTで教えてください。 9 2023/04/30 20:04
- Visual Basic(VBA) エクセルVBAで教えて頂きたいのですが? 2 2022/12/31 20:28
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) エラーコード1004 6 2022/06/09 14:12
- Visual Basic(VBA) A列B列C列 3 2023/04/26 18:11
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
エクセル(勝手に太字になる)
-
エクセル 文字数 多い順 並...
-
Excelで半角の文字を含むセルを...
-
エクセルの項目軸を左寄せにしたい
-
エクセルで最初のスペースまで...
-
VBAで文字列を数値に変換したい
-
お店に入るために行列に並んで...
-
エクセルで文字が混じった数字...
-
【Excel】別シートから条件に合...
-
エクセルの表から正の数、負の...
-
「B列が日曜の場合」C列に/...
-
【ACCESS/必須条件とOR条件を組...
-
【excelVBA】Findメソッドで検...
-
VBAでセル入力の数式に変数を用...
-
Excel関数(通常はA列優先で、...
-
A列がない・・・A列が非表示に...
-
エクセルで一行毎、一枚づつ自...
-
文字列に数字を含むセルを調べたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
エクセルで最初のスペースまで...
-
2つのエクセルのデータを同じよ...
-
エクセル 文字数 多い順 並...
-
VBAで文字列を数値に変換したい
-
エクセル(勝手に太字になる)
-
エクセルで文字が混じった数字...
-
「B列が日曜の場合」C列に/...
-
エクセルの表から正の数、負の...
-
Excelで半角の文字を含むセルを...
-
エクセル 同じ値を探して隣の...
-
Excel、市から登録している住所...
-
エクセルの項目軸を左寄せにしたい
-
EXCELで 一桁の数値を二桁に
-
VBA 連続行データを5行ずつ隣の...
-
エクセル 時間帯の重複の有無
-
エクセルで、列の空欄に隣の列...
-
オートフィルターをかけ、#N/A...
-
A列がない・・・A列が非表示に...
おすすめ情報