如何通过引用列并在返回行值中找到EXCEL表中最接近的值

时间:2016-04-16 04:48:58

标签: excel excel-formula excel-2010 excel-2007

我有一张下表,我想在输入我的号码后找到最接近的值。我的答案必须通过引用下面的两列值来返回行值经验年数

a)我的第1列值= MYS_02

b)我的第2列值=最低工资

以下是我的表格: enter image description here

这是我的公式。

  

= INDEX(A3:A15,SUMPRODUCT(MAX(($ B $ 2:$ķ$ 2及$ B $ 1:$ķ$ 1和; $ B $ 3:$ķ$ 15 = $ A $ 18安培; $ A $ 20安培; $ B $ 22)*(ROW($ B $ 3:$ $ķ15)))) - ROW($ B $ 3)1)

如果我输入表中的值,它会起作用。但是,当我输入的值少于或多于表中的值时,它会显示错误

enter image description here

当我在表格中插入有重复的值时,它还会显示错误的 多年经验 。我希望 多年经验 行显示最接近的值。

正如您在输入 1400 时所看到的那样,它会显示 12

enter image description here

它假设显示 8 而不是 12

所以我的问题是如何找到最接近的值。 我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

为了缩短它,你可以使用这个公式:

function sendRequest(){
  navigator.serviceWorker.ready
    .then(function(registration) {
      registration.pushManager.getSubscription()
        .then(function (subscription) {        
          curlCommand(subscription);

          var root = 'http://jsonplaceholder.typicode.com/posts';

          var title="Push Notification";
          $(document).ready(function () {
            $.ajax({
              url: root,  
              beforeSend: function(xhr) { xhr.setRequestHeader("Content-Type","application/json");},      
              type: 'POST',
              contentType: 'application/json',
              crossDomain: true,
              dataType: 'json',
              processData: false,
              data: JSON.stringify(subscription),
              success: function (data) {      
                reg.showNotification(title, {
                  body: 'Hello',
                  icon: 'images/icon.png',
                  tag: 'my-tag'    
                });
                console.log(data);  
              },
              error: function(){
                alert("Cannot get data");
              }
            });
          });
        });
    });
}
  

这是一个数组公式,必须使用Ctrl + Shift + Enter

确认

它检查整个表以获得最接近的值(=INDEX(A1:A15,MIN(IF(ABS(B3:K15-B22)=MIN(ABS(B3:K15-B22)),ROW(3:15)))) ),然后返回具有相同差异(MIN(ABS(B3:K15-B22)))的每一行(ROW(3:15))。然后它只选择最小的行值(ABS(B3:K15-B22)=)并将其用作索引。

它始终适用于低位行数!如果B13和H4相同(并且最低),它将选择第4行(并返回1)

修改

正确的公式是:

MIN(IF(...))
  

这是一个数组公式,必须使用Ctrl + Shift + Enter

确认

与第一个公式相同,但会删除与第1行和第2行(=INDEX(A1:A15,MIN(IF(ABS(IF(B1:K1=A20,IF(B2:K2=A18,B3:K15-B22)))=MIN(ABS(IF(B1:K1=A20,IF(B2:K2=A18,B3:K15-B22)))),ROW(3:15))))

的条件不匹配的所有列

<强> EDIT2

基于评论:如果要排除小于搜索值的值,请使用以下公式:

IF(B1:K1=A20,IF(B2:K2=A18,B3:K15))
  

这是一个数组公式,必须使用Ctrl + Shift + Enter

确认

答案 1 :(得分:1)

对于小于或等于建议工资的最高行,将此标准公式放在B23中。

=INDEX(A3:A15, AGGREGATE(14, 6, ROW(1:13)/(B22>=INDEX(B3:J15, , MATCH(A20, B1:J1, 0)+(LEFT(A18, 3)="max"))), 1))

如果你想要基于的实际工资,那么这个标准公式在C22。

=INDEX($B$3:$K$15, AGGREGATE(14, 6, ROW(1:13)/(B22>=INDEX(B3:J15, , MATCH(A20, B1:J1, 0)+(LEFT(A18, 3)="max"))), 1), MATCH(A20, B1:K1, 0)+(LEFT(A18, 3)="max"))

aggregate_lowest_greater_then

替代绝对最接近

对于B22与相应薪资栏之间的最小绝对差额,B23的经验年数为,

=INDEX(A3:A15, AGGREGATE(15, 6, ROW(1:13)/(ABS(B22-INDEX(B3:J15, , MATCH(A20, B1:J1, 0)+(LEFT(A18, 3)="max")))=AGGREGATE(15, 6, ABS(INDEX(B3:K15, 0, MATCH(A20, B1:K1, 0)+(LEFT(A18, 3)="max"))-B22), 1)), 1))

将使用

检索匹配的表薪水
=INDEX($B$3:$K$15, AGGREGATE(15, 6, ROW(1:13)/(ABS(B22-INDEX(B3:J15, , MATCH(A20, B1:J1, 0)+(LEFT(A18, 3)="max")))=AGGREGATE(15, 6, ABS(INDEX(B3:K15, 0, MATCH(A20, B1:K1, 0)+(LEFT(A18, 3)="max"))-B22), 1)), 1), MATCH(A20, B1:K1, 0)+(LEFT(A18, 3)="max"))