プロが教えるわが家の防犯対策術!

こんにちは、マクロでの行の抽出について教えて下さい。

Q1に文字が入っていて、その文字と同じ文字のある行を全て下行に表示させるにはどうしたら良いでしょうか?

検索列はE7列でから下行に行数は度々変わります。

列数はN列までをP7にボタンクリックで表示させたいです。

詳しい方、よろしくお願い致します。

質問者からの補足コメント

  • うれしい

    メッセージありがとうございます。
    画像添付します。

    「エクセル マクロ セルの文字と同じ文字の」の補足画像1
    No.1の回答に寄せられた補足コメントです。 補足日時:2020/06/28 19:35

A 回答 (6件)

コメントの指摘、確認しました。


最初にヒットする件数を数えて、件数0の場合の処理を追加しました。
どうでしょうか?

Sub 抽出()
  '前回の抽出結果をクリア
  Range("P7:Y" & Rows.Count).Delete Shift:=xlUp
  'E列の最終行を取得
  EOL = Range("E7").End(xlDown).Row
  '抽出数がゼロなら終了
  If WorksheetFunction.CountIf(Range("E7:E" & EOL), Range("Q1")) = 0 Then Exit Sub
  'データのある範囲の設定
  With Range("E6:N" & EOL)
    'オートフィルタでE列をQ1の値で抽出
    .AutoFilter Field:=1, Criteria1:=Range("Q1").Value
    
    '抽出結果をコピーして、P7セルを起点に貼り付け
    Range("E7:N" & EOL).Copy Range("P7")
    'オートフィルタを解除
    .AutoFilter
  End With
End Sub
    • good
    • 1
この回答へのお礼

早速のご対応感謝いたします、ありがとうございます。

お陰様で無事抽出出来たようです、助かりました、ありがとうございます。

お礼日時:2020/06/28 21:13

こんばんは!



手っ取り早いのはオートフィルタですが、画像を拝見するとタイトル行がないようなので、別案(値の操作)にしてみました。
一例です。

Sub Sample1()
 Dim i As Long
 Dim cnt As Long, lastRow As Long

  '//▼P7以下のデータを一旦消去//
  lastRow = Cells(Rows.Count, "P").End(xlUp).Row
   If lastRow > 6 Then
    Range(Cells(7, "P"), Cells(lastRow, "Y")).ClearContents
   End If
   '//▼ココから操作//
   cnt = 6
    For i = 7 To Cells(Rows.Count, "E").End(xlUp).Row
     If Cells(i, "E") = Range("Q1") Then
      cnt = cnt + 1
       Cells(cnt, "P").Resize(, 10).Value = Cells(i, "E").Resize(, 10).Value
     End If
    Next i
     MsgBox "完了"
End Sub

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 1
この回答へのお礼

こんばんわ、回答ありがとうございます!

いつも教えていただき、ありがとうございます!

お礼日時:2020/06/28 21:15

ほぼ同じことがエクセルのフィルター機能でできます。



6行目を選択 → メニュー → データ → フィルター → E6セルの▼をクリック → テキストフィルタ → 指定の値を含む → 入力欄に『田中』を入力、その右の欄に『を含む』を選択 → OK
フィルター解除するときは、フィルターの右横にある『クリア』をクリックです。



マクロについての質問ですが、マクロを使うというのはあくまでも手段の一つだと思いますので。
    • good
    • 1
この回答へのお礼

回答ありがとうございます。

フィルタでも出来ますよね、色々手段は使えると良いですね!

お礼日時:2020/06/28 21:14

セル範囲が狂ってました。


訂正版です。

Sub 抽出()
  '前回の抽出結果をクリア
  Range("P7:Y" & Rows.Count).Delete Shift:=xlUp
  'E列の最終行を取得
  EOL = Range("E7").End(xlDown).Row
  'データのある範囲の設定
  With Range("E6:N" & EOL)
    'オートフィルタでE列をQ1の値で抽出
    .AutoFilter Field:=1, Criteria1:=Range("Q1").Value
    '抽出結果をコピーして、P7セルを起点に貼り付け
    Range("E7:N" & EOL).Copy Range("P7")
    'オートフィルタを解除
    .AutoFilter
  End With
End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

おそらくOKみたいな感じなのですが、該当の文字が無い場合、全てを抜き出すような気がするのですが、気のせいでしょうか?

検索文字を英字にしてみたのですが、ダメでしょうか?

お礼日時:2020/06/28 20:30

即席ですが、どうでしょうか。



Sub 抽出()
  '前回の抽出結果をクリア
  Range("P7:Y" & Rows.Count).Delete Shift:=xlUp
  'E列の最終行を取得
  EOL = Range("E7").End(xlDown).Row
  'データのある範囲の設定
  With Range("E7:N" & EOL)
    'オートフィルタでE列をQ1の値で抽出
    .AutoFilter Field:=1, Criteria1:=Range("Q1").Value
    '抽出結果をコピーして、P7セルを起点に貼り付け
    .Copy Range("P7")
    'オートフィルタを解除
    .AutoFilter
  End With
End Sub
    • good
    • 0

Q1に書かれた検索キーを


E7から最下行までの間で検索し、
E列にQ1と同じ内容のせるが会った場合、

■その行を全て下行に表示させる??

…E7から検索して、どこの下行に表示させるの?

■列数はN列までをP7にボタンクリックで表示させたい??

抽出するのは、該当業E列~N列?A列~N列?
その列の範囲をP7に表示させる、マクロボタンを作りたいの?

具体的な動作イメージのスクリーンショットを補足できますか?
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング