![从具有多个值的列中提取信息](https://linux22.com/image/1615036/%E4%BB%8E%E5%85%B7%E6%9C%89%E5%A4%9A%E4%B8%AA%E5%80%BC%E7%9A%84%E5%88%97%E4%B8%AD%E6%8F%90%E5%8F%96%E4%BF%A1%E6%81%AF.png)
我在 Excel 中遇到了一个难题,很难解决。我的问题是,我试图编写一个公式,以便将一个数字(比如说 3040)连接到包含信息“3000-3091,3093-3189,3192”的单元格。
如您所见,3040 介于 3000-3091 之间,但我发现没有公式可以真正连接这两列(给出“True”,表示数字 3040 在该单元格中)。你们对我如何解决这个问题有什么见解吗?
我不太了解 VBA,但你们认为是否可以编写一个宏来读取值为“3000-3091,3093-3189,3192”的列?
使用真实值作为 Vlookup 函数中的最后一个参数不起作用 :/
提前感谢您的回答!
答案1
Public Function DoesValueInRange(val As Long, ranges As String) As Boolean
Dim tmp, temp
tmp = Split(ranges, ",")
For Each temp In tmp
If InStr(temp, "-") Then
If val >= CLng(Split(temp, "-")(0)) And val <= CLng(Split(temp, "-")(1)) Then
DoesValueInRange = True
Exit Function
End If
Else
If val = CLng(temp) Then
DoesValueInRange = True
Exit Function
End If
End If
Next
End Function
用法:
- 打开 VBA 编辑器 (Alt-F11)
- 创建新的通用模块(插入-模块)
- 将代码插入到新模块中
- 关闭 VBA 编辑器
- 在工作表上选择一些单元格
- 按fx
- 选择“用户定义函数”类别
- 选择
DoesValueInRange
功能 在参数字段中
9.1. For
Val
- 要测试的值或包含要测试的值的单元格地址(例如,如果 A1 单元格值为 3040,则为值3040
,或单元格地址)$A$1
9.2. For
Ranges
- 包含范围列表的字符串或包含范围列表的单元格地址(例如,或如果 B1 单元格值为“3000-3091,3093-3189,3192”则为3000-3091,3093-3189,3192
单元格地址)$B$1
- 按 OK。该函数将检查该值是否在某个范围内(或等于某个单个值)。
请注意-该函数不执行其参数正确性检查。
PS. 单元格地址不必是绝对的。