• ベストアンサー

エクセル2010 検索と抽出

EJ~ETセルにデータがあります。 A1に入っている文字をEJ列から探し、同じ文字に該当したらその行のEK列~ET列を、Bセル~Lセルまでに抜き出したいのです。 ちなみに、該当する行全てをB~Lセルの下行にずっと抜き出していく形です。 また、上記をワンセットにして、L、W、AH、AS、BD、BO、BZ と 同じ作業があります。 ちなみに、Ej~ETセルのデータは4万行ほどありますので、負担の掛からないスピードで抜き出せる方法が理想です。 併せて、A1に入る文字は毎回、変わりますので随時抽出してくる方法が必要です。 L以降も同様です。 詳しい方、よろしくお願い致します。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

No.2です。 投稿後気づきました。 前回のコードは消去して↓のコードに変更してください。 (最終行の取得が1行違っていました) Sub Sample1() Dim j As Long, lastRow As Long Application.ScreenUpdating = False Rows(1).Insert lastRow = Cells(Rows.Count, "EK").End(xlUp).Row '←最終行取得をココに移動 Range("EK1") = "ダミー" For j = 1 To 78 Step 11 'A・L・W・AH・AS・BD・BZ列 Range(Columns(j + 1), Columns(j + 10)).ClearContents Range("EK1").AutoFilter field:=1, Criteria1:=Cells(2, j) If Cells(Rows.Count, "EK").End(xlUp).Row > 1 Then Range(Cells(2, "EK"), Cells(lastRow, "ET")).SpecialCells(xlCellTypeVisible).Copy Cells(2, j + 1) End If Next j ActiveSheet.AutoFilterMode = False Rows(1).Delete Application.ScreenUpdating = True End Sub 何度もごめんなさい。m(_ _)m

gekikaraou
質問者

お礼

お返事遅くなりごめんなさい。 そして、回答ありがとうございます。 お陰さまで、無事出来ました、ありがとうございました!

その他の回答 (3)

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.4

>試してみたのですが、1行目しか抜き出してくれません。 「該当する行全てをB~Lセルの下行にずっと抜き出していく形です。」を見落としていました。 A1セルの値と同じ値がEJ列に複数あるときは最初に検出された行の値が返ります。 従って、EJにA1セルと同じ値があるときにすべてB2~L2以降へ列記するのであれば別の数式を組み立てなければなりません。 次の数式で良いと思います。 =IFERROR(INDEX(EK:EK,SUMPRODUCT(LARGE(($EJ$1:$EJ$40000=$A$1)*ROW(B$1:B$40000),COUNTIF($EJ$1:$EJ$40000,$A$1)-ROW()+1)),1),"") Excel 2013で検証した結果は添付画像のとおりです。 因みに、模擬データは4万行で動作確認しましたがストレスを感じるほど待ち時間はありませんでした。 使用PCはSurface Pro(Windows 8.1 64bit)です。 尚、A2へはA1の値とEJ列の値が同じであるセルの個数をカウントしています。

gekikaraou
質問者

お礼

再度回答頂きまして、お手間を頂きありがとうございます! お陰さまで何とかできました、助かりました、ありがとうございます!

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! VBAでの一例です。 >上記をワンセットにして、L、W、AH、AS、BD、BO、BZ と 同じ作業があります EK~ET列データでEK列データが A1セルと一致するデータをB~K列 L1セルと一致するデータをM~V列 W1セルと一致するデータをX~AG列 ・・・ と連続して表示するものとします。 シートモジュールに↓のコードをコピー! → マクロを実行してみてください。 Sub Sample1() Dim j As Long, lastRow As Long lastRow = Cells(Rows.Count, "EK").End(xlUp).Row Application.ScreenUpdating = False Rows(1).Insert Range("EK1") = "ダミー" For j = 1 To 78 Step 11 'A・L・W・AH・AS・BD・BZ列 Range(Columns(j + 1), Columns(j + 10)).ClearContents Range("EK1").AutoFilter field:=1, Criteria1:=Cells(2, j) If Cells(Rows.Count, "EK").End(xlUp).Row > 1 Then Range(Cells(2, "EK"), Cells(lastRow, "ET")).SpecialCells(xlCellTypeVisible).Copy Cells(2, j + 1) End If Next j ActiveSheet.AutoFilterMode = False Rows(1).Delete Application.ScreenUpdating = True End Sub こんな感じではどうでしょうか?m(_ _)m

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.1

>A1に入っている文字をEJ列から探し、同じ文字に該当したらその行のEK列~ET列を、Bセル~Lセルまでに抜き出したいのです。 VLOOKUP関数で試してください。 次の数式をB1へ入力し、右へL1セルまでコピーします。 =IFERROR(VLOOKUP($A1,$EJ:$ET,COLUMN(),FALSE),"") >また、上記をワンセットにして、L、W、AH、AS、BD、BO、BZ と 同じ作業があります。 前述の数式を応用して試されると良いでしょう。 >ちなみに、Ej~ETセルのデータは4万行ほどありますので、負担の掛からないスピードで抜き出せる方法が理想です。 提言の数式で実行した結果を補足してください。 動作が緩慢になるときは自動再計算をOFFにしてキー入力が完了したら手動で再計算するとストレスが解消するでしょう。

gekikaraou
質問者

補足

お返事遅くなりごめんなさい。 そして、回答頂きありがとうございます。 試してみたのですが、1行目しか抜き出してくれません。

関連するQ&A

専門家に質問してみよう