• ベストアンサー

エクセルマクロ findメソッドがうまくいきません

エクセルマクロのfindメソッドで同じ条件が続く場合だけうまくいきません。 例えば、商品名を対象として値段を検索して入力するマクロで チョコレート   150 チョコレート ポテトチップス  110 ポッキー     100 ポッキー といった具合で一番目の商品名は正常に値段を出してくるのですが、 2番目になると空白になってしまいます。 どうなっているのでしょうか??教えて下さい!

質問者が選んだベストアンサー

  • ベストアンサー
  • higekuman
  • ベストアンサー率19% (195/979)
回答No.3

> ”型番”というセルから下方向に型番をセットしていきwpの表から単価を検出するものです。 > 2度目の同じ型番の時、yen1がnothingになっていました。 > 1度目は検出出来たのに何故でしょう? 1度目に検出した後に、検出したセルの内容を書き換えているから。 > Set yen1 = ActiveSheet.Cells.Find(What:=kata, lookat:=xlWhole) > If Not yen1 Is Nothing Then > yen1 = Cells(yen1.Row, 5) '←ここで書き換えている 実際にwpの表を確かめてみてください。

noname#113614
質問者

お礼

ご回答ありがとうございます。 wpの表、確かめました。 本当に!書き換えてありました! "="にすると書き換えられてしまうのですか?? 書き換えずに代入する方法はありませんか? 初歩的な事かもしれませんが、教えて頂けると助かります。

その他の回答 (3)

  • higekuman
  • ベストアンサー率19% (195/979)
回答No.4

> "="にすると書き換えられてしまうのですか?? ??? 当然です。そのための"="です。 > Set yen1 = ActiveSheet.Cells.Find(What:=kata, lookat:=xlWhole) としているのですから、yen1はオブジェクト変数で、この場合はセル扱いです。 Cells(1, 1)とかRange("A1")とかと同じ扱いです。 実際には、検索でヒットしたセルですが。 Cells(1, 1) = Cells(yen1.Row, 5) と書いたら、A1に値が書き込まれるように、 yen1 = Cells(yen1.Row, 5) と書いたら、検索したセルに値が書き込まれます。 なぜ、同じ変数を使っているのでしょうか? 普通は、別に変数を用意するものです。

noname#113614
質問者

お礼

ActiveSheet.Cells.Find(What:=kata, lookat:=xlWhole)= Cells(yen1.Row, 5) になってしまうということなんですね。 >なぜ、同じ変数を使っているのでしょうか? 代入していけば値だけ入れ替わって使えると思っていたものですから。 変数を替えてチャレンジしてみます。 ありがとうございました。

  • keirika
  • ベストアンサー率42% (279/658)
回答No.2

記述に不具合は無さそうです。 型番のデータ型が異なっているか又は空白等の可視出来ない文字が入力されているのかも知れません。 一度、データをチェックされることはお勧めします。

noname#113614
質問者

お礼

ご回答ありがとうございます。 私も型番が違うのではと何度も確かめ、何パターンも試してみたのですが、1度検索したことのある型番の価格は入力されません。 set kata=nothingなどとして履歴?を忘れてもらおうと思ったのですが、ダメでした。。。

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.1

現状のコードをアップしてみてください。

noname#113614
質問者

補足

マクロはこの様になっています。 ”型番”というセルから下方向に型番をセットしていきwpの表から単価を検出するものです。 2度目の同じ型番の時、yen1がnothingになっていました。 1度目は検出出来たのに何故でしょう? For w = 1 To m kata = kataban.Offset(w, 0).Value If kata = "" Then GoTo Forend '単価の検索 Windows(wp).Activate Set yen1 = ActiveSheet.Cells.Find(What:=kata, lookat:=xlWhole) If Not yen1 Is Nothing Then yen1 = Cells(yen1.Row, 5) Set yen2 = ActiveSheet.Cells.Find(What:=kata, lookat:=xlWhole) If Not yen2 Is Nothing Then yen2 = Cells(yen2.Row, 7) End If End If '単価の入力 Windows(wb).Activate If Not yen1 Is Nothing Then tanka1.Offset(w, 0) = yen1 If Not yen2 Is Nothing Then tanka2.Offset(w, 0) = yen2 End If End If Forend: Next w

関連するQ&A