1579184559 先頭一行目を検索対象から外して、別シートのA列を1行ずつ検索し、該当するデータを元のシートのF列に貼り付けたい


以前、フームー母さんが書いてくださったコード https://q.hatena.ne.jp/1578650706 を修正しまして、今度は1行目を見出し行(A1セル→「キーワード」、F1セル→「結果貼付」と記入)にして、マクロを実行しました。
すると、https://f.hatena.ne.jp/moon-fondu/20200116231231 のように、F1セルに「キーワードを探す」という文字列が貼付られてしまいました。
その理由はこちら https://f.hatena.ne.jp/moon-fondu/20200116231235 にありますように、検索対象のシートのA列に"キーワード"という文字列を含むセルがあるがゆえに、検索対象となってしまったようです。

そこでSheet1のA1セルについては、検索対象から除外するために、考えました。
「Key(s) = Sheets("Sheet1").Cells(i, 1)」とありますので、i=1からスタートする場合、配列「key」に、Sheet1の1行目・1列目、つまりA1セルが入ってしまうのでは?と考えまして。
以前書いていただいたマクロにおけるi=1を、i=2に変更し、再度、マクロを実行してみました。

回答の条件
  • 1人20回まで
  • 登録:
  • 終了:2020/01/18 19:28:09
id:moon-fondu

すると…当質問に貼り付けました画像のように、なぜかA2セルで指定しているキーワード「りんご」の検索結果が、F1セルに貼り付けられてしまうという事態となってしまいました…。

下の方にいくと、理由は判りかねますがSheet2のA列のすべての文字列が、Sheet1のA列最後のキーワード「マンボウ」と同じ行に貼り付けられております。https://f.hatena.ne.jp/moon-fondu/20200116231228

i = 2としたのは間違いだったようです…。

どう書き換えればSheet1の1行目を検索対象・貼り付け対象から除いて、結果を出力することができますでしょうか。

また、F1セルにA2セルの検索結果が貼り付けられてしまった理由も併せてお教えいただけますと幸いです。

お手数お掛けいたしますが、よろしくお願いします<m(__)m>

ベストアンサー

id:a-kuma3 No.1

回答回数4957ベストアンサー獲得回数2146

ポイント1500pt

i = 2としたのは間違いだったようです…。

間違いじゃなくて、それだと修正が足りないんです。

i の For ループは、キーワードを配列 Key に詰め込むためのループです。
キーワードを Sheet2 から探しているのは、後半の x の For ループです。
探した結果を書き込む行は、変数 y になります。

また、F1セルにA2セルの検索結果が貼り付けられてしまった理由も併せてお教えいただけますと幸いです。

キーワードは i = 2 にしているので、最初に探すキーワードは A2セルの値ですが、書き込む行 y の初期値が 1 なので F1 に結果が書き込まれることになります。



そんなこんなで、Sheet1 の一行目を見出し行にするとしたら、以下の個所を変更しなくちゃいけません(変更箇所だけ抜粋)。

...
c = WorksheetFunction.Subtotal(3, Range("A:A")) - 1
...
For i = 2 To Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
...
y = 2
Sheets("Sheet1").Cells(2, 1).Activate
...
id:moon-fondu

x、yについては自分も何となく把握できておりましたが、iと配列keyの関係性については非常に曖昧な理解でした。a-kuma3さんのおかげでスッキリしました。ありがとうございました<m(__)m>

2020/01/18 19:27:21

その他の回答0件)

id:a-kuma3 No.1

回答回数4957ベストアンサー獲得回数2146ここでベストアンサー

ポイント1500pt

i = 2としたのは間違いだったようです…。

間違いじゃなくて、それだと修正が足りないんです。

i の For ループは、キーワードを配列 Key に詰め込むためのループです。
キーワードを Sheet2 から探しているのは、後半の x の For ループです。
探した結果を書き込む行は、変数 y になります。

また、F1セルにA2セルの検索結果が貼り付けられてしまった理由も併せてお教えいただけますと幸いです。

キーワードは i = 2 にしているので、最初に探すキーワードは A2セルの値ですが、書き込む行 y の初期値が 1 なので F1 に結果が書き込まれることになります。



そんなこんなで、Sheet1 の一行目を見出し行にするとしたら、以下の個所を変更しなくちゃいけません(変更箇所だけ抜粋)。

...
c = WorksheetFunction.Subtotal(3, Range("A:A")) - 1
...
For i = 2 To Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
...
y = 2
Sheets("Sheet1").Cells(2, 1).Activate
...
id:moon-fondu

x、yについては自分も何となく把握できておりましたが、iと配列keyの関係性については非常に曖昧な理解でした。a-kuma3さんのおかげでスッキリしました。ありがとうございました<m(__)m>

2020/01/18 19:27:21

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

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

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

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

回答リクエストを送信したユーザーはいません