Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
以编程方式查找匹配单元格的Excel宏_Excel_Match_Cell_Vba - Fatal编程技术网

以编程方式查找匹配单元格的Excel宏

以编程方式查找匹配单元格的Excel宏,excel,match,cell,vba,Excel,Match,Cell,Vba,在单元格R12中,我有一个整数,每次需要运行此宏时,该整数都会更改。我需要宏来分析该单元格中的数字,并在电子表格中找到与单元格R12内容匹配的另一个单元格(保证在M31:M40范围内,因为这是匹配的位置),然后将匹配的单元格设为活动单元格。 显然,我可以告诉excel R12中的内容,并进行搜索,但我需要它自己确定R12中的内容…然后找到匹配的单元格,然后转到那里 没有人键入R12的值。这是经过计算的。R12是通过将该列中其他十个单元格的内容相加而创建的数字。我试图留下“面包屑”让我的宏找到返回

在单元格R12中,我有一个整数,每次需要运行此宏时,该整数都会更改。我需要宏来分析该单元格中的数字,并在电子表格中找到与单元格R12内容匹配的另一个单元格(保证在M31:M40范围内,因为这是匹配的位置),然后将匹配的单元格设为活动单元格。
显然,我可以告诉excel R12中的内容,并进行搜索,但我需要它自己确定R12中的内容…然后找到匹配的单元格,然后转到那里

没有人键入R12的值。这是经过计算的。R12是通过将该列中其他十个单元格的内容相加而创建的数字。我试图留下“面包屑”让我的宏找到返回到电子表格上某个位置的方法,在那里宏可以继续并将数据粘贴到那里。。。我希望Excel能够确定R12中的数字,并在工作表的其他地方找到确切的数字..自行确定。另一个数组中将存在相同的数字。。。(M31:M40)如果它能够以某种方式将活动单元格移动到匹配的号码,我可以将活动单元格返回到启动宏的位置。宏的全部内容未发布。希望能澄清这一点。

我从“寻找并通过信息构建宏以提高在视频后期制作设施中完成的所有工作的效率”中猜测,您对VBA的了解有限,您不知道哪些功能可能相关。这个答案是对活动常规的介绍,我相信这是你所需要的

事件发生:打开或关闭工作簿、添加工作表、更改单元格值等。对于其中许多事件,您可以创建一个例程,在该事件发生时调用

为了演示这些例程,我创建了一个工作簿和一个工作表“Work”。我已经将12个单元格设置为数值,并将R12设置为它们的总和。我已将范围J2:O25设置为数字1到144。这是一个比您想要的更大的范围,但这对原理没有影响

在下面的代码中,我使用了两个事件例程:
Workbook\u Open
Workbook\u SheetChange

工作簿\u Open
中,我保存R12的原始值。在
工作簿\u SheetChange
中,如果R12的值已更改,并且J2:O25包含新值,我将光标移到该值

如果我理解你的问题,这就是你寻求的功能。如果没有,我希望这个答案能帮助你提出一个更好、更详细的问题

必须将此语句放置在模块中:

  Public R12Last As Variant
您必须将以下代码放入工作表下方的
Microsoft Excel对象
中的
本工作簿中

Option Explicit
Sub Workbook_Open()

  ' This routine is called when the workbook is opened.

  With Worksheets("Work")
    ' Save the value of cell R12 when the workbook opens.
    R12Last = .Range("R12").Value
  End With

End Sub

Private Sub Workbook_SheetChange(ByVal WSht As Object, ByVal ChgRng As Range)

  ' This routine is called when cells in any worksheet are changed by the
  ' user or by an external link.

  ' WSht is the worksheet within which cells have changed.
  ' ChgRng can be a single cell or a range.

  ' For this application, we are not interested in the cell that has changed.
  ' We want to know if the change affected R12.

  Dim SearchRng As Range
  Dim FoundRng As Range

  With Worksheets("Work")
    If R12Last <> .Range("R12").Value Then
      ' Cell R12 has changed
      R12Last = .Range("R12").Value     ' Record the new value for next time

      ' I have a larger range containing the values that might be in R12
      ' but the principle is the same.  You will need to change this to M31:M40.
      Set SearchRng = .Range("J2:O25")

      ' Look for the new value of R12 in SearchRng.
      ' "What" is the value to be found.  "After" must be within the search
      ' range. "After" is the last cell to be searched.  I have set
      ' SearchDirection to xlNext and SearchOrder to xlByRows so the Find will
      ' check cells starting with J2.
      ' Look Find up in VBA Help for a fuller description.
      Set FoundRng = SearchRng.Find(What:=R12Last, After:=Range("O25"), _
                                    LookIn:=xlValues, LookAt:=xlWhole, _
                                    SearchOrder:=xlByRows, _
                                    SearchDirection:=xlNext)
      If FoundRng Is Nothing Then
        ' The value of R12 has not been found in the search range.
        ' Add code to handle this situation
        Call MsgBox("Target value not found", vbOKOnly)
      Else
        ' Make the cell with the matching value the active cell.
        FoundRng.Select
      End If
    End If
  End With

End Sub
选项显式
子工作簿_Open()
'打开工作簿时调用此例程。
带工作表(“工作”)
'打开工作簿时保存单元格R12的值。
R12Last=.Range(“R12”).值
以
端接头
私有子工作簿(ByVal WSht作为对象,ByVal ChgRng作为范围)
'当任何工作表中的单元格被
'用户或通过外部链接。
'WSht是单元格已更改的工作表。
“ChgRng可以是单个单元格或范围。
'对于此应用程序,我们对已更改的单元格不感兴趣。
“我们想知道这一变化是否影响了R12。
变暗搜索范围
调光范围
带工作表(“工作”)
如果R12最后范围(“R12”)值,则
'单元格R12已更改
R12Last=.Range(“R12”).Value'记录新值以备下次使用
“我有一个更大的范围,包含R12中可能存在的值
但原则是一样的。您需要将其更改为M31:M40。
设置SearchRng=.Range(“J2:O25”)
'在SearchRng中查找R12的新值。
“What”是要查找的值。“After”必须在搜索范围内
“射程。“After”是要搜索的最后一个单元格。我已经准备好了
'SearchDirection至xlNext,SearchOrder至xlByRows,以便查找
'检查以J2开头的单元格。
'请在VBA帮助中查找更完整的说明。
Set FoundRng=SearchRng.Find(What:=R12Last,After:=Range(“O25”)_
LookIn:=xlValues,LookAt:=xlother_
搜索顺序:=xlByRows_
搜索方向:=xlNext)
如果FoundRng什么都不是
'在搜索范围内未找到R12的值。
'添加代码以处理此情况
调用MsgBox(“未找到目标值”,仅vbOKOnly)
其他的
'使具有匹配值的单元格成为活动单元格。
FoundRng.Select
如果结束
如果结束
以
端接头

事实上,似乎没有人理解我的问题,我要承担一半的责任。。。在另一个站点上搜索得到了我的解决方案:

Range(ActiveCell.Address).Name = "StartCell"

LOOPING CODE HERE

Application.Goto "StartCell"

R12是如何改变的?如果有人输入了一个值,那么一些
VBA
可以做到这一点。你能解释一下这个更大的用途吗?也许您的整体方法也需要一些帮助。您可以在例程的开头存储Activecell地址,以便在例程的后面进行检索。你应该考虑发布你的代码。从你到目前为止所描述的情况来看,听起来你让事情变得更加困难。事实上,似乎没有人理解我的问题,我将承担一半的责任。。。在另一个站点上搜索得到了我的解决方案: