匿名質問者
匿名質問者匿名質問者とは「匿名質問」を利用して質問した質問者。
「匿名質問」では、ユーザー名を公開せずに匿名の質問ができます。
詳しくはこちら

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初心者です。

回答の条件
  • 1人20回まで
  • 13歳以上
  • 登録:2012/08/31 15:32:59
  • 終了:2012/09/07 15:35:03

回答(2件)

匿名回答1号 No.1

匿名回答1号「匿名質問」を利用した質問に回答すると「匿名回答○号」と匿名で表示されます。
「匿名質問」では、ユーザー名を公開せずに匿名の質問ができます。
詳しくはこちら
2012/08/31 18:50:02

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

他1件のコメントを見る
匿名回答1号

ウォッチ式に「i, j, Val(i, j)」を追加してみて
Val(i, j)に自分の想定外の値が代入されていないか
確認してみて下さい。

2012/08/31 19:09:24
匿名質問者

よく考えると…
i,jの幅がそもそも揃っていないので、アプローチ方法そのものを見直そうと思います。
ありがとうございます。

2012/09/03 16:31:16
匿名回答2号 No.2

匿名回答2号「匿名質問」を利用した質問に回答すると「匿名回答○号」と匿名で表示されます。
「匿名質問」では、ユーザー名を公開せずに匿名の質問ができます。
詳しくはこちら
2012/09/01 14:52:10

変数名
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)
とか
エラーじゃないので、外していたかも知れません...

2012/09/01 14:53:43
匿名質問者

ありがとうございます。
今回は、やり方そのものを見直して、再チャレンジしてみます。

2012/09/03 16:32:17

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません