Excelの値取得関数について

このQ&Aのポイント
  • Excelで表を作成する際、コードから値を取得する方法について教えてください。
  • VLOOKUP関数を使用することで、セルの位置や条件に基づいて値を取得できます。
  • 具体的な例として、社員コードに対応する出身地や所属部署を取得する方法について解説します。
回答を見る
  • ベストアンサー

Excelの値取得関数について

Excelで表を作成する際、コードから値を取得する方法について教えてください。 以下のようなことをやりたいです。 画像の場合、 1. 社員コードに"A001"を入力。 2. 各マスタの領域にある値を取得し、検索結果の各セルに値を表示。  ※B5,B6 の部分に値を取得する関数を設定したいです。 社員名は、C4のセルに記載したような、VLOOKUPで値を取得できました。 出身地と所属部署を取得する場合、 VLOOKUP に VLOOKUP を入れるような形で ないと取得できないのでしょうか。 ※出身地  社員コード"A001" をキーに社員マスタから出身地"T001"を取得し、地方マスタより、"青森県"を取得したいです。 ※所属部署   社員コード"A001" をキーに社員マスタから所属部署"S001"を取得し、部マスタより、"総務部"を取得したいです。 アドバイスをお願いします。

質問者が選んだベストアンサー

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

・VBAを扱える ・Excelのシートに作成した表のデータをADOを使ってテーブルとして扱う ・シート上で使うユーザ定義関数としたい ・そこそこにSQLが扱える という条件なら 添付画像で、 以下のコードにするというのはいかがでしょうか。 なお、 社員マスタにせよ、部マスターにせよ、 実際は、別シート上にあるということだろうと思いますので const部分を含め、実環境に合わせる必要があります。 無論、コードはユニーク(重複しない)ことが条件です。 Option Explicit '//社員名取得関数 Function GetName(SyaNum As Range) As String  Dim cn As Object  Dim rs As Object  Dim wkSQL As String  Const SyainList = "[検索$A9:D13]"    Set cn = CreateObject("ADODB.Connection")  Set rs = CreateObject("ADODB.Recordset")  cn.Provider = "Microsoft.ACE.OLEDB.12.0"  cn.Properties("Extended Properties") = "Excel 12.0;HDR=YES;IMEX=1"  cn.Open ThisWorkbook.FullName  wkSQL = ""  wkSQL = wkSQL & "SELECT " & _    "A.[社員コード],A.[社員マスタ] as kotae " & vbCrLf  wkSQL = wkSQL & "FROM " & SyainList & " A" & vbCrLf  wkSQL = wkSQL & "WHERE " & vbCrLf  wkSQL = wkSQL & "[社員コード] =" & "'" & SyaNum.Value & "'" & vbCrLf    rs.Open wkSQL, cn  GetName = rs("Kotae")    rs.Close      '後処理  Set rs = Nothing  cn.Close  Set cn = Nothing End Function '//出身地取得関数 Function GetHome(SyaNum As Range) As String  Dim cn As Object  Dim rs As Object  Dim wkSQL As String  Const SyainList = "[検索$A9:D13]"  Const TihouList = "[検索$A15:B21]"    Set cn = CreateObject("ADODB.Connection")  Set rs = CreateObject("ADODB.Recordset")  cn.Provider = "Microsoft.ACE.OLEDB.12.0"  cn.Properties("Extended Properties") = "Excel 12.0;HDR=YES;IMEX=1"  cn.Open ThisWorkbook.FullName  wkSQL = ""  wkSQL = wkSQL & "SELECT " & _    "A.[社員コード],A.[出身地],B.[地方名] as Kotae" & vbCrLf  wkSQL = wkSQL & "FROM " & SyainList & " A" & vbCrLf  wkSQL = wkSQL & "LEFT JOIN " & TihouList & " B on A.[出身地] = B.[地方コード]" & vbCrLf  wkSQL = wkSQL & "WHERE " & vbCrLf  wkSQL = wkSQL & "[社員コード] =" & "'" & SyaNum.Value & "'" & vbCrLf    rs.Open wkSQL, cn  GetHome = rs("Kotae")    rs.Close      '後処理  Set rs = Nothing  cn.Close  Set cn = Nothing End Function '//所属部署取得関数 Function GetBusyo(SyaNum As Range) As String  Dim cn As Object  Dim rs As Object  Dim wkSQL As String  Const SyainList = "[検索$A9:D13]"  Const BusyoList = "[検索$A23:B30]"    Set cn = CreateObject("ADODB.Connection")  Set rs = CreateObject("ADODB.Recordset")  cn.Provider = "Microsoft.ACE.OLEDB.12.0"  cn.Properties("Extended Properties") = "Excel 12.0;HDR=YES;IMEX=1"  cn.Open ThisWorkbook.FullName  wkSQL = ""  wkSQL = wkSQL & "SELECT " & _    "A.[社員コード],A.[所属部署],B.[部名] as Kotae" & vbCrLf  wkSQL = wkSQL & "FROM " & SyainList & " A" & vbCrLf  wkSQL = wkSQL & "LEFT JOIN " & BusyoList & " B on A.[所属部署] = B.[部コード]" & vbCrLf  wkSQL = wkSQL & "WHERE " & vbCrLf  wkSQL = wkSQL & "[社員コード] =" & "'" & SyaNum.Value & "'" & vbCrLf    rs.Open wkSQL, cn  GetBusyo = rs("Kotae")    rs.Close      '後処理  Set rs = Nothing  cn.Close  Set cn = Nothing End Function

