人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

excelVBAのdictionary(目的はクロス集計)について

Sub クロス集計()
Dim dic As Object, myKey, myItem
Dim Val, Val2, Val3
Dim i As Long, j As Long
Dim dt As Worksheet

Set dic = CreateObject("Scripting.Dictionary")
Set dt = Worksheets("2004?")

Val = dt.Range("B1", ActiveCell.SpecialCells(xlLastCell)).Value

'dictionaryを作成する

For i = 4 To UBound(Val, 1)
For j = 3 To UBound(Val, 2)
Val2 = Val(i, 1) & Val(1, j)
If Not Val2 = "_*" Then
If Not dic.exists(Val2) Then
dic.Add Val2, Val(i, j)
Else
★ dic.Item(Val2) = dic.Item(Val2) + Val(i, j).Value
End If
End If
Next j
Next i
End Sub

★印の箇所でerrorが出ます→「オブジェクトが必要です」
理由と修正について教えてください。VBA初心者です。


●質問者: 匿名質問者
●カテゴリ:コンピュータ 学習・教育
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● 匿名回答1号

エラー行末尾の".Value"を除けば良いのでは?


匿名質問者さんのコメント
そうすると、error「型が一致しません」となるのです…

匿名回答1号さんのコメント
ウォッチ式に「i, j, Val(i, j)」を追加してみて Val(i, j)に自分の想定外の値が代入されていないか 確認してみて下さい。

匿名質問者さんのコメント
よく考えると… i,jの幅がそもそも揃っていないので、アプローチ方法そのものを見直そうと思います。 ありがとうございます。

2 ● 匿名回答2号

変数名
Dim Val, Val2, Val3

Valだと、同名関数と優先順位が不明なので(変数のほうが優先だったらごめんなさい)
変数名をvalから変えてみては?

http://officetanaka.net/excel/vba/function/Val.htm

なんとなく、関数の引数が違うとエラーが出ているような気がしたので。

解決の糸口となれば幸いです。


匿名回答2号さんのコメント
あっごめんなさい For j = 3 To UBound(Val, 2) Val2 = Val(i, 1) & Val(1, j) とか エラーじゃないので、外していたかも知れません...

匿名質問者さんのコメント
ありがとうございます。 今回は、やり方そのものを見直して、再チャレンジしてみます。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