• 締切済み

Excelのプルダウンリストを連動&自動反映させた

Excelで、会社名をリストから入力した際に、隣りにある担当者欄に自動で担当者名が入り、複数の担当者がいる場合はリストから選択できるようにしたいのです。 それぞれ、連動させる方法や自動で反映させる方法はあるのですが、効率よくまとめたいです。 また、社名が長い所も多いので、参照元となるリストは、A列に社名B、C、D列(増減の可能性あり)に担当者名を入力する形が望ましいです。 私はExcel初級者ですので、わかりやすくお教えいただけるとありがたいです。 ちなみに、Excel2019です。 よろしくお願いします。

みんなの回答

  • HohoPapa
  • ベストアンサー率65% (454/691)
回答No.5

添付画像のように企業と担当者の一覧があり、 Sheet1のような担当者の埋まるセルを 会社の選択に呼応して制御したいということと思います。 添付画像のように、 Sheet1のシートモジュールに Private Sub Worksheet_Change(ByVal Target As Range)  If Target = Range("E3") Then  '企業名の埋まるセル   Call staffSet  End If End Sub を配置し、 標準モジュールに、後記コードを配置する対応はいかがでしょうか? なお、社員が1名の時は、コンボボックスとはしていません。 また、複数名の時は、コンボボックスとし、 先頭の社員を初期値としてセットしています。 これはセットしないほうがいいですか? むろん、社員が横方向に増えても 会社の選択をし直せば、反映します。 Option Explicit Sub staffSet()  Dim r As Long  Dim c As Long  Dim wsTbl As Worksheet  Dim wsMain As Worksheet  Dim HitCnt As Long '担当者の数  Dim SelList As String  Dim tgCell As Range    With ThisWorkbook   Set wsTbl = .Sheets("企業一覧")   Set wsMain = .Sheets("Sheet1")   Set tgCell = wsMain.Cells(4, 5) '社員名をセットするセル  End With    r = 2 '企業一覧のデータ開始行  c = 2 '企業一覧の社員名開始列  HitCnt = 0  SelList = ""    tgCell.Validation.Delete  tgCell.Value = ""  Do   If wsTbl.Cells(r, 1).Value = "" Then Exit Do   If wsTbl.Cells(r, 1).Value = wsMain.Cells(3, 5).Value Then    Do     If wsTbl.Cells(r, c).Value = "" Then Exit Do     HitCnt = HitCnt + 1     If HitCnt = 1 Then       tgCell.Value = wsTbl.Cells(r, c).Value '社員名をセットするセル     End If     SelList = SelList & wsTbl.Cells(r, c).Value & ","     c = c + 1    Loop   End If   r = r + 1  Loop    If HitCnt > 1 Then   With tgCell.Validation     .Delete     .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _     xlBetween, Formula1:=SelList     .IgnoreBlank = True     .InCellDropdown = True     .InputTitle = ""     .ErrorTitle = ""     .InputMessage = ""     .ErrorMessage = ""     .IMEMode = xlIMEModeNoControl     .ShowInput = True     .ShowError = True   End With  End If End Sub

  • kkkkkm
  • ベストアンサー率65% (1620/2459)
回答No.4

添付画像の A6が社名選択の入力規則のリスト。 B6が担当者選択の入力規則のリスト。 A1からD4までが参照元のリストとします。 A1からA4まで選択した状態で 数式タブの「名前の管理」の所の「選択範囲から作成」で「以下に含まれる値から名前を作成」が出たら上端行にチェックでOKします。 A社の A2からD2まで選択した状態で 数式タブの「名前の管理」の所の「選択範囲から作成」で「以下に含まれる値から名前を作成」が出たら左端列チェックでOKします。あとはB社C社同じように各行のA列からD列まで選択して名前を作成します。 名前の管理でそれぞれ社名,A社,B社,C社ができているのを確認してください。 A6のリストで元の値を =社名 B6のリストで元の値を =INDIRECT(A6) とします。 これで、リスト選択ができますが > 担当者欄に自動で担当者名が入り、 を実現するにはVBAが必要だと思います。担当者が一人の場合は名前が表示され、複数の場合は「選択してください」と表示されます。 該当シートのシートタブを右クリックしてコードの表示で出てきた画面で 以下のコードを記載します。具体的なシート名などが不明なので添付画像の状態でのVBAです。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> Range("A6").Address Then Exit Sub End If Application.EnableEvents = False Dim n As Long: n = 0 On Error Resume Next n = WorksheetFunction.Match(Range("A6").Value, Range("A1:A4"), 0) On Error GoTo 0 If n <> 0 Then If Cells(n, "C").Value = "" Then Range("B6").Value = Cells(n, "B").Value Else Range("B6").Value = "選択してください" End If End If Range("B6").Select Application.EnableEvents = True End Sub

