选择您的 if 语句触发的单元格并在 vba 中选择该单元格
Posted
技术标签:
【中文标题】选择您的 if 语句触发的单元格并在 vba 中选择该单元格【英文标题】:Select the cell that your if statement triggers at and select that cell in vba 【发布时间】:2019-12-28 18:34:46 【问题描述】:对 VBA 相当陌生。
我正在尝试在列中搜索特定值,然后选择该单元格以剪切和移动它。
我现在只有:
Dim cel As Range
Sub Opdaterstatus()
For Each cel In Range("H1:H100")
If cel.value = "Fakturering" Then
MsgBox (cel.value)
End If
Next cel
End Sub
这会找到我想要的单元格,但 我的问题是针对实际单元格 if 语句触发。有希望并且很可能有一种简单的方法来实现这一目标。
MsgBox
纯粹用于测试目的。
【问题讨论】:
cel.cut
看看range
对象的属性和方法cel
是那个类型
一旦循环发现一个值为“Fakturering”的单元格,它就是你的cel
变量。现在你可以用它做不同的事情。例如,您可以获取范围 cel.address,或者您可以复制并粘贴或剪切该范围。
谢谢你们——这给了我一些可以玩的东西! :)
【参考方案1】:
简单
Call Range("H1:H100").Find(What:="Fakturering").Cut(Destination:=Range("A1"))
其中“A1”是目标单元格的地址。
逻辑:在Range("H1:H100")
中执行Find(What:="Fakturering")
,然后.Cut
找到单元格并将其粘贴到Destination:=Range("A1")
。
当然,您可以循环直到 .Find 变为 Nothing。不要忘记更改目的地...
是否可以在单元格左侧剪切预设数量的单元格?
没问题。
strAddress = Range("H1:H100").Find(What:="Fakturering").Address
Range(Range(strAddress), Range(strAddress).Offset(2, 1)).Cut Destination:=Range("A1")
逻辑:我们搜索值并获取找到的单元格的地址。然后我们得到一个矩形范围,其中左上角是单元格Range(strAddress)
,右下角是向下2行,向右1列Range(strAddress).Offset(2, 1)
。我们将其剪切并粘贴到目的地。
【讨论】:
哇 - 谢谢!解释得很清楚。是否可以在单元格左侧剪切预设数量的单元格?例如:如果在单元格 A4 中找到“Fakturering”,但我还希望单元格 A1:A3 也被剪切和移动? 您可能希望在继续剪切之前检查Range("H1:H100").Find(What:="Fakturering")
的存在,以避免在未找到 Fakturering 时出现任何错误,并且如果可能存在超过 1 个。
在下面查看我的解决方案 - 随时更正它(Y)【参考方案2】:
我最终执行了以下操作来选择单元格,以及该单元格左侧的其余数据:
Dim cel As Range
Sub Opdaterstatus()
For Each cel In Range("H1:H100")
If cel.value = "Fakturering" Then
Range(cel, cel.Rows.End(xlToLeft)).Cut
cel.Offset(5, 0).Insert
End If
Next cel
End Sub
【讨论】:
验证你的代码太难了。当Worksheet.UsedRange
中存在空单元格时,End(xlSome)
非常任性和任性。我看到它总是害怕。
cel.cut cel.Offset(5, 0)
我觉得可以,方法cut
有一个destination
参数以上是关于选择您的 if 语句触发的单元格并在 vba 中选择该单元格的主要内容,如果未能解决你的问题,请参考以下文章
在EXCEL中 如何用VBA查找某特定单元格并返回该单元格的行和列值?
Excel 公式或规则或 vba 比较 2 个单元格并仅突出显示差异