
初めて質問します
エクセルで画像の左ようにデータが並んでいるシートがあり
(・・・はデータがまだ続いています)
テスト結果に◯と△がどちらもいつ以上あった名前の人の結果を全て別シートに抽出したいです
画像の場合はAとDがどちらも◯と△があるので名前にA,Dと書かれている行を全て抜き出したいです(Aで結果がxの5行目も)
VBAや関数で抜き出せないでしょうか?
具体的なコードや式を教えていただきたいです
写真は例で別の表に当てはめるので内容を詳しく教えていただけると助かります

No.2ベストアンサー
- 回答日時:
以下のマクロを標準モジュールに登録してください。
左側のシートをSheet1,右側のシートをSheet2とします。
Sheet2に抽出結果が表示されます。
Option Explicit
Public Sub 複数条件抽出()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim dicT As Object
Dim maxrow1 As Long
Dim row1 As Long
Dim row2 As Long
Dim key As Variant
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
Set dicT = CreateObject("Scripting.Dictionary")
maxrow1 = sh1.Cells(Rows.count, "A").End(xlUp).Row
For row1 = 2 To maxrow1
key = sh1.Cells(row1, "C").Value
If dicT.exists(key) = False Then
dicT(key) = 0
End If
If sh1.Cells(row1, "D").Value = "○" Then
dicT(key) = dicT(key) Or 1
End If
If sh1.Cells(row1, "D").Value = "△" Then
dicT(key) = dicT(key) Or 2
End If
Next
sh2.Cells.ClearContents
sh2.Range("A1:D1").Value = sh1.Range("A1:D1").Value
row2 = 2
For Each key In dicT.keys
If dicT(key) = 3 Then
For row1 = 2 To maxrow1
If sh1.Cells(row1, "C") = key Then
sh2.Range("A" & row2 & ":D" & row2).Value = sh1.Range("A" & row1 & ":D" & row1).Value
row2 = row2 + 1
End If
Next
End If
Next
MsgBox ("完了")
End Sub
ご回答ありがとうございました
このマクロで無事抽出できました
1番早く回答いただきましたのでベストアンサーとさせていただきます
ありがとうございました
No.7
- 回答日時:
とりあえず、フィルタをかける所まで書いてみました。
転記部分は、必要に応じて、ご自分で書いてみてください。
Sub sample()
Dim dicT As Object
Dim i As Long
Dim namae As Variant
Set dicT = CreateObject("Scripting.Dictionary")
For i = 1 To Range("テーブル1").Rows.Count
namae = Range("テーブル1[名前]").Rows(i).Value
If Not dicT.Exists(namae) Then
dicT.Item(namae) = WorksheetFunction.CountIfs(Range("テーブル1[名前]"), namae, Range("テーブル1[テスト結果]"), "○") > 0 And _
WorksheetFunction.CountIfs(Range("テーブル1[名前]"), namae, Range("テーブル1[テスト結果]"), "△") > 0
End If
Next i
For Each namae In dicT.Keys
If Not dicT.Item(namae) Then dicT.Remove (namae)
Next
Range("テーブル1").ListObject.Range.AutoFilter Field:=3, Criteria1:=dicT.Keys, Operator:=xlFilterValues
End Sub
ご回答ありがとうございます
やってみたのですがフィルターで全て消えてしまいうまくできませんでした
他の方の回答で解決しました
ありがとうございます
No.6
- 回答日時:
こんにちは
VBAのご希望もあるようなので大丈夫かな
シート情報もあいまいですが取り敢えず
シート名が明示されていないので
データ "Sheet1" 出力先 "Sheet2"
出力前の"Sheet2"の書式、値は消しています
テーブルみたいに見えますが、、
情報が無いのでテーブルは考慮していません
テーブルでAutoFilterにエラーが生じる場合は
テーブルを解除してから実行するか
テーブルに対してのAutoFilter
With ActiveSheet.ListObjects("???")
.AutoFilter .ListColumns("名前").Index, k
のようになると思いますが、ご自身で改造してください
>写真は例で別の表に当てはめるので内容を詳しく教えていただけると助かります
名前別に どちらも◯と△がある条件での 単純なコピペを所望されていると理解しています
残念ですが割愛します
必要データだけを出力するようなコードではなくべたなロジックで情報の少ないメソッドは使っていないと思います
意味の解らない部分を質問してください、またステップ実行などで辿り、メソッド、コードなどで調べてください。
Sub test()
Dim List_Collection As New Collection
Dim k As Variant, c As Range
Dim flag1 As Boolean, flag2 As Boolean
Dim lastRow As Long, i As Long
Application.ScreenUpdating = False
Worksheets("Sheet2").UsedRange.ClearContents
With Worksheets("Sheet1")
.Range("A1").EntireRow.Copy Worksheets("Sheet2").Range("A1").EntireRow
lastRow = .Cells(Rows.Count, 1).End(xlUp).Row
.AutoFilterMode = False
For i = 2 To lastRow
On Error Resume Next
List_Collection.Add .Cells(i, 1), .Cells(i, 1)
On Error GoTo 0
Next i
For Each k In List_Collection
If .AutoFilterMode = True Then .AutoFilterMode = False
.Range("A1").CurrentRegion.AutoFilter 1, k
For Each c In .Range("C2:D" & lastRow).SpecialCells(xlCellTypeVisible)
If c = "◯" Then flag1 = True
If c = "△" Then flag2 = True
Next
If flag1 = True And flag2 = True Then
.Range("A1").CurrentRegion.Offset(1).Copy _
Worksheets("Sheet2").Cells(Rows.Count, "A").End(xlUp).Offset(1)
End If
flag1 = False: flag2 = False
Next
.AutoFilterMode = False
End With
Application.ScreenUpdating = True
End Sub
ご回答ありがとうございます
自分がやりたかったデータに当てはめてみたのですが
うまく出来ず何も表示されませんでした
他の方の回答で解決しました
ありがとうございます
No.3
- 回答日時:
No2です。
使用時の注意事項です。注意1:
○の文字は何種類かあります。文字コードの異なる○を使用すると期待した結果が得られません。
期待した結果が得られない場合、
Sheet1の○をマクロの○にコピペしてください。(それで文字コードが一致します。△も念のため行ってください)
If sh1.Cells(row1, "D").Value = "○" Then
If sh1.Cells(row1, "D").Value = "△" Then
の2行です。
注意2:
Sheet2のB列全体をセルの書式設定で「時刻」にしてください。
そうすると、時刻が正しく表示されます。
No.1
- 回答日時:
カメラでの撮影って相手がモニターですと見づらい物ですよ。
https://www.pc-koubou.jp/magazine/35994
を使うとして、必要のない列や詰められる列なら幅を狭め添付したい範囲を切り取り画像ファイルとして保存し載せるのが宜しいかと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Visual Basic(VBA) Excel VBA 最終行を取得しVlookup関数をコピーする方法をコーディングで教えてください。 3 2023/05/11 13:14
- Excel(エクセル) 【詳しい方教えて下さい】EXCEL条件に一致する値の複数抽出 9 2022/04/29 10:56
- Excel(エクセル) Excelの関数でこんな処理ができますか 1 2023/02/08 13:46
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- Excel(エクセル) Excel(エクセル)でフィルター抽出後、非表示の行を計算しないで、合計を算出する方法 【内容】 添 4 2023/01/30 17:17
- Visual Basic(VBA) エクセルについて教えてください。 3 2023/06/28 09:11
- Excel(エクセル) 複数セルデータを別シートの単一セルにコピーしたい。(詳細をご参照ください) 1 2022/12/14 15:08
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Excel(エクセル) Excelマクロの差分抽出のコードを教えていただきたいです。 2 2023/03/14 11:40
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【条件付き書式】countifsで複...
-
エクセルの保護で、列の表示や...
-
文字の色も参照 VLOOKUP
-
VBAで繰り返しコピーしながら下...
-
Excelでの並べ替えを全シートま...
-
Excelのセルの色を変えた行(す...
-
excel 複数のシートの同じ場所...
-
エクセルで、チェックボックス...
-
エクセル マクロ 標準モジュー...
-
ExcelのVlookup関数の制限について
-
スプレッドシートでindexとIMPO...
-
【VBA】ピボットテーブルを既存...
-
エクセルの列の限界は255列以上...
-
Excel の複数シートの列幅を同...
-
シートをまたぐ条件付き書式に...
-
Excelに自動で行の増減をしたい...
-
【VBA】複数のシートの指定した...
-
Excel VBA ピボットテーブルに...
-
VLOOKアップ関数の結果の...
-
SUMPRODUCTにて別シートのデー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字の色も参照 VLOOKUP
-
ExcelのVlookup関数の制限について
-
【条件付き書式】countifsで複...
-
エクセルの保護で、列の表示や...
-
Excelのセルの色を変えた行(す...
-
エクセルで、チェックボックス...
-
VBAで繰り返しコピーしながら下...
-
シートをまたぐ条件付き書式に...
-
Excelでの並べ替えを全シートま...
-
Excel の複数シートの列幅を同...
-
Excelに自動で行の増減をしたい...
-
【VBA】複数のシートの指定した...
-
【エクセル】1列のデータを交...
-
SUMPRODUCTにて別シートのデー...
-
Excel 2段組み
-
エクセル マクロ 標準モジュー...
-
エクセルの列の限界は255列以上...
-
excel 複数のシートの同じ場所...
-
エクセルVBAで、ある文字を含ん...
-
VLOOKアップ関数の結果の...
おすすめ情報