
先日こちらで、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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PowerPointで表の1つの列だけ...
-
エクセルで二つの数字の小さい...
-
【画像あり】【関数】指定した...
-
「B列が日曜の場合」C列に/...
-
Excelで半角の文字を含むセルを...
-
EXCELで 一桁の数値を二桁に
-
エクセル(勝手に太字になる)
-
2つのエクセルのデータを同じよ...
-
エクセルで最初のスペースまで...
-
オートフィルターをかけ、#N/A...
-
Excelのグループ化、右か左の選...
-
エクセルの並び変えで、空白セ...
-
妊娠祝い もらったことある
-
Excelで一番右の列に入力された...
-
エクセルの列を範囲選択しての...
-
エクセル 同じ値を探して隣の...
-
エクセルで一列おきに空白列を...
-
エクセルのセル内の文字の一部...
-
Excel 文字列を結合するときに...
-
オートフィルターの絞込みをし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
2つのエクセルのデータを同じよ...
-
Excelで半角の文字を含むセルを...
-
エクセルで最初のスペースまで...
-
「B列が日曜の場合」C列に/...
-
EXCELで 一桁の数値を二桁に
-
エクセルで文字が混じった数字...
-
エクセル(勝手に太字になる)
-
オートフィルターをかけ、#N/A...
-
エクセル 文字数 多い順 並...
-
Excel、市から登録している住所...
-
エクセルのセル内の文字の一部...
-
【画像あり】【関数】指定した...
-
エクセルの項目軸を左寄せにしたい
-
エクセルの並び変えで、空白セ...
-
妊娠祝い もらったことある
-
エクセル 同じ値を探して隣の...
-
エクセルの表から正の数、負の...
-
Excel 文字列を結合するときに...
おすすめ情報