在 Excel 2016 中使用 VBA 将选定范围移动到一列上
Posted
技术标签:
【中文标题】在 Excel 2016 中使用 VBA 将选定范围移动到一列上【英文标题】:Move selected range over one column with VBA in Excel 2016 【发布时间】:2018-01-17 14:48:36 【问题描述】:我需要有能力
-
在 A 列中查找值
选择该值及其上方的所有内容
在一列上偏移所有这些值
下面的代码就是这样做的——但是,我试图加快代码执行速度,而复制和粘贴操作会减慢它的速度。有没有办法在没有剪切/粘贴的情况下做到这一点?我想坚持使用 VBA(副公式),因为这是更大程序的一部分。
谢谢!
Sub FindValueAndAboveThenMoveOver ()
Dim sht1 as Worksheet
Set sht1 = Sheets("Convert")
sht1.Columns("A:A").Find("XXXX"), LookIn:=xlValues).Select
Range(ActiveCell.Offset(0, 0), "A1").Select
Selection.Cut
Range("B1").Select
ActiveSheet.Paste
End Sub
【问题讨论】:
粘贴数据时,是只想要数据还是格式? 【参考方案1】:剪切和粘贴没有问题,但您可以避免它,避免选择会加快速度。另外,您应该首先检查您是否找到了避免错误的内容。
Sub FindValueAndAboveThenMoveOver()
Dim sht1 As Worksheet, r As Range
Set sht1 = Sheets("Convert")
Set r = sht1.Columns("A:A").Find("XXXX", LookIn:=xlValues)
If Not r Is Nothing Then
'should add sheet references here too
With Range("A1").Resize(r.Row)
Range("B1").Resize(r.Row).Value = .Value
.ClearContents
End With
End If
End Sub
【讨论】:
在If
语句中,确保将Range()
链接到工作表(我假设sht1.Range(...)
)。
@BruceWayne - 是的,因此是我的评论。我没有添加一张表,以防万一是不同的。会看看 OP 说了什么,如果有的话。
哦,抱歉,我错过了评论。【参考方案2】:
这可能会稍微快一点:
Sub FindValueAndAboveThenMoveOver()
Dim sht1 As Worksheet, r As Range
Set sht1 = Sheets("Convert")
With sht1
Set r = Range(.Range("A1"), .Columns("A:A").Find("XXXX", LookIn:=xlValues))
End With
r.Offset(0, 1).Value = r.Value
r.Clear
End Sub
【讨论】:
(别忘了Set r = .Range(...
中的.
)
@BruceWayne 如果里面的项目有 dots,你就不需要外面的 dot
哦,真的吗?酷,我不知道!不过想想也有道理。以上是关于在 Excel 2016 中使用 VBA 将选定范围移动到一列上的主要内容,如果未能解决你的问题,请参考以下文章
使用 VBA 从 Access 表中将选定的列导入 Excel