dポイントプレゼントキャンペーン実施中!

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

A 回答 (4件)

> ”型番”というセルから下方向に型番をセットしていき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の表を確かめてみてください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/06/20 10:15

> "="にすると書き換えられてしまうのですか??



??? 当然です。そのための"="です。

> 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)

と書いたら、検索したセルに値が書き込まれます。

なぜ、同じ変数を使っているのでしょうか?
普通は、別に変数を用意するものです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/06/20 14:08

記述に不具合は無さそうです。



型番のデータ型が異なっているか又は空白等の可視出来ない文字が入力されているのかも知れません。

一度、データをチェックされることはお勧めします。
    • good
    • 1
この回答へのお礼

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

お礼日時:2008/06/19 13:55

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

この回答への補足

マクロはこの様になっています。
”型番”というセルから下方向に型番をセットしていき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

補足日時:2008/06/19 11:30
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!