【问题标题】:How to find and use the row number of a specific value using an Excel macro如何使用 Excel 宏查找和使用特定值的行号
【发布时间】:2017-04-12 18:37:18
【问题描述】:

我知道这个问题已经在这里的几个地方得到解决,但到目前为止都没有解决我的问题,我想不出还有什么要搜索的。

具体来说,在 Excel 宏中,我需要在特定工作表上查找具有与变量匹配的值的单元格的行号。然后我需要使用该行号对该行中的另一个单元格执行操作。我要查找的值将在 C 列中,然后操作将在 A 列中执行。

我已经尝试了这些解决方案,但还没有运气:

How to find the row number of a specific value in Excel using vbscript

Assigning the value of a worksheet cell to a constant

我尝试将变量值作为占位符粘贴到 B1 中,但我找不到在工作表上其他位置找到匹配值的方法(只会有另一个)。我试过了:

Public Const SKUVALUE As String = "$B$1"

但当然会返回带引号的字符串,而不是 B1 单元格的值。

如果这有助于我解释我的项目的大局,我会很乐意这样做,但这有点复杂。简而言之,我试图根据分配给每张纸上特定行的数值 (SKU) 将内容从一张纸带到另一张纸。由于在第一张纸上应用了过滤器,因此行号将不匹配。如果我可以在第二张纸上镜像这些过滤器,那么我就会知道行号,但这听起来像是一场噩梦。我想不出该怎么做。

我真的对此束手无策。任何建议将不胜感激。 谢谢。

【问题讨论】:

  • 这些线程没有帮助吗?你具体试过什么?听起来MatchFind 的一些用法应该可以工作。请发布您尝试过的任何代码,以及它所引发的任何错误,或者如果它不起作用,请说明如何它不起作用。
  • 这真的需要VBA吗?这听起来像是VLOOKUP function 可以解决的问题...
  • 为了澄清,我尝试了 VLOOKUP 但我需要返回单元格地址,而不是它的值,所以我认为它不会有帮助。获得地址后的操作是向左移动 2 列并复制该单元格的内容(嵌入在单元格注释中的图像),然后将该内容粘贴到另一张表中。所以我认为它比 VLOOKUP 可以处理的更复杂。感谢您的想法。

标签: excel vba


【解决方案1】:

您可以尝试使用循环来完成此操作。根据您的数据,这应该可以工作。您没有详细说明 A 列中要执行的操作或变量的声明方式,因此这是一个开始。

 Sub Macro1()
' This macro will loop through each row and look for your variable in column C if it finds your variable in column C it will then perform your action in column A of that same row.

Dim variable As String
variable = "insert value or cell here"

With Sheets("Sheet1")
    LR = .Cells(Rows.Count, "C").End(xlUp).Row
    For i = LR To 2 Step -1
        If .Cells(i, "C").Value = variable Then
            .Cells(i, "A").Value = "perform action here"
        End If
    Next i
End With

End Sub

【讨论】:

  • 但是为什么呢? Match、Vlookup 或 range.Find 等内置函数非常适合此类任务——无需重新发明轮子?
【解决方案2】:

更新:我的问题是正确使用变量,解决方案似乎是:

Public Const SKUVALUE As String = "$B$1"
Public imageValue As Long
Public n As Long

然后:

Sub FindFirstInstance()
Dim ws As Excel.Worksheet
Dim FoundCell As Excel.Range
Dim imageValue As Long: imageValue = Range(SKUVALUE).Value
Set ws = ActiveSheet
Set FoundCell = ws.Range("C:C").Find(what:=imageValue, lookat:=xlWhole)
If Not FoundCell Is Nothing Then
    MsgBox (imageValue & " found in row: " & FoundCell.Row)
n = FoundCell.Row
MsgBox "n is " & n
Range("$C$1").Value = n
Else
MsgBox (imageValue & " not found")
End If
End Sub

我仍然遇到的问题是全局/公共变量在工作表之间不起作用。这就是为什么我将 n 的值放入上面的 C1 中,以便以后可以获取它。但我会继续努力。目前,我认为我有我需要的东西。非常感谢。

【讨论】:

  • 我仍然遇到的问题是全局/公共变量在工作表之间不起作用 Public 声明与普通代码模块中的Public 声明不同。 :)
  • 这可能会有所帮助:stackoverflow.com/questions/16374253/…
  • 您还可以将值存储在可从任何代码模块或工作表本身访问的Name 中。
  • 太棒了!非常感谢。
猜你喜欢
  • 1970-01-01
  • 2021-07-05
  • 1970-01-01
  • 2015-05-07
  • 2015-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-05
相关资源
最近更新 更多