Excel の VLOOKUP と同じ機能はありますか?
    조회 수: 2 (최근 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!