- ベストアンサー
表の中から条件に合う値を複数検索する方法(Excel又はAccess)
Excel、Accessのいずれでも構いません。 <表1>のシート(テーブル)があった場合に、<表2>のように担当者ごとの取引先を検索してきて複数の値を列記する方法を教えてください。 クエリや関数式など、どのような方法でも結構です。 <表1> 取引先 担当者 A社 佐藤 B社 佐藤 C社 田中 D社 佐藤 E社 村井 F社 村井 G社 田中 ・ ・ ・ ・ ・ ・ <表2> 担当者 取引先 佐藤 A社 B社 D社 田中 C社 G社 村井 E社 F社 ・ ・ ・ ・ ・ ・ やりたことは、差し込み印刷で各「担当者」に、それぞれが担当する「取引先」を通知する文書を作成することです。 「取引先」は、同じセルになっても構いませんし、もちろん違っていても構いません。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>しかし、正直言ってよく分かりません。 どういう部分がわからないのでしょうか・・ 表1というシートのA1のセルから質問文のようなデータが並んでいて 表2というシートにA1のセルから質問文のようなデータに転記します。 ALT+F11キーでVBEを起動し ThisWorkbook をダブルクリックして貼り付けます。 シートからマクロの実行で選んで実行します。
その他の回答 (3)
- nicotinism
- ベストアンサー率70% (1019/1452)
Access2002で試しました。 表1をTBL1(テーブル名)とすると 新規クエリを作成し(クエリ1) そのSQLビューに SELECT TBL1.取引先, TBL1.担当者, DCount("*","TBL1","取引先<='" & TBL1.取引先 & "' and 担当者='" & TBL1.担当者 & "'") AS 連番 FROM TBL1; とし、 このクエリ1を元にクロス集計クエリを作ってSQLビューには TRANSFORM First(クエリ1.取引先) AS 取引先の先頭 SELECT クエリ1.担当者 FROM クエリ1 GROUP BY クエリ1.担当者 PIVOT クエリ1.連番; でいけるかな~?
お礼
なるほどクエリを元にクロス集計クエリを作るという方法もあるんですね。 参考になりました。ありがとうございます。
- keirika
- ベストアンサー率42% (279/658)
Sheet1のA列に取引先、B列に担当者が入力されていて、D列とE列に表2を作成すると仮定します。 1.まず表1(A列とB列)を担当者で並び替えます。 2.以下のマクロを実行します。 Sub test() Dim a As Integer Dim b As Integer Dim c As Integer Dim d As Integer Worksheets("Sheet1").Range("d1").Value = Worksheets("Sheet1").Range("b1").Value a = 0 b = 0 d = 0 e = 0 Do While Worksheets("Sheet1").Range("b1").Offset(b, 0).Value <> "" If Worksheets("Sheet1").Range("d1").Offset(d, 0).Value = _ Worksheets("Sheet1").Range("b1").Offset(b, 0).Value Then Worksheets("Sheet1").Range("e1").Offset(d, e).Value = _ Worksheets("Sheet1").Range("a1").Offset(a, 0).Value a = a + 1 b = b + 1 e = e + 1 Else d = d + 1 Worksheets("Sheet1").Range("d1").Offset(d, 0).Value = _ Worksheets("Sheet1").Range("b1").Offset(b, 0).Value e = 0 End If Loop End Sub EXCEL2003使用 動作確認はしていますが、上手く動かない場合はご容赦ください
お礼
上手くいきました!ありがとうございました。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
Public Sub 処理() Dim base As Range, i As Long Dim 担当者 As String, 取引先 As String Dim List, wk Set List = CreateObject("Scripting.Dictionary") Set base = Sheets("表1").Range("A2") i = 0 Do While (base.Offset(i).Value <> "") 取引先 = base.Offset(i).Value 担当者 = base.Offset(i, 1).Value If Not List.Exists(担当者) Then '始めてでてくる担当者を登録 List.Add 担当者, 取引先 Else '重複する場合、連結する List.Item(担当者) = List.Item(担当者) & " " & 取引先 End If i = i + 1 Loop Sheets("表2").Cells.ClearContents '書き出しシートのクリア Sheets("表2").Cells(1, 1).Value = "担当者" Sheets("表2").Cells(1, 2).Value = "取引先" i = 2 For Each wk In List.keys Sheets("表2").Cells(i, 1).Value = wk Sheets("表2").Cells(i, 2).Value = List.Item(wk) i = i + 1 Next Set List = Nothing End Sub
お礼
早速ご返信いただきありがとうございます。 しかし、正直言ってよく分かりません。 もう少し分かりやすいものをご紹介いただければ嬉しいです。 わがまま申し上げてすみません。よろしくお願いします。
お礼
上手くいきました。 ご丁寧なご回答をいただき、ありがとうございました。