ここから本文です

エクセル関数の質問です。 サンプルの様に、A列に注文者、B列に注文商品と平行し...

ths********さん

2018/7/2412:19:44

エクセル関数の質問です。
サンプルの様に、A列に注文者、B列に注文商品と平行してデータがあります。
次に、D4に注文者名を入れると、E列にその注文商品が一覧として出る関数を教えて下さい。

サンプルは同じシートですが、実際は違うシートになっています。

注文者,サンプル,エクセル関数,シート,D4,Dim cnt As Long,Dim i As Long

閲覧数:
98
回答数:
3

違反報告

ベストアンサーに選ばれた回答

non********さん

2018/7/2413:40:39

こう言うケースの場合は、下手に難しい数式にして長くするより、作業列を使うのが一番です。
A列の前に列挿入します。
(元のA列がB列に、B列がC列に変わりますが、入力値を壊すことはありませんので大丈夫です)
新しく挿入されたA4に、
=IF(B4="","",B4&COUNTIF($B$4:B4,B4))
これを下へオートフィルします。
(作業列が目障りなら、入力後に非表示にして構いません)

この作業列を検索値に、Sheet2(納品書)では、
A4に「山田」と入れたとして、
B4に、
=IFERROR(VLOOKUP($A$4&ROW(A1),Sheet1!A:C,3,0),"")
このB4を下へオートフィルします。
対象が無くなった時点で空白表示になります。

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

mac********さん

2018/7/2413:59:09

例示のような名前が一塊になっているレイアウトのデータなら以下の数式が簡単です。

=IF(COUNTIF(A:A,$D$4)>ROW(1:1),INDEX(B:B,MATCH($D$4,A:A,0)+ROW(1:1)-1),"")

適宜、他シートを参照する数式に変更してください。

yas********さん

2018/7/2413:40:57

はじめまして~
関数で処理するのでしたら
作業列を作ってやる方法があります。
C4に=IF(A4=$D$4,ROW(),"")を入力して名前のデータが入っている行まで下方向へオートフィル。
次に、E4に=IFERROR(INDEX(B:B,SMALL(C:C,ROW(A1))),"")の数式を入れます。
空白セルが表示されるまでオートフィル。
いかがですか?
今回のご質問だと、マクロでやった方がいいかと・・・・・
マクロだと次のようになります。
Sub Sample()
Dim i As Long
Dim cnt As Long

cnt = 4
For i = 4 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(i, 1) = Range("D4") Then
Cells(cnt, 5) = Cells(i, 2)
cnt = cnt + 1
End If
Next i

End Sub
いかがですか?

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる