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

vlookupをfor構文でやりたいのですが、VBAが反応しません。

(エラーが出るわけでもなく、実行された結果なにも値が入らない)

dic2:複数列を"_"でつないでユニークを算出したdictinary
val5:上記dicを分解した結果

ttシートにすでに色々なユニークのNAMEが表としてあり、この中にdicのNAMEもあります。
目的はttシートのNAMEの横列に、val5から参照した誕生日を入れる事です。

'誕生日を入れる
key2 = dic2.keys
For i = 1 To UBound(key2)
val5 = Split(key2(i - 1), "_")
For j = 4 To tt.Columns(1).End(xlUp).Row
If val5(i, 1) = tt.Cells(j, 1) Then
If val5(i, 2) = tt.Cells(j, 5) Then
tt.Cells(j, 6).Value = val5(i, 3)
End If
End If
Next j
Next i

どこがダメなのか教えてください。

回答の条件
  • 1人10回まで
  • 13歳以上
  • 登録:2012/12/10 17:33:14
  • 終了:2012/12/15 11:55:03

ベストアンサー

匿名回答2号 No.3

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

一番真ん中の3行(IF~END)が飛ばされ、

ということは

val5(1) = tt.Cells(j, 5)

これが成り立たないのでしょう。「val5(1)」 、「 tt.Cells(j, 5)」それぞれがどんな値になってますか?思ったような値ですか?
匿名回答1号さん紹介のページの最後の方に下記のようにあります。

イミディエイトウィンドウで「?プロパティ」や「?変数名」と入力して Enter キーを押すとその内容が表示されます。

これを使って

?val5(1)
?tt.Cells(j, 5)

などと入れてやれば値が見れると思います。

他2件のコメントを見る
匿名質問者

1号さん、2号さん、アドバイスありがとうございます。
最後のtrimはまだ実施できていませんが、これからやってみようと思います。
とりあえず前に進むことができましたので、助かりました。

2012/12/15 11:54:44
匿名質問者

追記;
trimを使うことでうまく回り始めました!ありがとうございました!!

2012/12/17 16:25:42

その他の回答(2件)

匿名回答1号 No.1

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

すみません。何がやりたいのかは、説明とソースコードからは読み取れないのですが、エクセルのVBAであれば、マクロ実行をステップインで実行して、1行づつ想定の通りにデータがはいっているかを追ってみてはいかがでしょうか?

「ステップ実行 ~マクロを1行ずつ実行~」
http://hp.vector.co.jp/authors/VA016119/step/step01.html

匿名回答1号

匿名回答2号さんがおっしゃるとおり、ご自身で1行ずつ実行しながら、変数に想定のものが入っているかを追われると良いと思います。

2012/12/11 11:16:06
匿名質問者

質問者から

匿名質問者2012/12/10 19:07:31

VBAは反応しないという表現を訂正します。
VBAが滞りなく実行された結果、何も値が入らず終了しています。
だからデバック等の忠告も出ません。

匿名回答2号 No.2

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

ステップ実行出来ませんでしたか?
すぐに終了せず、1行づつ実行できるはずですが。

val5(i, 1)

これは記入ミスですか?
Splitの結果は1次元配列だと思いますが、どこからiが出てきました?
たぶんiはいらない。

ほかに気になるところ

  • iが1から始まってる。最後の要素は処理しなくていいの?
  • ifが重なってる。なんでまとめないの?

下のはどうでもいいけど、上のはバグな気がする。

匿名質問者

質問者から

匿名質問者2012/12/11 16:24:34

いろいろありがとうございます。

諸々検討し、下記のようにコードを修正しました。

'誕生日を入れる
key2 = dic2.keys
For i = 0 To UBound(key2)
val5 = Split(key2(i), "_")
For j = 4 To tt.Cells(Rows.Count, 1).End(xlUp).Row
If val5(0) = tt.Cells(j, 1) Then
If val5(1) = tt.Cells(j, 5) Then
tt.Cells(j, 6).Value = val5(2)
End If
End If
Next j
Next i

ステップ実行はしてみましたが、一番真ん中の3行(IF~END)が飛ばされ、
その状態でぐるぐる回っていることがわかりました。
変数はこちらの意図通り入っていることが確認できていますが、
真ん中が飛ばされているので一向にセルに何も値が入らないのではないかと思います。
でも、なぜ飛ばされるのかがわかりません。
自分でも考えてみますが、何かあれば教えてください。

匿名回答2号 No.3

匿名回答2号「匿名質問」を利用した質問に回答すると「匿名回答○号」と匿名で表示されます。
「匿名質問」では、ユーザー名を公開せずに匿名の質問ができます。
詳しくはこちら
2012/12/11 14:24:02ここでベストアンサー

一番真ん中の3行(IF~END)が飛ばされ、

ということは

val5(1) = tt.Cells(j, 5)

これが成り立たないのでしょう。「val5(1)」 、「 tt.Cells(j, 5)」それぞれがどんな値になってますか?思ったような値ですか?
匿名回答1号さん紹介のページの最後の方に下記のようにあります。

イミディエイトウィンドウで「?プロパティ」や「?変数名」と入力して Enter キーを押すとその内容が表示されます。

これを使って

?val5(1)
?tt.Cells(j, 5)

などと入れてやれば値が見れると思います。

他2件のコメントを見る
匿名質問者

1号さん、2号さん、アドバイスありがとうございます。
最後のtrimはまだ実施できていませんが、これからやってみようと思います。
とりあえず前に進むことができましたので、助かりました。

2012/12/15 11:54:44
匿名質問者

追記;
trimを使うことでうまく回り始めました!ありがとうございました!!

2012/12/17 16:25:42

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

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

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

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

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