【问题标题】:Using VLookup macro to return a text value from a set range of numbers使用 VLookup 宏从一组数字中返回一个文本值
【发布时间】:2017-08-21 21:59:35
【问题描述】:

我已在宏中转换了 Vlookup 公式,以避免在单元格中填写公式内容。以下代码仅适用于具有固定编号的表格:

Sub NumberVLookup()

Dim num As Long
num = 4

Set shData = Sheet2
Dim sRes As Variant
sRes = Application.VLookup( _
              num, shData.Range("A1:B6"), 2, True)

Debug.Print sRes
Sheet2.Range("C4") = sRes
End Sub

相反,我想创建一个代码,让我的方式更加灵活 它使用 VLookup 函数返回其文本值。 例如,我希望所有数字都包含在以下范围内: 0-9 返回文本值 红色 10-15 返回文本值 黄色 16-20 返回文本值 绿色

我所指的表格如下:

     A          B    
 1  0-9        Red 
 2  10-15     Yellow   
 3  16-20     Green  

例如,如果值为 4,则 VLookup 宏将返回文本值“Red”。 我希望这个问题足够清楚。非常感谢

【问题讨论】:

  • 如果您在 A 列中使用值 0、10 和 15,您的 vlookup 将自动填充缺失的部分。
  • @nutsch - 哦!这很聪明,我以前没有想到过。我总是做一个(现在看起来没有必要的)范围表。

标签: vba excel


【解决方案1】:

您可以使用非精确匹配的范围。

将数据设置为三列,左侧的范围按升序排列。

然后使用

=VLOOKUP(A7,$A$2:$C$4,3,TRUE)

假设你的数据是这样的:

所以对于 VBA(根据需要进行调整):

 Application.VLookup(num, shData.Range("$A$2:$C$4"), 3, True)

编辑:或者您可以按照@nutsch 的好建议!

【讨论】:

    【解决方案2】:
     Sub NumberVLookup()
    
     Dim num As Long
     num = 16
    
    
     Dim sRes As Variant
     sRes = Application.VLookup( _
              num, Sheet2.Range("A56:B58"), 2, True)
    
    Debug.Print sRes
    Sheet2.Range("J15") = sRes
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-24
      • 1970-01-01
      • 2011-02-10
      • 2013-04-13
      • 2012-08-21
      • 1970-01-01
      • 2015-01-23
      相关资源
      最近更新 更多