【问题标题】:Match Function in Specific Column Excel VBA特定列Excel VBA中的匹配函数
【发布时间】:2015-06-16 10:15:27
【问题描述】:

我正在尝试在 VBA 中为 Excel 2011 编写一个程序,该程序可以在列(由另一个变量确定的列)中搜索数字 1,以便它知道从哪里开始迭代。

假设列号由colnumvar 给出。我能想到的唯一方法是 Match 函数,这导致我写了以下内容:

Dim rowvar As Integer
rowvar = WorksheetFunction.Match(1,Range(Cells(1,colnumvar),Cells(1000,colnumvar)),0) 

然而,这给了我一个错误。玩了一会儿之后,我意识到它一定不能接受Cells([row],[col])的做法,而是想要Range("A1:A100")这样的东西。不幸的是,我不能那样做,因为程序正在确定要查看的列。任何帮助弄清楚如何克服这一点将不胜感激!

【问题讨论】:

  • 运行代码时colnumvar 的值是多少?
  • 它是一个值变化的整数......它总是1、3、5、7、9、11、13或15。关键是代码应该是健壮的,所以我不能只告诉它该做什么列,如果这有意义的话哈哈:P
  • 尝试将 .address 放在您的范围和单元格之后,以确保您提供的是匹配函数地址而不是值
  • 我刚刚尝试过,它告诉我以下内容存在语法错误:BorradorVar = WorksheetFunction.Match(1, Sheets("Usuarios").Range(Cells(1, ColumnaNumVar, Cells(1000, ColumnaNumVar)).Address, 0)ColumnaNumVar 是我上面写的colnumvar
  • 你不认为 1 找不到因此你得到一个错误吗? Range (cells (),cells ()) 是正确的语法。

标签: vba excel match worksheet-function


【解决方案1】:

Range.Find 为您提供更好的服务。

Dim rngtrg As Range, rngsrc As Range
Dim ws As Worksheet
Set ws = ActiveSheet
Set rngsrc = ws.Range(ws.Cells(1,colnumvar),ws.Cells(1000,colnumvar))
Set rngtrg = rngsrc.Find(1,...)
rowvar = rngtrg.Row

【讨论】:

  • 谢谢 :D 这很好用,但我不得不将 Dim ws as Sheet 更改为 Dim ws As Worksheet,并且我在第 5 行中删除了 ...。但除了那些琐碎的修饰之外,这段代码太棒了,再次感谢!
  • @mataxu - 我在没有 Excel 测试的情况下编写了代码。已修复 Sheet -> Worksheet。参数... 并不是要逐字复制,而是要替换为适合您的任何内容,最终什么都没有(请参阅链接文档)。
  • 哦,有道理!再次感谢:D 它完全符合我的要求
【解决方案2】:

这个简单的功能可以检索你找到的位置


Function rowvar(ByRef c As Integer) As Integer
    Dim keySrc As Integer
    keySrc = 22 'wath you want to find
    rowvar = WorksheetFunction.Match(keySrc, Range(Cells(1, c), Cells(1000, c)), 0)
End Function

与 rowvar(x) 一起使用

【讨论】:

    猜你喜欢
    • 2018-10-20
    • 1970-01-01
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 2014-12-10
    • 1970-01-01
    相关资源
    最近更新 更多