- ベストアンサー
エクセルのデータ抽出関数について
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
表2にNOの同一数値を縦に3個並べた場合に表示するとした場合は H4に =IF(AND($G$4=$G$5,$G$5=$G$6),IFERROR(VLOOKUP($G$4,INDIRECT("B" & MATCH($G$4,$B:$B,0)+ROW(A1)-1 & ":E100"),COLUMN(B1),FALSE),""),"") として右と下にコピーしてみてください。 データは100行目でと考えてます。 より多い場合はE100を変更してください。 表2のG4に入力すると自動で同じ値が下に2個表示されて表2全体のデータを表示するとした場合は G5に =IF(G4<>"",G4,"") としてG6までコピーして H4に =IFERROR(VLOOKUP($G$4,INDIRECT("B" & MATCH($G$4,$B:$B,0)+ROW(A1)-1 & ":E100"),COLUMN(B1),FALSE),"") として右と下にコピーしてみてください。
その他の回答 (3)
- NuboChan
- ベストアンサー率47% (785/1650)
No.2の回答での抜け落ちと 取り敢えず、VBAでの回答です。 H2に指定するNOを手動で入力してマクロを実行してください 修正です。 ws.Range("G4:J1000").ClearContents '要、適宜修正
- NuboChan
- ベストアンサー率47% (785/1650)
Sub Temp() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("Sheet1") Dim searchNo As Variant searchNo = ws.Range("H2").Value If IsEmpty(searchNo) Then MsgBox "Please enter a NO in cell H2.", vbExclamation Exit Sub End If Dim dataRange As Range Set dataRange = ws.Range("B3:E" & ws.Cells(ws.Rows.Count, "B").End(xlUp).Row) Dim foundCell As Range Dim outputRow As Long outputRow = 4 ws.Range("G4:J1000").ClearContents 要、適宜修正 For Each foundCell In dataRange.Columns(1).Cells If foundCell.Value = searchNo Then ws.Cells(outputRow, "G").Value = foundCell.Value ws.Cells(outputRow, "H").Value = foundCell.Offset(0, 1).Value ws.Cells(outputRow, "I").Value = foundCell.Offset(0, 2).Value ws.Cells(outputRow, "J").Value = foundCell.Offset(0, 3).Value outputRow = outputRow + 1 End If Next foundCell If outputRow = 4 Then MsgBox "指定のNO " & searchNo & " は、存在しません。", vbInformation End If End Sub
- mnymnymny
- ベストアンサー率24% (36/147)
なぜ3個そろった時だけ抽出するのでしょうか。それだと関数では無理で、VBAが必要になります。
お礼