1

Я переучиваю Microsoft Excel после перехода на Numbers пару лет назад. У меня есть идея, которую я хотел бы воплотить в жизнь, но довольно трудно пытаться это сделать. Я не уверен, возможно ли это, но так и должно быть, если я правильно помню.

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

CGK-SIN = $ 0,25
SIN-CGK = $ 0,50
CGK-KUL = 1,10 $
KUL-CGK = $ 1,50
KUL-SIN = 0,75 $
СИН-КУЛ = 0,85 $

Выше приведен пример таблицы тарифов. Я знаю, что могу подготовить это на отдельном листе и сослаться на это, однако у меня возникают проблемы при попытке установить условие для двух ячеек (Источник, Место назначения) для получения ставок.

Визуальное отображение фактической таблицы Excel.

Я хочу, чтобы в поле тарифа сравнивались данные полей происхождения и назначения. Вроде как:

if
origin = "CGK"
destination = "SIN"

then
tariff = "$0.25"

Elseif...

И так далее. Я надеюсь, что я столкнулся с тем, что я пытаюсь достичь ясно. Извиняюсь, если кодирование неправильное, я не кодировал в течение многих лет! (Я думал, VB и C++, как ребенок, хотя и не очень)

Любой совет по этому вопросу будет принята с благодарностью.

1 ответ1

1

Имея такой стол:

В H1 будет:

=INDEX($B$2:$D$4,MATCH(G1,$A$2:$A$4,0),MATCH(F1,$B$1:$D$1,0))

Который можно просто скопировать вниз ...

нет необходимости в VBA ... ... но если вы хотите, чтобы это было сделано через VBA, чтобы получить UDF, есть 2 способа сделать это.

№ 1 в качестве Симбиотического листа /VBA

Public Function getTarif(source, dest) As Double
  With Sheet1
    source = Application.Match(source, .Range("B1:D1"), 0)
    dest = Application.Match(dest, .Range("B1:D1"), 0)
    If IsNumeric(source) And IsNumeric(dest) Then getTarif = .Cells(source + 1, dest + 1).Value
  End With
End Function

# 2 полный VBA

Public Function getTarif(source, dest) As Double
  Dim a, b
  a = Array("CGK", "SIN", "KUL")
  b = Array(Array(0, 0.5, 1.5), _
            Array(0.25, 0, 0.75), _
            Array(1.1, 0.85, 0))
  source = Application.Match(source, a, 0) - 1
  dest = Application.Match(dest, a, 0) - 1
  If IsNumeric(source) And IsNumeric(dest) Then getTarif = b(source)(dest)
End Function

# 1 нужна таблица, как на картинке (на листе с кодовым названием Sheet1, которую можно изменить)
Ни # 1, ни # 2 не чувствительны к регистру, поэтому =getTarif("siN","kUl") будет по-прежнему выводить 0,85.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .