Excel の VLOOKUP と同じ機能はありますか?
20 ビュー (過去 30 日間)
古いコメントを表示
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
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 件のコメント
その他の回答 (0 件)
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!