Scripting Dictionary でvba 作成
同じデータの違うデータの参照はできますが、
違うファイルのデータを参照するにはどうしたら
いいのでしょぅか。
下記のコードは一部抜粋したものです。
恐らく上のあたりで違うデータの参照するとおもいますが、
わかる方いますでしょぅか
Dim myDic As Object, myKey, myItem
Dim myVal, myVal2, myVal3
Dim i As Long, j As Long
Dim sh1 As Worksheet
Set myDic = CreateObject("Scripting.Dictionary")
Set sh1 = Worksheets("Sheet1") ←--------------------この辺りをなおすとおもいますがわかりません
' ---元データを配列に格納
myVal = sh1.Range("B3:D10").Value
' ---myDicへデータを格納
For i = 1 To UBound(myVal, 1)
myVal2 = myVal(i, 1) & "_" & myVal(i, 2)
If Not myVal2 = "_" Then
If Not myDic.exists(myVal2) Then
myDic.Add myVal2, myVal(i, 3)
Else
myDic(myVal2) = myDic(myVal2) + myVal(i, 3)
End If
No.4ベストアンサー
- 回答日時:
横からですが、補足の部分に対してだけ。
>これでうまくいきましたがwb.close をつけるとエラーになります
そりゃそうでしょう
>Set wb = Nothing
>Set ws = Nothing
>wb.Close
Nothingを代入(=ブックオブジェクトは放棄)しといてから、closeメソッドを呼ぼうとしても、変数wbはすでにブックとは無関係になっているので、当然ながらエラーになります。
クローズしたければ、先に行うべき。
No.3
- 回答日時:
No.2の補足に対して。
だって
Set wb = Nothing ← これ何しています?ここで変数はBookの事について解放されちゃってます。よって以降は知らん顔ですよ。
Set ws = Nothing
wb.Close
なので
wb.Close
Set wb = Nothing
Set ws = Nothing
この順番ではないでしょうか。
No.1
- 回答日時:
こんにちは
質問内容をよくわかってませんが、他ブックの内容をDictionary的に参照したいってことでしょうか?
対象のブックを開いて、データのあるシートから同じように抽出すれば良いだけです。
ご提示の例で言うなら、
変数sh1に 対象ブック.Worksheets("Sheet1")を代入するようにすれば、データを一括でmyValに取得しているので、その後はmyValを参照するようになっていると想像しますので(ご提示以外の部分は不明ですが)そのままですむものと思います。
とはいえ、もしも、ご質問のような利用頻度が高いのであるなら、毎回ご提示のような処理をしているのでは効率が悪いものと想像します。
2つのセルの値を合体したものをkeyにしていますが、例えば、シート内のどこかに作業列でkeyを計算(文字連結)させておけば良いですし、重複があるならそれも簡単に省けますので、作業列としてDictionary同様のkey:valueを作成しておくようにすれば、わざわざDictinaryを介さなくとも、LookUp等で直接参照できるようになります。
作業列が見えるのが嫌であれば、列を非表示しておくか、別シートに集計するようにして、そのシートそのものを非表示にしておけば済むことでしょう。
このような仕組みにしておけば、VBAから参照するにしても直接参照可能になりますし、処理の内容によってはVBAなどを用いずとも、シート内に関数式を設定しておけば事足りるような気もします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) Sub 分けてソートして貼り付ける() Dim srcSheet As Worksheet Dim 6 2023/08/04 19:57
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) VBAが止まります。 1 2022/09/02 14:51
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
エクセルVBAが途中で止まります
-
(マクロ)データをAブックからB...
-
別ブックをダイアログボックス...
-
vbaでvbaProjectのパスワード解...
-
ワイルドカード「*」を使うとう...
-
【Excel VBA】書き込み先ブック...
-
VBA 複数のエクセルから一つの...
-
VBA シート名が一致した場合の...
-
VBA 実行時エラー 2147024893
-
vbaで他のブックに転記したい。...
-
VBA 別ブックからコピペしたい...
-
教えて下さい!VBAで複数Excel...
-
フォルダ内の全てのファイルに...
-
【ExcelVBA】インデックスが有...
-
VBAで別のブックにシートをコピ...
-
VBAで複数のブックを開かずに処...
-
【VBA】全シートの計算式を全て...
-
VBA コードを実行すると画面が...
-
VBAで別ブックのシートを指定し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
エクセルVBAが途中で止まります
-
別ブックをダイアログボックス...
-
ワイルドカード「*」を使うとう...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
VBS Bookを閉じるコード
-
【ExcelVBA】インデックスが有...
-
VBA コードを実行すると画面が...
-
【ExcelVBA】zip圧縮されたCSV...
-
vbaでvbaProjectのパスワード解...
-
VBAで別ブックのシートを指定し...
-
ExcelのVBAです。フォルダ内の...
-
vbaで他のブックに転記したい。...
-
フォルダ内の全てのファイルに...
-
VBAで複数のブックを開かずに処...
-
VBSでExcelのオープン確認
-
VBA 実行時エラー 2147024893
-
【Excel VBA】書き込み先ブック...
-
VBA シート名が一致した場合の...
おすすめ情報
Dim var As Variant
var = Workbook("ACTION SCRIPTING").Worksheets("売上")._
Cells(1, 1).CurrentRegion.Value
Worksheets(2).Cells(1, 1).Resize(UBound(var, 1), UBound(var, 2)).Value = var
うまくいきません
var = Workbook("ACTION SCRIPTING").Worksheets("売上")
なんとかおしえてくれませんでしょぅか
先ほどとは違うコードですがお願いいたします。
Sub j()
p = "C:\Scripting.Dictionary_1\"
fn = "ACTION SCRIPTING.xls"
Set wb = Workbooks.Open(p & fn)
Set ws = wb.Worksheets("売上")
v = ws.Cells(1, 1).CurrentRegion.Value
Var = Worksheets(1).Cells(1, 1).CurrentRegion.Value
ThisWorkbook.Worksheets(2).Cells(1, 1).Resize(UBound(Var, 1), UBound(Var, 2)).Value = Var
Set wb = Nothing
Set ws = Nothing
wb.Close
End Sub
これでうまくいきましたがwb.close をつけるとエラーになります