• ベストアンサー

行抽出マクロについて教えてください。

エクセルのシート1のB列に整理番号(順不同)が書かれてあり、シート2のC列にも整理番号(順不同)が書かれてあります。 シート1は約数千行・100列、シート2は約数万行・100列です。このシート1のB1と同じ整理番号をシート2のC列より上から検索して、最初に見つかったセル(仮にC7)を含む行をシート3にコピーする。 次にB2について同様にしてシート3にコピーする。この時の検索範囲はC8以下(C7以上は検索範囲外)とする。 同様な作業を続けて、最終的には、シート3のC列がシート1のB列と同じにしたい。 これをマクロで組みたい。どなたかご教授お願いいたします。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

例データ Sheet1 の B列B2:B8 1112 1122 1324 1432 1122 1421 1204 Sheet2の C2:D21 1112 a 1122 b 1324 c 1333 d 1324 e 1981 f 1432 g 1111 h 1122 i 1632 j 1421 k 1204 l 3201 m 5123 n 1122 o 1122 u 1125 t 1421 r 1832 w 1204 x コード(標準モジュール) Sub test01() Dim sh1 As Worksheet Dim sh2 As Worksheet Dim sh3 As Worksheet Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") Set sh3 = Worksheets("Sheet3") k = 2 'Sheet3第2行から順次書き出し p = 2 'Sheet1第2行から開始 '--- d1 = sh1.Range("B65536").End(xlUp).Row 'Sheet1の最下行 d2 = sh2.Range("C65536").End(xlUp).Row 'Sheet2の最下行 For i = 2 To d1 'Sheet1の最下行まで各行について繰り返し ' MsgBox sh1.Cells(i, "B") Set frw = sh2.Range(sh2.Cells(p, "C"), sh2.Cells(d2, "C")).Find(what:=sh1.Cells(i, "B")) '検索 If frw Is Nothing Then '見つからないとき sh1.Cells(i, "D") = "Not Find" 'MsgBox sh1.Cells(i, "A") & "E" Else '見つかったとき r = frw.Row ' MsgBox r sh2.Cells(r, "A").EntireRow.Copy 'その行コピー sh3.Activate sh3.Cells(k, "A").Select ActiveSheet.Paste '行貼り付け k = k + 1 '書き出し先を1行下へずらす p = r '探索範囲上限をづらす End If Next i End Sub データの事実上の仕組みが >この時の検索範囲はC8以下(C7以上は検索範囲外)とする との関連でよくわからない(意味のある場合が、すぐには想像できない)ので、十分テストしてみてください。

Wesley
質問者

お礼

imogasiさん、いつもありがとうございます。おかげさまでできました。シート2の検索範囲については、シート1共、時系列データですので、前回の時点以降で最初の該当データを採用するプログラムが目的です。説明が不十分で失礼しました。プログラム内容については、十分に中身を見て、参考にさせていただきます。本当にありがとうございました

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 私は、良く分らないですね。 例えば、シート2 のC列の行が、全部で、30,000 行だとしますね。 #エクセルのシート1のB列に整理番号(順不同)が書かれてあり、 #シート2のC列にも整理番号(順不同)が書かれてあります。 これについて、順不同として、重複がないものと考えます。 シート1のB1と同じ整理番号をシート2のC列より上から検索して、見つかったセルの行が、C30000 だとしますかね。そうしたら、 #この時の検索範囲はC8以下(C7以上は検索範囲外)とする。 としたら、C30000以降はありませんから、それで、お終いになってしまいます。仮にですが、極端な例で考えてみると、その説明のままではロジックがおかしいように思います。どこか、説明が足りないのではないでしょうか? 具体的な内容とかないので、そのままのご設問では、私には、このマクロは作ることは可能でも、実用性は低いのではないかなって思いました。

Wesley
質問者

お礼

どうもありがとうございました。おかげさまでできました。シート2の検索範囲については、シート1共、時系列データですので、前回の時点以降で最初の該当データを採用するプログラムが目的です。説明が不十分で失礼しました。本当にありがとうございました。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

> この時の検索範囲はC8以下 必ず見つかったセルより下で次の物を探すって事? こんな感じかなと思って書いてみました。 但し、見つかったセルより下に次の物が無い事を想定してません。 Sub Test() Dim r As Range, fr Set fr = Worksheets("Sheet2").Range("C65536") With Worksheets("Sheet1")    For Each r In .Range(.Range("B1"), .Range("B65536").End(xlUp))      Set fr = Worksheets("Sheet2").Columns(3). _          Find(r.Value, after:=fr, lookat:=xlWhole)      If fr Is Nothing Then Exit For      fr.EntireRow.Copy Destination:= _        Worksheets("Sheet3").Range("C65536").End(xlUp).Offset(1, 0).EntireRow    Next r End With End Sub

