Excel の VLOOKUP と同じ機能はありますか?

20 ビュー (過去 30 日間)
MathWorks Support Team
MathWorks Support Team 2012 年 12 月 13 日
Excel の VLOOKUP 関数と同じ機能があるか教えてください。
以下のような行列が定義されていると仮定します。
mydata=[datenum('1/31/2008') 3; datenum('2/28/2008') 5];
この配列の 1列目の中で、指定した値と一致する値を検索し、該当した値が含まれる行のデータを取り出す、という処理を考えています。一致する値がない場合は、最も近い(実際の値よりも大きい)値を検索します。
例えば、上記の行列において、
myMatch= fcm(mydata,datenum('2/7/2008'))
のような関数を実行すると、出力は以下のような結果になることを期待しています。
myData=
3

採用された回答

MathWorks Support Team
MathWorks Support Team 2012 年 12 月 13 日
Excel の VLOOKUP 関数と同じ機能は、MATLAB 8.0(R2012b) にはありません。
ただし、プログラミングにて意図する処理を実現することが可能です。
以下のプログラムは、一例となりますが、データの 1 列目から最も近い値を検索し、同じなお、検索する値が 1 列目のデータの最小値よりも小さい場合、エラーメッセージを表示します。
function mData = fcm(data, lookup_value)
% fcm: 最も近い値の検索
% mData = fcn(mydata, lookup_value)
dist = abs(data(:,1)-lookup_value); % 検索する値との距離を計算
[min_val, min_loc] = min(dist); % 最小値とそのインデックスを取得
if data(min_loc,1) <= lookup_value
mData = data(min_loc,2);
else % 検索する値が 1 列目のデータの最小値よりも小さい場合
try
mData = data(min_loc-1,2);
catch ME
if strcmp(ME.identifier,'MATLAB:badsubscript')
error('検索する値は、1列目の値の最小値よりも大きい値を指定してください')
end
mData=NaN;
end
end
実行例:
>> myMatch= fcm(mydata,datenum('2/7/2008'))
myMatch =
3
>> myMatch= fcm(mydata,datenum('1/1/2008'))
エラー fcm (line 15)
検索する値は、1列目の値の最小値よりも大きい値を指定してください

その他の回答 (0 件)

カテゴリ

Help Center および File Exchange大きなファイルとビッグ データ についてさらに検索

タグ

タグが未入力です。

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!