Excel の VLOOKUP と同じ機能はありますか?
2 views (last 30 days)
Show older comments
Excel の VLOOKUP 関数と同じ機能があるか教えてください。
以下のような行列が定義されていると仮定します。
mydata=[datenum('1/31/2008') 3; datenum('2/28/2008') 5];
この配列の 1列目の中で、指定した値と一致する値を検索し、該当した値が含まれる行のデータを取り出す、という処理を考えています。一致する値がない場合は、最も近い(実際の値よりも大きい)値を検索します。
例えば、上記の行列において、
myMatch= fcm(mydata,datenum('2/7/2008'))
のような関数を実行すると、出力は以下のような結果になることを期待しています。
myData=
3
Accepted Answer
MathWorks Support Team
on 13 Dec 2012
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 Comments
More Answers (0)
See Also
Categories
Find more on 大きなファイルとビッグ データ in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!