• ベストアンサー

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

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

noname#113614
noname#113614

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

  • ベストアンサー
  • 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

  • エクセルVBAのFindメソッドを使って・・・

    こんばんは。エクセルのVBAで教えてください。 I列で「数量」という文字を見つけて、 その(I列の)右隣(J列)の値をB2以降に、 その2つ左(G列)のレートをC2以降に、 その3つ左(F列)の、2つ上の商品名をA2以降に 順に書き出していくようにしたいのですがどのようにコードを 書けばいいでしょうか? Findメソッドを使ってできそうだと考えたのですが、その先が さっぱりわかりませんが、なんとか形にしたいので質問させていただ きます。よろしくお願いします。

  • excel 2003 マクロですっきりさせたい

    お世話になります。 ユーザーフォーム上の テキストボックス 商品名_1の値が空白になったら ラベルも空白にするというマクロを組みました。 ラベルがたくさんあり、何かすっきりとできる方法があれば 教えてください!>< よろしくお願いします。 Private Sub 商品名_1_Change() If 商品名_1.Value = "" Then Label1_1.Caption = "" Label1_2.Caption = "" Label1_3.Caption = "" Label1_4.Caption = "" Label1_5.Caption = "" Label1_6.Caption = "" Label1_7.Caption = "" End If End Sub

  • エクセル マクロ VBA

    エクセルのマクロについて質問です。 『集計』というブックの『集計開始』というシートに     A列    B列     C列 1行目 見出し  見出し   見出し      (商品名)  (支店)  (個数)         2行目 コメント  空白     空白   3行目 空白   空白     空白 4行目 商品名  支店     個数  5行目 空白   空白     空白 6行目 空白   空白   コメント1 7行目 空白   空白     空白 8行目 空白   空白   コメント2 9行目以降    上記のデータ(見出しを除く)の繰り返し というデータが入っています。 B列の中に『AAA』という文字が含まれていたら、そのセルを空白に置換し、 含まれていなかったら、そこで処理がとまったりエラーが出たりしないで次のステッップへ進み、 C列の中に『B』という文字が含まれていたら、そのセルを空白に置換し、 含まれていなかったら、そこで処理がとまったりエラーが出たりしないで次のステッップへ進み、 (今は、手作業で編集→置換→検索する文字列の中に『B*』と入力し、 置換後の文字列を空白にしてすべて置換ということをやっています。)                            ABC列(データーの入っている行まで)の空白を含む行を一括削除し、 以下のような形にしたいのです。     A列    B列     C列 1行目 見出し  見出し   見出し      (商品名)  (支店)  (個数)         2行目 商品名  支店     個数  3行目 商品名  支店     個数          ・         ・ このようにするマクロ文はどのようになりますでしょうか?

  • Excel VBA Find関数の使い方

    下記のようなマクロを作りたいと思います。 <シート名:元データ> B列(商品番号)がA列(ファイル名)に含まれていれば、 A列のファイル名をC列(チェック)に転記するものです。 <シート名:完成形> やりたいことの完成形がこちらのシートです。 詳しいデータは画像データを添付しました。 Findを使用するところまでは調べたのですが、VBA初心者のため シンプルな方法があれば教えてください。

  • マクロを教えてください

    A列の 1行目に商品名1 2行目に商品名1の販売価格 3行名に商品名2 4行目に商品名2の販売価格 といった具合に、 商品名と価格が同じ列に交互に繰り返されているデータがあります。10000行ぐらいあります。 それを A列 商品名 B列 販売価格 というふうに分けたいので、そのマクロを教えてください。 販売価格のセルのB列への移動、空白行の削除、繰り返し処理 これらの命令文なのだと思うのですが。。。 宜しくお願いいたします。

  • 企業が謝罪の品として、ポテトチップス??

    企業が謝罪の品として、ポテトチップス?? コンビニで買ったおにぎりの中に虫が入っていて、業者に伝えたら、後日、ダンボールで、宅急便の紙に、食品と書かれた物が送られてきました。(自宅まで謝罪しに来なかったのは、私が来ないでいいですと断ったから) それは、とても軽くて、「一体何を送ってきたんだろう・・」と思ってダンボールを開けて見てみると・・・ 中にはその業者が製造しているポテトチップスが3つ。 ん? ? ポテトチップス ???? 私は、ビジネスの常識として、謝罪として、何か企業が送るものなら、菓子折りがフツー(一般常識)だと思っていたので正直ちょっとびっくりしました。 (以前にも、コンビニで同じ経験があり、その時もやっぱり菓子折りでしたから・・(違う会社で)) こういう会社もあるものなのでしょうか・・・??? 謝罪で、何かを送ると、電話で言われていたもので、届く前は、「きっと菓子折りだろう、あまり好きじゃないけど、何か焼き菓子などの詰め物で3千円くらいのものだろう・・」と想像していたら、あまりに軽かったので、何だろう??と思ったら、中身は、ポテトチップス・・・ その会社のHPを見ると、主力商品として、そのポテトチップスが載っていて、値段は1袋350円とのこと。 勿論、値段じゃないですし・・・これを必ず送ってこいとか・・・言っているわけではありませんが、 なんとなく、謝罪として、ポテトチップス送るって、会社としてどうなの??って思っています。 前向きに捉えれば、会社はもしかしたら、「主力商品はうちはポテトチップスなので!!」 ということでもいいたかったのでしょうか・・・ 確かに、HPには雑誌やテレビにも取り上げられている物のようです。 (かと言って、手に入らない入手困難な商品というわけでもなさそうで、いつでもネットで手に入るみたいです) が、、っていうよりか、、、、今回は、単なる訪問でなく、「謝罪」が主なわけで・・・・・・・・・・ それで、ポテトチップスって・・・・いくら有名商品だとしても、謝罪でポテトチップスって有り?でしょうか・・・?? 値段も350円と先に書きましたが、わたしは、今回の件で、もっと高い物送れ!とか、言っているわけでは勿論ありません・・笑; 誠意があればいいんです。 けど、いくら誠意があっても、常識的に、用件は謝罪なわけですから、普通一般的に、ここは包装紙にちゃんと包まれた菓子折りがベストなんじゃないんでしょうか? なんだか、ポテトチップスじゃ、子供の食べるおやつだし、なんだか、バカにされている気分にもなり、かえって更に気分が悪くなりました・・・ 皆さん、どう思われますか? こういう(ポテトチップス)という物を送るという、謝罪の仕方もあるのでしょうか? 会社の主力商品なら何でもいいのでしょうか? 長々とすみませんでした。 皆さんのご意見ぜひぜひお聞かせください。 お待ちしておりますm(_ _)m

  • エクセル マクロ 検索

    お世話になります。 範囲がA2からK221までの表があります。 検索して検索されたセルの左のセルを表示するマクロを組みたいのですが、検索する文字(数値)はE1に、検索結果はK1に表示するようにするにはどのようにしたらいいでしょうか? Sub FIND_DATA1() ' FIND_DATA1 Macro ' マクロ記録日 : 2006/9/1 ユーザー名 : ' Cells.Find(What:=Range("E1").Value, After:=ActiveCell, lookAt:=xlWhole).Activate End Sub Sub Data_Find3() Dim 対象セル As Range Dim 最初のセル番地 As String Dim 検索件数 As Long Cells.Interior.ColorIndex = xlNone If Range("E1").Value = "" Then Exit Sub End If Set 対象セル = Cells.Find(What:=Range("E1").Value, After:=ActiveCell, lookAt:=xlWhole) 最初のセル番地 = 対象セル.Address Do 対象セル.Interior.ColorIndex = 37 検索件数 = 検索件数 + 1 Set 対象セル = Cells.FindNext(対象セル) Loop While 対象セル.Address <> 最初のセル番地 MsgBox "検索件数は" & 検索件数 - 1 & " 件です" End Sub 本を見たり調べたりでここまでできたんですがこれだと検索件数、検索結果が色付きになるだけで使い勝手がいまいちです。 よろしくお願いします。

  • Wordマクロで目に見える文字列だけを探すには

    Word2000のマクロで、目に見える文字列だけ(つまり空白・改行・タブなどは対象外)を探す方法はありますか。 操作をマクロに記録してみましたが、「任意の1文字」を選ぶと、改行とかの「目に見えない」文字まで検索されてしまいます。 そこで、 Selection.Find.ClearFormatting With Selection.Find .Text = "^?" の "^?" を、「目に見える文字列」を指す内容に変えられますか? それが無理なら、何かほかに簡単な方法はないでしょうか。 マクロは素人なので、複雑なことはできないです。 よろしくお願い致します。

  • Excel マクロ 平均

    Excel マクロ 平均 仕事の都合で以下のようなデータの平均を出すマクロ(VBA)を作成する事になったのですが、どのようなコードになるのでしょうか? ・商品の年式ごとの平均を求める。 ・金額は入っていないデータは対象外にする。 ・データ数は5000件位あります。 ・商品の種類は沢山あります。 ・年式も様々です。 ・Sheet2に実行結果の平均を入れる。 Sheet1 商品名 年式 金額 テレビ 1990 1,000 冷蔵庫 1999 テレビ 1990 2,000 冷蔵庫 1999 3,000 テレビ 1991 冷蔵庫 1990 1,000 テレビ 1991 2,000 Sheet2   1990  1991  1992 ・・・ テレビ 1,500 2,000 冷蔵庫 1,000 マクロ初心者且内容が伝わりにくい所があるかもしれませんが、何卒宜しくお願い致します。

  • オーブンを使ったポテトチップス名を教えて下さい

    その昔、オーブンで焼いた(?)ポテトチップスが市販で売ってあったのですが、 その商品名って分かりますか? 残念ながらメーカーも一切思い出せません。

専門家に質問してみよう