Excel 条件比较两个单元格然后获取数据

Excel 条件比较两个单元格然后获取数据

几年前我转用 Numbers 后,现在又开始学习 Microsoft Excel。我有一个想法,想付诸实践,但做起来却相当困难。我不确定这是否可行,但如果我没记错的话,应该是可以的。

假设我有一份出发地和目的地的清单,每个出发地和目的地都有自己的关税。

CGK-SIN = 0.25 美元
SIN-CGK = 0.50 美元
CGK-KUL = 1.10 美元
KUL-CGK = 1.50 美元
KUL-SIN = 0.75 美元
SIN-KUL = 0.85 美元

以上是关税表的示例。我知道我可以在单独的表格中准备此表格并参考此表格,但是我在尝试为两个单元格(出发地、目的地)设置条件以获取费率时遇到了麻烦。

实际 Excel 表的视觉描述。

我希望关税字段能够比较原产地和目的地字段的数据。有点像:

if
origin = "CGK"
destination = "SIN"

then
tariff = "$0.25"

Elseif...

等等等等。我希望我已经清楚地表达了我想要实现的目标。如果代码有误,请见谅,我已经很多年没有写代码了!(小时候自己思考过 VB 和 C++,但不是很深入)

任何有关此事的建议都将不胜感激。

答案1

有这样的一张表:
在此处输入图片描述

在 H1 中将是:

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

可以简单地复制下来...

不需要 VBA......但是如果您希望通过 VBA 来获取 UDF,则有两种方法可以做到。

#1 作为 Symbiotic sheet/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。

相关内容