• ベストアンサー

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

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

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

  • ベストアンサー
  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.2

質問者のスキルであれば単純なFor~Nextが分かりやすいでしょう。 '------------------------------------------- Sub Test()  Dim R As Long  Dim R2 As Long  R2 = 1  For R = 2 To Cells(Rows.Count, "I").End(xlUp).Row    If Cells(R, "I").Value = "数量" Then      R2 = R2 + 1      Cells(R2, "A").Value = Cells(R - 2, "F").Value      Cells(R2, "B").Value = Cells(R, "J").Value      Cells(R2, "C").Value = Cells(R, "G").Value    End If  Next R End Sub '----------------------------------------------- 以上。  

rstt
質問者

お礼

onlyromさんありがとうございました。思った通りの動作でした。 ひとりでここまで書けるかというと、書けませんが、確かに こちらの方が、初心者が勉強するならわかりやすいです。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

I2以下”数量”という文字以外のセルが未入力なら、 Sub try() Dim r As Range For Each r In Range("I2:I" & Rows.Count).SpecialCells(xlTextValues) MsgBox r.Address Next End Sub で”数量”の入っているセルがわかります。 あとはOffsetで出来ると思いますけど、条件に合わなければスル~して下さい。

rstt
質問者

お礼

ご回答ありがとうございます。 I列には他にも違った文字列があり「数量」という文字なら・・・ という条件になります。 書いていただいたおかげでなんとなくイメージできました。 ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excel VBAのFindメソッドについて

    Excel VBAを勉強中の者です。 Findメソッドで、数字の入ったF5セルからF28セルの範囲から、 1という数字の入ったセルを検索したいと思い Sub test() Dim xRange As Range Set xRange = Range("F5:F20").Find(What:=1, LookIn:=xlValues)   xRange.Select End sub としました。 しかし、このまま検索するとF6セルの12が検索されてしまいます。 他の数字では問題なく、対象の数字の先頭の数字が選択されます。 どうしてでしょうか? よろしくお願いします。

  • vbaのFindメソッドで取得するにはどうすれば

    A1に「あ」B1に「い」と入れて、 A2に「=A1&B1」としました。 この時、A2は「あい」と表示されます。 今回やりたいことは、 Sub test() Debug.Print Cells.Find(What:=" あい").Row End Sub で、2を返したいのですが、 実行時エラー91になってしまいます。 セル内に該当の文字列がないからだと思いますが、 数式でつなげた文字列を、 vbaのFindメソッドで取得するにはどうすれば良いでしょうか?

  • VBAのFindメソッドのエラー理由

    初歩的な質問ですがよろしくお願いいたします。 シート1のi行6列目の文字列をシート2の3列目から探してその行数をシート1のi行16列目に 引っ張ってくる記述をしたく、下記のようなコードを書いたところ1004のデバック表示がされました。下の記述をどうすれば正常に動くでしょうか。 Range(i, 16) = Worksheets(2).Range(Cells(5, 3), Cells(5, 3).End(xlsown)).Find(Cells(i, 6)).Row

  • エクセルVBAのReplaceメソッドについて

    エクセル表内のある文字列をVBAのReplaceメソッドを使用して、別の文字列に一括変換したいと考えてます。引数で指定する『置換後の文字列』として該当セルの一つ上のセル(A2に対象文字列がある場合は、A1の値)を指定したいのですが、どのように指定したらよいのか分かりません。Replaceメソッドで置換後の文字列として一つ上のセルの値を指定する事は可能でしょうか。宜しくお願いします。

  • VBAのコードに関する質問です。

    B列の値が3の時に対応するJ列の値を選択し、そのJ列の値の平均値をI2に出力する、というVBAのコードを教えてほしいです。

  • Find ヘルプの見方がわからない

    ヘルプを見てもわからないので教えてください。 aaaaa@yahoo.co.jp で、「@」より左の文字列を取得したいので、 「@」が何文字目にあるかをVBAで調べたいです。 ヘルプでWorksheetFunction.Find メソッドを見てるのですが --------------------------------------------------------- 名前 必須/オプション データ型 説明 Arg1 必須 文字列型 (String) ワークシートの名前を指定します。 Arg2 必須 文字列型 (String) 範囲の名前を指定します。 Arg3 オプション バリアント型 (Variant) 検索を調整する引数の名前を指定します。 --------------------------------------------------------- と記載されているのですが Sub a() Dim i As Long i = Application.WorksheetFunction.Find() End Sub のFindの中にはどのように記載すればいいのでしょうか? そもそもArg1 の「ワークシートの名前を指定します。 」がまずわからないのですが。 VBAで行いたいので、ワークシートは関係ない気がします。 もしかして私が見てるヘルプはVBAのヘルプではないのでしょうか? ご回答よろしくお願いします。

  • エクセルVBAの自動計算について

    エクセルVBAの自動計算について vbaの自動計算について教えてください。 D      E        F        I 数量   仕様       容積      金額  1   仕様1      2.50      XXX 上記の表があります。 Eの仕様は3種類あり、別シートに以下のレート表があってそこから範囲内の容積にある単価を算出します。 その単価にF容積とD数量を掛けたものをI金額に表示して、次行に行き同じことを繰り返します。 レート表は以下の通りです。    H      I       J      L 6 以上    未満     仕様1 仕様2 7  0.01   0.80     3000      3500           中略 13  5.01   6.00    10000      12000 よろしくお願い申し上げます。

  • エクセルVBAで質問です

    下のような表を作っています。 A列に日付がある限り、B、C、D、E列それぞれの列に対して、 3行目以降のデータが検索値と同じであれば、そのひとつ上の行の 値をG、H、I、J列にそれぞれ上から順に入れていきたいのですが、 どのようになるでしょうか。 A1 月日 B1 検索値1・・・B3以降データ C1 検索値2・・・C3以降データ D1 検索値3・・・D3以降データ E1 検索値4・・・E3以降データ G2以降に検索値1で調べた値 H2以降に検索値2で調べた値 I2以降に検索値3で調べた値 J2以降に検索値4で調べた値 例えば、B1の検索値が1であり、B10に1があったとします。 この場合、ひとつ上のB9の値をG2に来るようにしたいのです。 説明下手ですが教えていただけないでしょうか。

  • エクセル VBA

    エクセルVBAで以下のようなデータがあります。 D列の文字列と右隣のE列の文字列の2つが入っているものをA列から探し、見つかったセルの上にセルを追加し、E列の右隣のF列に入っている文字列を代入したいです。 どのようなプログラムになりますか?

  • ExcelVBA Findメソッドで検索のスタート位置について

    おせわになっております。 Findメソッドを用いて、先頭から順に値を検索しようとしています。 Set rngSearch = rngList.Find("ゴルフ", rngSearch, , xlPart) ↑ このような方法で、該当するものを一つ一つ探そうとしています。 つまり、仮に一列目で見つかったら、次は二列目以降から探そうと しています。 FindNextなどを使用しないのは、連続で求めるためではなく、 ボタンを押したときに一つずつ検索するからです。 しかし、この書式ではスタート地点にした、次のセルから検索する はずが、スタート地点に指定したセルから検索してしまい、 何度行っても同じセルばかりを検索して返してしまいます。 Offsetなどで一行ずつずらしても、同じ場所からしか検索が 始まりません。 これはなぜなのでしょうか? 念のため、他のメソッドなどでは決してrngSearch は代入等の 操作はしておりません。 ちなみに、同じメソッドの中で同じ書式を繰り返すと   Set rngSearch = rngList.Find("ゴルフ", rngSearch, , xlPart) MsgBox rngSearch.Value   Set rngSearch = rngList.Find("ゴルフ", rngSearch, , xlPart) MsgBox rngSearch.Value   Set rngSearch = rngList.Find("ゴルフ", rngSearch, , xlPart) MsgBox rngSearch.Value   Set rngSearch = rngList.Find("ゴルフ", rngSearch, , xlPart) MsgBox rngSearch.Value   … うまくいくようなのです。一度でもメソッドを抜けるとうまくいか なくなるような感じです。 以上、わかりづらい説明で大変申し訳ありませんが、なにとぞお願い 致します。

専門家に質問してみよう