komegu66
質問者

お礼

ありがとうございます。 今回は、こういうやり方もあるのですね。 参考にさせていただきます。

その他の回答 (6)

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

掲示するときに、半角スペース2つを全角スペース1つに置換したため、 SQL文に全角スペースが混じってしまっているようです。 以下、訂正します。 誤  wkSQL = wkSQL & "FROM " & SyainList & " A" & vbCrLf 正  wkSQL = wkSQL & "FROM " & SyainList & " A" & vbCrLf それぞれのFunctionに上記記述がありますので 合計3か所、修正が必要です。 ゴメンナサイ。

komegu66
質問者

お礼

ありがとうございます。 お礼が遅くなりすみません。 いただいた情報を参考にさせていただきました。

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.5

今日は、回答No.2です。 >社員マスタはコードのみで管理した方がメンテナンスしやすかと思って なるほど、担当者が代わって業務引継ぎのときなど 社員マスタの社員マスタ名を替えるだけで、関連する表はそのまま使えますね しかし、地方マスタ(都道府県名)、部マスタはほぼ普遍的なものですね 社員マスタの出身地、所属部署は「入力規則」を利用してはと考えますが 蛇足 地方コードの頭1桁は地域区分でしょうが、 地域区分が必要な時は地域列で対応しては 都道府県コードはJIS規格で2桁であります。

komegu66
質問者

お礼

ありがとうございます。 参考にさせていただきます。 今回はサンプルとして社員名簿のようなマスタを使用させていただきましたが、実際は、製品などプロジェクトでの使用となります。

  • Chiquilin
  • ベストアンサー率30% (94/306)
回答No.4

> 出身地と所属部署を取得する場合、 VLOOKUP に VLOOKUP > を入れるような形でないと取得できないのでしょうか。 数式でやるならそうなりますね。 Excelの関数には 複数の配列 をひとつにまとめる手段が 基本的にはないので。 Excel2013以降なら リレーションシップが構築できるので そっ ちで繋いでから結果を返してやればできます。もしくは Power BIを導入するか。 後はデータベースクエリ。添付画像のように全てのマスタに項 目名が入っているとして 接続文字列を SELECT 社員コード, 社員マスタ, 地方マスタ.出身地, 部マスタ.所属部署 FROM [Sheet1$A9:D12] As 社員マスタ, [Sheet1$A15:B19] As 地方マスタ, [Sheet1$A22:B25] As 部マスタ WHERE 社員マスタ.出身地 = 地方マスタ.地方コード AND 社員マスタ.所属部署 = 部マスタ.部コード AND 社員コード = ? パラメータを B2に設定

komegu66
質問者

お礼

ありがとうございます。 Excelの細かい使い方がわかっておらず、すみません。 リレーションシップ はできましたが、そこから先のやり方がわからず苦戦中です。 また、データベースクエリ もテーブルの範囲がうまく設定できませんでした。 あきらめて、VLOOKUP に VLOOKUP で対応しようかと思っています。

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.3

今晩は、回答No.の続きです。 一覧表リストのプルダウンリストはデータリボンの入力規則のリストです。 社員マスタの出身地入力を地方マスタをプルダウン入力設定 【出身地入力セルを範囲選択】⇒【データリボン】⇒【データの入力規則】 ⇒【データの入力規則】⇒【リスト】⇒【出身地リストを範囲選択】⇒【OK】

komegu66
質問者

お礼

ありがとうございます。 いただいた情報を参考にさせていただきます。

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.2

