Ранг (ifs) в Excel без Sumproduct | VBA против функций

#vba #excel #excel-formula #excel-2013

#vba #excel #excel-формула #excel-2013

Вопрос:

У меня проблема, когда я пытаюсь выполнять ранжирование и ранжирование, в то время как оба возвращают уникальные ранги вместо дубликатов, и все это без сортировки моих данных. Я приведу пример того, что я сейчас получаю ниже. Я бы хотел решить эту проблему в любом случае, будь то VBA или Formula. Однако у меня есть много таблиц данных, в которых в настоящее время используются Sumproducts, и в настоящее время я пытаюсь избежать использования этой функции, поскольку она чрезвычайно обременительна.

 Category   |  Total Value   |  Rank    |  Unique ID
lkj        |  494.1         |  2       |  lkj2
asdf       |  679.6         |  1       |  asdf1
lkj        |  494.1         |  2       |  lkj2
tdd        |  110.5         |  2       |  tdd2
tdd        |  120.5         |  1       |  tdd1
lkj        |  800.5         |  1       |  lkj1
  

     A             B                C          D
1   Category   |  Total Value   |  Rank    |  Unique ID
2   FX         |  494.1         |  2       |  FX2
3   FX         |  679.6         |  1       |  FX1
4   FX         |  494.1         |  2       |  FX2
5   FX         |  110.5         |  4       |  FX4
  

Итак, в первом примере я пытаюсь выполнить ранжирование. Столбец total value ссылается на таблицу необработанных данных. Я знаю, что могу просто объединить ранг и общее значение в один столбец, но, например, я подумал, что было бы проще объяснить, что я имею в виду, чтобы выложить все.

2-я проблема заключается в том, что в моей 2-й таблице у меня возникают проблемы, когда иногда общие значения будут точно такими же, и мне просто нужно, чтобы один из FX был рангом 3. То, что я сейчас делаю, — это возвращаюсь и вручную настраиваю это, и с большим количеством таблиц данных, где я должен делать ранги, вы можете себе представить, что это может быть очень трудоемким по времени. Совсем не сложно, просто много ручной работы, которую, я чувствую, можно было бы автоматизировать.

Я ни за что на свете не могу придумать, как решить эту проблему ни в функциях, ни в VBA. Единственное, о чем я могу думать, это ранжировать все, а затем сортировать, как показано в примере ниже.

     A             B                C          D
1   Category   |  Total Value   |  Rank    |  Unique ID
2   FX         |  679.6         |  1       |  FX1
3   FX         |  494.1         |  2       |  FX2
4   FX         |  494.1         |  2       |  FX2     
5   FX         |  110.5         |  4       |  FX4
  

Затем найдите формулу или решение vba, где оно смотрит на D2 и говорит, что если вышеуказанная ячейка равна D2, то дайте мне C1 1, в противном случае дайте мне C1. Это будет иметь значение, как только оно зациклится и перейдет к D4, поскольку D3 равно D4. Это решение кажется мне чрезвычайно архаичным, но если нет лучшего способа сделать это за пределами этого, я просто запишу макрос.

Любые идеи приветствуются.

Спасибо,

Ответ №1:

Если вы ищете способ получить уникальные значения из ранга, это сделает следующая функция:

 =RANK(B2,$B$2:$B$10) COUNTIF($B$2:B2,B2)-1
  

Поскольку countif подсчитывает значения только в строках над ним, первый, который он найдет с заданным значением, будет иметь более высокий ранг.

Источник

Я не совсем понимаю, что вы говорите о ранге, если это так, я не собираюсь пытаться ответить на это.

Комментарии:

1. Привет, Gtwebb, спасибо за быстрый ответ! К сожалению, этот ответ не помогает, хотя я уже пробовал. одним из решений, которые я нашел, было ваше предложение с небольшим изменением countif, но я тоже попробовал его по-своему, = РАНГ (X7, $ X $ 7: $ X $ 533) COUNTIF(X $ 7: X7, X7) -1 . В конечном итоге проблема, с которой я столкнулся, заключалась в том, что у меня был ранг 103, и был дубликат для ранга 102, но, к сожалению, с помощью этой формулы дубликат ранга 102 был устранен, но теперь у меня 2 ранга 103. Я надеюсь, что это имеет смысл.

2. Ха! Итак, я узнал, почему это не сработало. Похоже, источнику данных просто нужно было округлить числа. Что касается ранга Ifs, я просто имел в виду, что у меня есть связанные теги, которые мне нужно ранжировать. В примере номер один, который я облажался, должно быть 2 lkj и ни одного jk. Я полностью обновил первый пример, и теперь он должен быть более тщательным. Извините за путаницу, я на самом деле дома болен и хотел кое-что сделать.

3. Эй, Pnuts, ты вроде прав. Это была проблема, когда одно из значений считывалось как 15,6, а другое — как . Однако, если вы отформатировали число так, чтобы оно включало достаточное количество нулей справа, я думаю, в конечном итоге было бы что-то, что отличало бы два значения 15,6. Я не стал тратить время на это, так как после 10 нулей справа я понял, что Excel просто знал, и округлил числа. После этого все работало нормально. Есть идеи о том, как ранжировать на основе нескольких критериев?