Wesley
質問者

お礼

ありがとうございました。おかげさまでできました。シート2の検索範囲については、シート1共、時系列データですので、前回の時点以降で最初の該当データを採用するプログラムが目的です。説明が不十分で失礼しました。プログラム内容については、十分に中身を見て、参考にさせていただきます。本当にありがとうございました。

関連するQ&A

  • 行抽出マクロについて教えてください。

    エクセルで sheet1このように入力されております。 A列には製造番号 B列には日付 C列単価 D列記号がすでに入力済みです。 _____________________________________ 行/列  A    B    C    D 1   123456   4/5 1020 K 2  789456  5/2 500 D 3  789789   6/2 9000 F 4  456789   6/2 5000 S ------------------------------------- sheet2には製造番号が500行ランダムに入力済みです。 _____________________________________ 行/列  A    B    C    D 1 456789 2  789456  3  789789 4  456789 5 : 6   : ------------------------------------- ボタンをおしたら一致した製造番号のBCD列にsheet1の日付・単価・記号を自動的に入力したい。どなたかご教授お願いいたします。

  • 行抽出マクロについて教えてください。

    エクセルで sheet1このように入力されております。 A列には製造番号 B列には日付 C列単価 D列記号がすでに入力済みです。 _____________________________________ 行/列  A    B    C    D 1   123456   4/5   1020   K 2  789456  5/2   500   D 3  789789   6/2   9000   F 4  456789   6/2   5000   S ------------------------------------- sheet2には製造番号が500行ランダムに入力済みです。 _____________________________________ 行/列  A    B    C    D 1   456789 2  789456  3  789789 4  456789 5    : 6   : ------------------------------------- ボタンをおしたら一致した製造番号のBCD列にsheet1の日付・単価・記号を自動的に入力したい。どなたかご教授お願いいたします。

  • 行抽出マクロについて教えてください。

    エクセルで sheet1このように入力されております。 A列には製造番号 B列には日付 C列単価 D列記号がすでに入力済みです。 _____________________________________ 行/列  A    B    C    D 1   123456   4/5   1020   K 2  789456  5/2   500   D 3  789789   6/2   9000   F 4  456789   6/2   5000   S ------------------------------------- sheet2には製造番号が500行ランダムに入力済みです。 _____________________________________ 行/列  d    E    F    G 1   456789 2  789456  3  789789 4  456789 5    : 6   : ------------------------------------- ボタンをおしたら一致した製造番号のEFG列にsheet1の日付・単価・記号を自動的に入力したい。どなたかご教授お願いいたします。

  • 行抽出マクロについて教えてください。

    エクセルで sheet1このように入力されております。 A列には製造番号 B列には日付 C列単価 D列記号がすでに入力済みです。 _____________________________________ 行/列  A    B    C    D 1   123456   4/5   1020   K 2  789456  5/2   500   D 3  789789   6/2   9000   F 4  456789   6/2   5000   S ------------------------------------- sheet2には製造番号が500行ランダムに入力済みです。 _____________________________________ 行/列  d    E    F    G 2   456789 3  789456  4  789789 5  456789 6    : 7   : ------------------------------------- ボタンをおしたら一致した製造番号のEFG列にsheet1の日付・単価・記号を自動的に入力したい。どなたかご教授お願いいたします。

  • 文字を検索してその行を別シートにコピーするマクロ

    A列 郵便番号 B列 住所 C列 名前 で出来ているファイルがあるのですが、住所欄にある市ごとにその行を別のシートにコピーさせたいと考えています。 マクロを起動させ、ダイアログボックスにコピーしたい市を入力するとSheet2又は新しいシートにコピーするマクロが出来たら助かるのですが、私用の範囲内で使いますのでご教授お願いします。

  • マクロによる条件での行の入力と削除

     初めまして、よろしくお願いします。  次のような二枚のシートがあります  シート1      A  B  C   1     2       ・      99      100 23    101 25   102 31   103 34  104 43  105 44  106 49  107 50  108 55  109 60  110  111  ・  ・  シート2      A  B  C   1     2       ・      99      100 23  1 2 3   101 25  4 5 6 102 31  7 8 9     103 34  0 1 2  104 43  3 4 5     105 44  6 7 8 106 49  9 0 1 107 50  2 3 4 108 55  5 6 7 109 60  8 9 0 110  111  ・  ・ シート1とシート2のA列に入っている数字が通し番号です。シート2では加えてその通し番号のデーター数字がB列、C列、D列に入っています。 のこシート1の通し番号31が削除、代わりに通し番5番と51番を追加し、  シート1      A  B  C   1     2       ・      99      100  5 101 23    102 25     103 34  104 43  105 44  106 49  107 50  108 51 109 55  110 60  111  112  ・  ・ マクロを実行すると  シート2      A  B  C   1     2       ・      99      100  5 101 23  1 2 3   102 25  4 5 6    103 34  0 1 2  104 43  3 4 5     105 44  6 7 8 106 49  9 0 1 107 50  2 3 4 108 51 109 55  5 6 7 110 60  8 9 0 111  112  ・  ・ シート2がこように通し番号31が入っていた行番102行が削除され、新たに通し番5番が行番100に、51番が行番108に挿入追加されるマクロを教えていただきたく、よろしくお願いします。

  • 検索した文字のセルを基準に範囲指定コピーのマクロ

    表題のマクロを教えてください。 検索範囲 シート1のA1:K100 検索する文字 ” 成績 ” コピーする範囲 見つかったセルの下の行から5行~10列まで全部。 貼り付ける場所 シート2のB1 宜しくお願いします。

  • エクセルVBAによる、行の整理

     始めまして、よろしくお願いします。  シート1とシート2に次のようになっています。 シート1      A  B  C   1     2       ・      99      100 9     101 5     102 3       103 7    104        105   ・  ・ シート2      A  B  C   1     2       ・      99      100 9  3  4  ・・・・     101 5  3  2  ・・・・   102 3  1  0  ・・・・     103 7  5  3  ・・・・  104  105  106 9  ・・ 107 5  ・・ 108 3  ・・ 109 7  ・・ 110  111 9  ・・ 112 5  ・・ 113 3  ・・ 114 7  ・・ 115 116 ・  ・  ・  ・  シート1、シート2のA列にはデーター銘の番号が。シート2のB、C、D・・・列にはデーターが入っています。シート1のA列データー銘の番号の追加(データー銘番号1)、順番を変え、マクロを実行すると シート1      A  B  C   1     2       ・      99      100 3     101 7     102 1       103 9    104        105   ・  ・ シート2      A  B  C   1     2       ・      99      100 3  1  0  ・・・・     101 7  5  3  ・・・・   102 1       103 9  3  4  ・・・・  104  105  106 3  ・・ 107 7  ・・ 108 1   109 9  ・・ 110  111 3  ・・ 112 7  ・・ 113 1   114 9  ・・ 115 116 ・  ・  ・  ・ シート2の(100-103、106-109,111-114の3グループ)行ごとデーターすべてが、シート1A列のデーター銘番号順に整理したいと思います。実際は整理されるデーター銘番号や、行ごと(ここでは整理される100-103、106-109,111-114の3グループですが)の数はかなり多くなります。シート1で削除されたデーター銘番号は、シート2ではデーターすべてが削除されます。(ここではデーター銘番号5がそうです)  解る方、できる方、よろしくお願いします。

  • マクロの書き方2

    マクロの書き方2 tom04さま、本当にありがとうございました。めぐみです。 すみません、先程の質問の続きになってしまいます。 Sheet2にのA列は時々同じ番号が2つ,3つあることがあります。 Sheet2に同じ番号があった場合は、Sheet1のダブっている番号の横のB列セルを黒くしたいです。 そのセルの中はSheet2の情報が反映されてもされなくてもどちらでもかまいません。 ただ、Sheet2のA列に同じ番号があった場合にSheet1のダブっている番号の横のB列セルを黒くなるという機能が追加されていればそれで良いです。 例えば下記のように1行目と4行目に同じ番号が存在していたら、Sheet1のA列の702725の横のB列のセルが黒くなっていたらいいです。 ■Sheet2 A列  B列  C列 702725 X 702872 X 770074    0 702725    0 770223 Z 770474    0 770242 X 770264 X 770330    0 770347 X 770422 X 770468    0 770523 X 770577    0 770627 X 770672 X 770677    0 770720 X 770723 X 770725 Z 770727 X 恐れ入りますが何卒よろしくお願いいたします。

  • 行挿入マクロをご教示ください

    A列の5行目から1000行ほどK列までデータが入っています。 A列からK列をB列優先でソートを行うと、B列にところどころ同じ番号が2行あったり、3行あったり、また4行とバラバラで、出てきます。 この場合、同じ番号が2行以上あるセルの上に空白の行1行を挿入し、同じ番号行分を合計して整理したいと考えています。 2行以上ある行の上に空白行を1行挿入するようなマクロをご教示ください。 どなたか、よろしくお願いします。

専門家に質問してみよう