今日は コードに拘っているのは何か理由はありますか コードが無くてもリストがあれば これをプルダウンリストして選択することが出来ます 添付は 社員マスタの出身地、所属部署を参照入力したものです B4=VLOOKUP($B$2,$A$9:$D$12,2,FALSE) B5=VLOOKUP($B$2,$A$9:$D$12,3,FALSE) B6=VLOOKUP($B$2,$A$9:$D$12,4,FALSE)

komegu66
質問者

お礼

ありがとうございます。 いただいた情報を参考にさせていただきます。

komegu66
質問者

補足

chayamati さん 情報ありがとうございます。今回、質問のためにサンプルのシートを添付しましたが、実際に使用する際はマスタの値(部マスタの部署名など)が多々変更になりそうだったので、社員マスタはコードのみで管理した方がメンテナンスしやすかと思って、今回の構成にしてみました。

  • skydaddy
  • ベストアンサー率51% (388/748)
回答No.1

手元にExcelがすぐ使えないので確認していませんが、多分下記で大丈夫かと。 B5に”=VLOOKUP(VLOOKUP(B2,A9:D12,3),A13:B19,2)” B6に”=VLOOKUP(VLOOKUP(B2,A9:D12,4),A21:B24,2)” お考えの内側のVLOOKUPがそれぞれの社員マスタの値なのでそれを使って、再度VLOOKPUPという感じです。

komegu66
質問者

お礼

VLOOKUPのVLOOKUPが使えることを確認できました。 ありがとうございました。