回答No.3

以下ページの要領で対処してみてはいかがでしょうか? https://dekiru.net/article/21850/

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

#1です。補足していただいた、内容がよく判らない。 >担当者が1人の会社もあるので、その会社名が入力されたときだけ自動で担当者が入力されるようにしたい…ということ >担当者が1人の会社もあるので なぜこの表現になるのかわからない。 1人の場合が、むしろ簡単で、担当者がX,Yの2人いるとき、その会社をA列に、ドロップダウンで選択入力したとき、担当者が2人いるとして、B列=x,C列=Yに分けて出すほうが難しい。選択できる、リストの値(の設定)は1つでしょう。 小生では、直ちには答えられない。 とりあえず文字列「”X,Y“」をB列に返して、その後操作で、データー区切り位置で2列(b、C列にXと、Yを)に分けるのはどうか。 関数でもB列 =MID(A1,1,FIND(",",A1)-1)と、C列 =MID(A1,FIND(",",A1)+1,LEN(A1)-FIND(",",A1)) に分けれられる、が。 全般に質問のしたいことが正確に伝わらない。 小数のデータ例で、方法は別(飛ばして)にして、結果をが、こうなるようにしたい、という書き方をせにゃ、文章だけでは紛らわしい。 色んなケース、れう外的なケース、難しそうなケース(データ例)は、別分けて、注釈で記述するとよい。

syosinsyasan
質問者

補足

いや、複数の担当者がいる会社と、一人しかいない会社があるってだけのことなんですがね・・・ 伝わらないですかね。。。 残念です。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

初級者、というなら、仕様で欲張らないこと。 社名が(フル名では、文字が多いのでが理由か?)3列に別れる、などの対処は、聞いたことがない。非力なら、問題を複雑化しないこと。 2段の連動を、入力規則で、リストで、エクセル関数でやるのが、限度だろう。この経験はあるのかな?よく質問がでる課題だ。「エクセル 入力規則 リスト 多段」「エクセル 連動ドロップダウンリスト」などで、WEB照会したか。そこにもフル社名が、長い場合、列を前後で2列に分けるなんて記事は調べたか?ないだろう。 ーー 別途、アクセスVBAなどデータベース的にデータを扱えるなら、3段、4段連動も、そういうデータベースを作れれば、可能かなと思う。でもツリー状の親ー子ー孫ー玄孫などの編成データを、随所の段階から索引出来るようにするのは大変だ。 エクセルの勉強することの中には、具体的な方法の習得も大切だが、どの点がどうなると、「複雑化し」、難しくなる(普通の人では出来ない)のか、の判断能力を習得することが、本当は大切だと思う。具体的にやったことがなく、やれなくても、難しい課題だというのは、同部門の他の勉強をすると、わかるものだ(限界がわかるというのかな)。延長・類推が可能なのはどこまでか、と言うこと。この訓練をしないと、無駄な試行時間を費やし、仕事などではやってられないと思う。 その他の手段として、VBAが使えれば、出来ることが、広がる部分は相当あるが。 ーー 下記の表現がわかりにくい。 >社名が長い所も多いので、参照元となるリストは、A列に社名B、C、D列(増減の可能性あり)に担当者名を入力する形が望ましいです 社名と担当者名の2列で良いのでは?社名が長い場合は、続き(残り)を何かの方法で補えればよいのかな? その仕掛けは、良いものが思いつかないが。エクセルの仕掛けを使う、良い方法のアイデアは質問者にあるか? 宛先などで、略称は失礼と思うなら、まず略称だけで、入力規則の入力時は、取り敢えず、我慢して、別途入力完了時に、別列にフル名を引っ張ってくることを考えてはどうか。 関数ならVLOOKUPを使うとして、両者の対応表を別途作る面倒さが発生するが。 ーーー 小生の勝手なアイデア。 G1:G5 スペースより右はH列のデータとする。 A社 東京証券取引者所データ管理課有志一同代表山田課長 東京科学工業 日野運搬 株式会社 日野運搬産業労働組合労使担当課 佐藤メリヤス工場 東京都船舶安全振興協同組合 Sheet1のA1:A10までは、データーデータの入力規則ーリストーセル範囲 G1:G5 で設定。 VBAで、Sheet1のダブルクリックイベントで Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) MsgBox Range("G1:G100").Find(Target.Value).Offset(0, 1) End Sub と設定。 ーー A社を入力した、(A列の)セルをダブルクリック。 東京証券取引者所データ管理課有志一同代表山田課長 が表示されるだろう。 このフル名を表示でなく、C列にセットするのは簡単。

