Condição do Excel comparando duas células, em seguida, buscando dados

1

Estou reaprendendo o Microsoft Excel depois de me mudar para o Numbers há alguns anos. Tenho uma ideia em mente que gostaria de colocar em prática, mas tenho dificuldade em tentar fazer. Não tenho certeza se isso é possível, mas deve ser se me lembro corretamente.

Suponha que eu tenha uma lista de origens e destino, cada um deles tem sua própria tarifa.

CGK-SIN = $0.25
SIN-CGK = $0.50
CGK-KUL = $1.10
KUL-CGK = $1.50
KUL-SIN = $0.75
SIN-KUL = $0.85

Acima é um exemplo da tabela de tarifas. Eu sei que eu posso preparar isso em uma folha separada e se referir a isso, no entanto estou tendo problemas para tentar definir as condições para as duas células (Origem, Destino) para buscar as taxas.

EuqueroqueocampotarifáriocompareosdadosdocampoOrigemeDestino.Tipo:

iforigin="CGK"
destination = "SIN"

then
tariff = "$0.25"

Elseif...

E assim por diante e assim por diante. Espero ter empurrado o que estou tentando alcançar com clareza. Desculpas se a codificação está errada, não codifiquei em anos! (Pensei em VB e C ++ como um garoto, não extensivamente embora)

Qualquer conselho sobre isso seria muito apreciado.

    
por Excl 14.12.2015 / 07:46

1 resposta

1

Ter uma tabela como esta:

Em H1 seria:

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

Que pode simplesmente ser copiado ...

não há necessidade de VBA ... ... mas se você quiser que isso seja feito via VBA para obter um UDF de duas formas de fazê-lo.

# 1 como folha simbiótica / 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 completo

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 precisa de uma tabela como na imagem (na planilha com o codinome Sheet1, que pode ser alterado)
Nem # 1 nem # 2 diferenciam maiúsculas de minúsculas, então =getTarif("siN","kUl") ainda produzirá 0,85.

    
por 14.12.2015 / 08:02