- 締切済み
Excel の関数
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- nishi6
- ベストアンサー率67% (869/1280)
前回答で「センシティブな処理にはお勧めできません。仕事ではほとんど使いませんでした。」と書きましたが、もう少し詳しく書かせてもらいます。 書籍やネットにもあまり触れられていないかと思います。実務で遭遇したVlookUp関数の気をつける点です。 ●関数(VlookUp関数)の欠点 1.当然ですが、関数を登録しないと計算してくれない。 2.処理単位で、関数の設定するセルを追加したり削除(消去)する必要が出てくる 3.VlookUp関数の場合、検索の型によっては、検索範囲にデータを追加すると並べ替えが必要 4.VlookUp関数の場合、検索範囲にデータを追加・削除すると算式の変更が必要 ※データの追加・削除に対応するには、範囲名を使い、可変の範囲を設定したりします ●オブジェクトブラウザでVlookUp関数を調べます 1.検索値:Arg1の定義には、「検索する値を指定します」とあります。「値」です 2.範囲:Arg3の定義には、「英字の大文字と小文字は区別されません」とあります もう少し詳しく書くと「半角英字のみで作られた文字は区別されません。全角英字混在も区別されません」 3.範囲の左側列は「Clean関数」や「Trim関数」を使って、仕様に合った内容にするように書かれています 4.日付型の検索については注意するように書かれています 5.「検索値と一致する値が範囲の左端に複数ある場合は、最初に検索された値が使用されます」とあります これがVlookUp関数の使用を注意している一番の理由です。添付図で説明します ●検索値の内容(添付図で説明) 1.「データ1~3」は見た目「田中 幸子」ですが、フリガナ情報は3つとも違います VlookUp関数の結果は、いずれも最初のデータを検出しています 2.「データ4、5」も上と同じ意味です。苗字が違いますが最初のデータを抽出しています 2.「データ6、7」半角英数字のみですが。最初のデータを抽出しています 4.「データ8~11」は全角英のみ、全角半角混合の場合です。これも最初のデータを検出しています 5.「12」は「3」と同じです。VlookUp関数は最初のデータ抽出しています。二重検出です 〇フィルターオプションの結果(添付図右) 1.添付図では、フリガナ情報や英字の大文字小文字の違いも考慮されています 2.二重データも表示されていません 作った後、何か問題が発生した時、「VlookUp関数の仕様だ」と反論できればいいんですが、「知っててなぜ対応していないんだ」と、傷口が大きくなります。知らなかったことがバレてしまいます この質問の場合、ここまで神経質になる必要はないかもしれませんが、「VlookUp関数を使っておしまい」とするよりも、このような知識を持って使っていくべきだと思います。「ここまで考えてるんだ」、「ユーザーに優しい作りだね」などと評価が上がることもあります オブジェクトブラウザは情報の宝庫です。書籍やネットの情報の元だと思っています。最初に買ったVBAの本はオブジェクトブラウザの印刷でした。是非有効活用してください
- nishi6
- ベストアンサー率67% (869/1280)
この質問の場合、まず、関数を使うべきか、使えるかを検討すべきでしょう。 1.関数を使う場合、データ数によって登録するセル行数が変わってきます。 2.(1)表の名前は(2)表に必ず含まれているか。 3.(1)表に重複がないか。あったらどうするか。 4.(1)表に(2)表に含まれない名前が有ったらどうするか 5.3、4の処理で空白行(エラー等の処理結果)ができたらどうするか 質問のような要件で関数を使った場合、後から色々な変更が発生し、見るも無残な関数ができ上ることが良くありました。 この質問の場合、「データタブ」→「並べ替えとフィルター」グループ→「詳細設定」を使うべきでしょう。 Excel2010での説明です。 【対応1】 「データタブ」→「並べ替えとフィルター」→「詳細設定」の「フィルターオプションの設定」ダイアログで、 「指定した範囲」を選択 「リスト範囲」に「$F$2:$H$17」を指定((2)表) 「検索条件範囲」に「$C$2:$C$10」を指定((1)表) 「抽出条件」に「$K$2:$M$2」を指定して「OK」を押します。((3)表の行見出し) この出力では、(1)表のデータが(2)表の順で表示されます。次の指定なら表(1)の順で出力できます。 【対応2】 (1)表の名前を(3)表の名前にコピーしておきます。 「データタブ」→「並べ替えとフィルター」→「詳細設定」の「フィルターオプションの設定」ダイアログで、 「指定した範囲」を選択 「リスト範囲」に「$F$2:$H$17」を指定((2)表) 「検索条件範囲」に「$K$2:$K$10」を指定((3)表の名前列) 「抽出条件」に「$L$2:$M$2」を指定して「OK」を押します。((3)表の年齢、住所列の見出し) この出力では、(1)表のデータの順で抽出されます。 (1)表のデータ数によって算式を変える必要がなく、二重データは空白行になります。 上記1~5を無視すれば、関数で書くと、 名前:K3=VLOOKUP($C3,$F$3:$H$17,1,0) 年齢:L3=VLOOKUP($C3,$F$3:$H$17,2,0) 住所:M3=VLOOKUP($C3,$F$3:$H$17,3,0) でしょうか。下方向にコピーします。 個人的には、色々問題があり、センシティブな処理にはお勧めできません。仕事ではほとんど使いませんでした。 よろしく検討下さい。
- imogasi
- ベストアンサー率27% (4737/17069)
Cの名前でFGHの表の名前F列を検索して、見つけて、そのG,HのデータをD列、E列に持ってくれば仕舞いで、それにはVLOOKUP関数が使える。VLOOKUP関数はエクセル関数では最有名な関数で(1冊の本も出ている)、この関数は、知っているだろう。質問に出るということは、エクセル関数の勉強を一通りやってないのでは。 WEBではVLOOKUP関数の記事がたくさんある。 Googleででも「VLOOKUP関数」照会すべきだ。
- Chiquilin
- ベストアンサー率30% (94/306)
関数を計算以外の目的で使いたがる人が多いですが 用意され ている機能を有効に使った方がいいと思います。 下記の接続を作って 外部データの取り込み機能を使えば SELECT (1).名前, (2).年齢, (2).住所 FROM (SELECT 名前 FROM [Sheet1$C2:C]) As (1) LEFT JOIN (SELECT 名前, 年齢, 住所 FROM [Sheet1$F2:H]) As (2) ON (1).名前 = (2).名前 WHERE (1).名前 Is Not Null で済みます。
- kkkkkm
- ベストアンサー率66% (1719/2589)
- SI299792
- ベストアンサー率47% (772/1616)
C列を無くし、直接K列に名前を入れてもいいと思うのですが。 K3 =C3&"" L3 =VLOOKUP(K3,F:H,2,FALSE) M3 =VLOOKUP(K3,F:H,3,FALSE) 名前がない場合、エラーになります。 =IFERROR(数式,"") の形にすれば、エラーは空白になります。