とりあえず書いてみました。
「抽出件数が複数ある」とのことでしたから、関数として作成することは不可能(配列で返すようにすれば可能ですが)です。したがって、抽出したデータを任意のセルに書き出す仕様になりました。
ユーザーが範囲指定できるようになっていますので、割と長いコードになってしまいました。一つ一つのコードの説明はご勘弁を。
【機能】
指定したセル範囲内でキーワード検索を行い、“一致したセル”と“ひとつ横セルの値”を任意の場所に書き出します。キーワードにはワイルドカードが使えます。
【手順】
1. [Alt]+[F11]でVisual Basic Editor起動(以下VBE)
2. VBE画面で[挿入]-[標準モジュール]クリック
3. 2.で開いたウインドウに下記VBAコードをコピー&ペースト
4. VBEを閉じる
5. [ツール]-[マクロ]-[マクロ]で実行
【以下VBAコード:場所=標準モジュール】(次行からおわりまで)
Sub Sample()
Const RowOffset = 0 '行方向
Const ColOffset = 1 '列方向
Dim TargetArea As Range, rngCurrent As Range, TargetCell As Range
Dim strKeyword As String
Dim Buf()
Dim i As Long, lngRow As Long, lngCol As Long
'検索範囲指定
On Error Resume Next
Set TargetArea = Application.InputBox( _
"・マウスでドラッグしてセルを選択して下さい" & vbCrLf & _
"・離れた範囲を選択する場合は、[Ctrl]キーを使います", _
"検索範囲指定", Type:=8)
If TargetArea Is Nothing Then Exit Sub
On Error GoTo 0
Sheets(TargetArea.Parent.Name).Activate
TargetArea.Select
'検索キーワード指定
strKeyword = Application.InputBox( _
"・直接入力するか、セルを参照して下さい" & vbCrLf & _
"・ワイルドカードも使えます", _
"検索キーワード指定", Type:=2)
If strKeyword = "False" Then Exit Sub
'キーワード検索
ReDim Buf(1, 0)
i = 1
For Each rngCurrent In TargetArea
With rngCurrent
If .Value Like strKeyword Then
'一致した場合OFFSETさせたセルの値を配列にプール
ReDim Preserve Buf(1, i)
Buf(0, i) = .Value
Buf(1, i) = .Offset(RowOffset, ColOffset).Value
i = i + 1
End If
End With
Next rngCurrent
'結果データ有無のチェック
If UBound(Buf, 2) = 0 Then
MsgBox "指定されたキーワードはありません", vbInformation, "検索結果"
Exit Sub
End If
'出力先指定
On Error Resume Next
Set TargetCell = Application.InputBox( _
"貼り付け先セルをひとつ選択して下さい" & vbCrLf & _
"注意)既にデータがある場合、上書きされます", _
i - 1 & "件抽出しました", Type:=8)
If TargetCell Is Nothing Then
Exit Sub
End If
On Error GoTo 0
'出力
Sheets(TargetCell.Parent.Name).Activate
lngRow = TargetCell.Row: lngCol = TargetCell.Column
Application.ScreenUpdating = False
With Sheets(TargetCell.Parent.Name)
For i = 1 To UBound(Buf, 2)
.Cells(lngRow + i - 1, lngCol).Value = Buf(0, i)
.Cells(lngRow + i - 1, lngCol + 1).Value = Buf(1, i)
Next i
End With
Application.ScreenUpdating = True
End Sub
お礼
ご返答大変遅くなり申し訳ありません。 何度も回答いただき感謝しております。 大変参考になりました。ありがとうございました。