関連するQ&A

  • エクセルvlookup関数で値を取得したいリストの行数が多すぎてエクセ

    エクセルvlookup関数で値を取得したいリストの行数が多すぎてエクセルで表示できない 単純にa列をキーにしてb列の値を取得したいですがリストの行数が65***行以上でエクセルで開くと欠落します。リストはcsvでオープンしないで値を取得することはできますか? 宜しくお願いいたします。

  • エクセルで別シートの値を取得したいです。

    エクセルで質問があります。 別シートからセル値を取得したいです。 ただ、セル番地は行番号、列番号で指定し、 行、列番号はセルに入力してある値を使いたいです。 例 Aシート(値格納シート) B1セル値=1000 -------------- Bシート(値取得シート) A列=行番号入力 B列=列番号入力 C列=Aシートの取得関数 A2セル値=1 B2セル値=2 C2セル=1000(取得値) C2セルの関数に、A2とB2の値を使って Aシートのセル値を取得したいです。 よろしくお願いします。

  • エクセル、VLOOKUP関数について

    (1)セルAの値を他シートから検索 (2)セルAが空欄なら空欄を返す (3)セルAが空欄でなければ、その検索したセルの値を返す (4)検索したセルが空欄であればBを返す =IF(ISNA(VLOOKUP(A1,他シート!$B$4:$G$501,2,0)),"",IF(VLOOKUP(A1,他シート!$B$4:$G$501,2,0)="","B",VLOOKUP(A1,前年度成績!$B$4:$G$501,2,0))) という風にしたくて、上記の式を書きましたが、(4)の検索したセルが空欄であってもBが表示されません。 どこを直せば良いか、教えてください。

  • EXCELの関数等について教えてください。

    関数の入ったセルの値を、別の未定義のセルに表示する簡単な方法はないでしょうか? 例えば、"A1"セルにVLOOKUP関数で得た"あ"という値があるとします。 その"あ"を、関数もなにも入れていない"B1"セルに表示させたいのですが、何か良い方法をおしえてください。 宜しくお願いいたします。

  • エクセルで、値が飛んでこないのは?

    エクセルで、シートからシートへ値をとばすように設定しているのに値が入力されません。例: シートAのセル1の値をシートBのセルへ飛ばすとき、Bシートのセルの数式は ”+A!A1”となりますが、A1の値が飛んできません。F2を押してENTERキーを押すと飛んできます。たくさんのシートがあるので、大変です。どうしたらいいですか?

  • Accessのテーブル構成について

    現在、Accessの勉強のため、社員名簿のデータベースを作ろうとしています。 そこで、↓のようなマスタ構成を考えています。 社員マスタ ・社員番号 ・氏名 ・所属している部コード1 ・所属している課コード1 ・所属している部コード2 ・所属している課コード2 ・所属している部コード3 ・所属している課コード3 ・所属している部コード4 ・所属している課コード4 部マスタ ・部コード 部名 課マスタ ・課コード 課名 ※各部署の兼任があるので、一人が複数部署に所属しています。 これでリレーションシップを作成する場合、 社員マスタの部コード1~4全てと、部マスタの部コードを リレーションシップでつないで、社員マスタの課コード1~4全てと、課マスタの課コードをリレーションシップでつながないといけないんでしょうか? 社員マスタの部コード1と部マスタの部コードだけつないでも、 社員マスタの部コード2~4までの部名が表示されません。

  • ExcelでのVLOOKUP関数について

    キー1を1000倍したうえで完全一致のVLOOKUP関数を使うと#N/Aエラーが発生します。 表示上は同じように見えますが内部的に異なる値となっているのでしょうか? 試しにエラー行に対して、キーとターゲットとなる当該セルを「=」でつないで確認しても「TRUE」となります。 添付画像は、 検索先としてA列に基準キーを130.168~130.192(step 0.001)で各行へ入力し、B列はA列を1000倍、C列はB列をROUND関数で整数値に丸めたものをキーとしました。 D列にVLOOKUPで参照する値を入力し、E列以降で以下の異なるパターンで値を参照しています。 (1)【E・F列】 ・E列に整数値をキーとして130168~130192(step 1)で入力。 ・E列をキーとしてB~D列のVLOOKUP関数としています。   『=VLOOKUP(E3,B:D,3,FALSE)』 (2)【G・H列】 ・G列にE列/100をキーとして計算。 ・G列をキーとしてA~D列のVLOOKUP関数としています。   『=VLOOKUP(G3,A:D,4,FALSE)』 (3)【I列】 ・E列をキーとしてC~D列のVLOOKUP関数としています。   『=VLOOKUP(E3,C:D,2,FALSE)』 シートを複製し、キーの入力範囲を0.001~0.025(E列は1~25)にした場合はエラーがでませんでした。 その他の確認としてはTEXT、JIS、ASCなどを組み合わせて文字列としたキー同士のVLOOKUPではエラーにならず値を参照できています。

  • エクセルのVLOOKUP関数について。

    エクセルのVLOOKUP関数について。 教えて頂きたいです。 sheet2に商品マスターがあり、タイトルとしてセルA1に品目コード、B1に品名、C1に会社名、D1に県名、E1に個数と入力してあります。 sheet2のA2には111、B2にはいちご、C2にランド、D2に埼玉県D3に山梨県、E2に100個、E3に200個、E4に300個 と入力してあります。 sheet1のA2に111と入力し、B2にいちご、C2にランド、D2に埼玉県、D3に山梨県、E2に100個、E3に200個、E4に300個と表示させることは可能でしょうか? 県名に対して2個、個数を3種類持っているのです。出来ればVLOOKUP関数でお願いしたいのですが、他の関数でも構いません。 自分で色々検索し、下の行のセルの値を返す等の記事を見たのですが、いまいち理解できずにいます>< 尚、sheet2の商品マスターは作り直せず、手をつけることも出来ません。(私には権限がない為) sheet2の商品マスターのデータは膨大(約1400行)である為。 222(品目コード)、ぶどう(品名)、遊園地(会社名)、東京(県名)、50個(個数)、 333(品目コード)、みかん(品名)、ドーム(会社名)、千葉(県名)、100個(個数)、200個(個数) と、ぶどうは個数が1種類 みかんは個数が2種類 など、ランダムに商品マスターが作成してあります。 説明が下手ですみません><

  • excelのvlookup関数で値ではなくセルの位置を返せますか?

    どなたかお詳しいかた教えていただけますでしょうか? excelのvlookup関数は通常該当するセルの値を返すと思うのですが、そのセルの位置(A4とか)を返す方法はありますか? 例えば、以下のようなEXCELのシートがあったとします。 =VLOOKUP("いちご",A1:B4,2,0)とすると、”200円”と表示されると思うのですが、このセルの位置(この場合は"B4")を求める方法ははありますか?   A  B 1りんご 100円 2みかん  80円 3バナナ 150円 4いちご 200円 お詳しい方よろしくお願い致します。 m(__)m

  • 関数と関数の値を一つのセルに表示する方法

    二つの関数の値を一つのセルに表示する方法を教えてください。 例えば、=VLOOKUP(A1,A:C,2,FALSE)+"/"+=VLOOKUPVLOOKUP(B1,A:C,3,FALSE) 私の中ではこんなイメージです。 これで、引っ張ってきた値を一つのセルに「○ / ×」みたいに表示したいのですが、誰か知りませんか

専門家に質問してみよう