syosinsyasan
質問者

補足

早速のご返答ありがとうございます。 すいません、書き方が悪かったようですが、単純にA列に会社名をリストから表示させたら、B列でその会社の担当者だけをリスト表示させたいということなんです。ただ、担当者が1人の会社もあるので、その会社名が入力されたときだけ自動で担当者が入力されるようにしたい…ということなのです。 そしてその際の、リストの参照元を縦ではなく、横にしたいのです。 わかりにくくて申し訳ないですが、よろしくお願いします。

関連するQ&A

  • Excelで1つのリストに対して2つのリストを連動させたい

    こんにちは。 縦横可変範囲の名前定義でリスト http://www2.odn.ne.jp/excel/waza/name.html#SEC22 というので、2つのリストの連動は出来たのですが、1つめのリストの値に連動させたいリストをもう一つ増やしたい場合はどのようにすればよいのでしょうか? 例 A列 式場名 B列 式場名に連動した会場名 C列 式場名に連動した担当者名 というようにしたいのです。すべての列で追加変更がよくありますので更新が楽な方がうれしいです。よろしくお願いします。

  • 連動させたいリストをもう一つ増やしたい

    エクセルの質問です。 連動させたいリストをもう一つ増やしたい場合はどのようにすればよいのでしょうか? 例えば、 A列 「式場名」 B列 「式場名」に連動した 「会場名」 C列 「式場名」に連動した 「担当者名」

  • EXCELでリストと連動して選択されるようにしたい(初心者)

    EXCEL2003です。 とあるセルを、リストから選べるようにしていますが、 リストから値を選んだら、その値に連動して、 その下のセルに、自動的に入力されるようにしたいのです。 つまり、1,2,3というリストと100,200,300というリストがあり、 1には100、 2には200、 3には300 が、それぞれ対応している、とします。 入力規則で、リストから1を選ぶと、その下のセルには”100”と 自動的に入力されるようにしたいのです。 よろしくお願いいたします。

  • 3連動以上する、可変リスト作成方法

    縦横可変リストをつくりました(エクセル技道場を参考) (一行目に部署名が入っていて、その下に所属の部員名といったリストをもとに、入力規則を使ってA列に部署名をリストから入力、B列にはA列に入力された部署に所属する部員をリストから入力。しかも部署名も氏名も可変範囲) 名前定義 部署3 参照範囲「=OFFSET($A$1,0,0,1,COUNTA($1:$1))」      氏名  参照範囲「=OFFSET(リスト2!$A$2,0,MATCH(!$A2,部署3,0)-1,COUNTA(OFFSET(リスト2!$A:$A,0,MATCH(!$A2,部署3,0)-1))-1,1)」 別シートのA列・B列に入力規則を設定で、AB列連動になりました。 C列(さらにDE・・)も可変リストで連動させることができるでしょうか。教えてください。 ちなみに以下の方法で試しました。 部署+氏名(企画課佐藤)で名前定義。(それぞれ名前定義していく) C列入力規則、参照範囲「=INDIRECT(A1&B1)で3連動のリストができるのですが、部署+氏名の名前定義を可変にする、例えば「=OFFSET(リスト1!$A$2,0,0,COUNTA(リスト1!$A:$A)-1,1)」 エラーがでます。参照範囲を可変にしないと「=リスト1!$A$3:$A$9」だとOK。 参照範囲の設定がわるいのか関数の使用方法がわるいのか、可変リストにするのが無理なのか、わかりません。 なにか、他に良い方法があれば、教えてください。よろしくお願いします。

  • EXCEL ドロップダウンリストの連動について

    EXCELの質問です。 シートXの行1の、列Aに「チームA」、列Bに「チームB」、列Cに「チームC」と入力し、 この3つに「名前の定義」で「チーム名」と付けました。 続けて、 シートXの列Aの行2~行10まで、チームAのメンバーの名前を入力しました。 同じく、 シートXの列Bの行2~行10まで、チームBのメンバーの名前を入力しました。 同じく、 シートXの列Cの行2~行10まで、チームCのメンバーの名前を入力しました。 次に、シートYの行1の列Aに、入力規則で「リスト」として、「元の値」に「=チーム名」としました。 次に、シートYの行2の列Aに、入力規則で「リスト」として、「元の値」に「=INDIRECT(A1)」としました。 こうして、ドロップダウンリストを連動させました。 ここで、 シートYの行1の列Aで「チームB」を選択すると、 シートYの行2の列Aのドロップダウンリストには「チームB」のメンバーの「名前が出てきますよね。 ここで、「チームB」の3番目の選手(名前を「日本 太郎」とします)を選択した後で、 シートXの列Bの行2~行10まで入力した、チームBのメンバーの名前が全員間違っていたため入力し直した時に(例えば「日本 太郎」を「世界 太郎」に変更したとします)、 選択済みの「日本 太郎」を、自動連動で「世界 太郎」に変更されるようにしたいのですが、方法はあるでしょうか? ドロップダウンリストが連動して、かつ元データを変更したら自動で反映されれば「INDIRECT関数」以外の方法でも構わないです。何か良い方法はないでしょうか?

  • EXCEL リスト連動 リスト自動拡張

    商品の在庫をエクセルで入力します。 商品名(人参、りんご、さんま、片栗粉等)を入力する際に、 INDIRECT関数と入力規則を利用して、 種別(野菜、フルーツ、海鮮類、粉類等)を絞り、 それぞれの商品名をリストから選択し入力できるようにしたい。 新商品を入荷したりするので、元の商品名のデータを追加したり削除したりする時に、自動的に元の商品データのリスト範囲を拡張するようにしたい。 今、ドラッグして範囲指定してリスト範囲を指定しています。 OFFSET関数とCOUNTA関数を使用して、自動的にリストが拡張できるようなのですが、何を入力したらいいのでしょうか?うまくできません。

  • エクセル2010 商品リストを参照したい

    注文書作成時、商品リストを参照して入力を簡略化したいです。 注文書の商品名を入れると、それに連動して 商品リストの商品コード、得意先コードも表示されるようにしたいです。 商品名は入力規則のドロップダウンリストで入力するようにして 入力された文字列を検索値にVLOOKUPを使う?と考えましたが 商品名は文字列のせいか、うまく検索されません。 よい考え方や、関数はありますでしょうか。 宜しくお願い致します。

  • プルダウンリストを別セルの値によって変える。

    あるセルにプルダウンリストを設定したいのですが、表示させるリストを同行の別セルの値によって変更したいのですがいい方法があるでしょうか? 例)参照セル   A列 → 1,2,3のいずれか数値が事前に入力されている。   プルダウン  B列 → A列値が1 or 2であればリストとして停止or残す の2値を選択。               B列値が3であれば削除or残すの2値を選択。  よく2つのプルダウンリストを連動させる方法は検索でヒットしますが、上記の様な方法がわかりません。わかる方ご教示願います。

  • EXCELで自動で行が挿入できますか?

    EXCEL2000を使用しています。 1.下記のようなプロジェクトリストを作成しています。 A列:プロジェクト B列:試験 C列:施設名 2.C列に施設名を入力すると、自動的に行の挿入ができるようにしたい。 3.試験が決定されると次々と施設が決まっていくため、予め、施設名を入力することができません。 4.その都度、行の挿入を行えばいいのかもしれませんが、複数の方が入力するため、自動的にできたらいいなと考えています。 厄介な質問で申し訳ありませんが、何かよい方法はありますでしょうか? どうぞよろしくお願いいたします。

  • ドロップダウンリストを2列で表示するには?

    Excel2010を使用しています。 1列目に商品ID、2列目に商品名が入ったリストをもとに 入力規則からドロップダウンリストをつくろうとすると、 「区切り文字で区切られたリストか、または単一の行または列の参照でなければならない」 とでてしまいます。 2列のドロップダウンリストを作ることはできないのでしょうか? 入力するのは1列目ですが、2列目も参照しながら選択できるようにするのが目的です。 よろしくお願いします。

専門家に質問してみよう