Excel 根据数据旁边单元格中的文本复制和粘贴数据
我希望代码检查“A3:AAA3”范围内的每个单元格中的特定文本。如果单元格包含该文本,我希望它将右侧单元格中的文本复制到上面两行(请参见下图): 复制的文本将是一个日期 我已经得到了一段代码,它用这个文本标识每一列,并设置列宽:Excel 根据数据旁边单元格中的文本复制和粘贴数据,excel,vba,Excel,Vba,我希望代码检查“A3:AAA3”范围内的每个单元格中的特定文本。如果单元格包含该文本,我希望它将右侧单元格中的文本复制到上面两行(请参见下图): 复制的文本将是一个日期 我已经得到了一段代码,它用这个文本标识每一列,并设置列宽: Dim c as Range For Each c In Range("A3:AAA3").Cells If c.Value = "TEXT" Then c.EntireColumn.ColumnWidth = 4
Dim c as Range
For Each c In Range("A3:AAA3").Cells
If c.Value = "TEXT" Then
c.EntireColumn.ColumnWidth = 4
End If
Next c
如果已选择单元格,我可以使用“复制并粘贴”:
Dim s As Range
Set s = Selection.Cells(1)
s.Offset(0, 1).Copy
s.Offset(-2, 0).PasteSpecial xlPasteAll
我觉得我应该能够将这两个元素组合成如下所示的内容,这样它就可以选择包含文本的单元格,复制并粘贴旁边的单元格,然后循环到下一个单元格上(如下图所示?),但我的所有尝试都不起作用——它不会出现错误消息,只是什么都不做
Dim c As Range
For Each c In Range("A3:AAA3").Cells
If c.Value = "TEXT" Then
c.Select
c.Offset(0, 1).Copy
c.Offset(-2, 0).PasteSpecial xlPasteAll
End If
Next c
想法?我确信这是一个非常简单的解决方案,但我有点卡住了。c.Value=“TEXT”将检查值是否准确TEXT
,但在您的示例中,它是1 TEXT
,因此它只像TEXT
。因此,我们需要使用一个占位符和类似于
操作符的
Dim c As Range
For Each c In Range("A3:AAA3").Cells
If c.Value Like "*TEXT*" Then
c.Offset(0, 1).Copy Destination:=c.Offset(-2, 0)
End If
Next c
请注意,您可以在一行中复制/粘贴。
您不需要c。选择(请参阅)
请注意,Excel不知道此范围在哪个工作表中是范围(“A3:AAA3”)。单元格
最好指定工作表,如此工作簿。工作表(“MySheet”)。范围(“A3:AAA3”)。单元格
最后,在所有情况下,使用F8一步一步地调试代码是很有帮助的,这样您就可以看到代码在每一步中都做了些什么,并调查变量的值,以查看错误的确切位置
离题:
我甚至更喜欢以下风格:
c.Offset(ColumnOffset:=1).Copy Destination:=c.Offset(RowOffset:=-2)
这看起来更直观。虽然不需要循环或选择,但如果文本完全匹配(例如,没有尾随空格),代码应该可以工作。啊!我是如此接近,多么烦人。非常感谢-它工作得非常好。