首页 > 解决方案 > 根据旁边单元格中的文本复制和粘贴数据

问题描述

我希望代码检查“A3:AAA3”范围内的每个单元格中的特定文本。如果单元格包含该文本,我希望它将右侧单元格中的文本复制到上面的两行(参见下面的说明):

在此处输入图像描述

复制的文本将是一个日期。

我已经有一段代码用这个文本标识每一列并设置列宽:

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

想法?我确定这是一个非常简单的解决方案,但我有点卡住了。

标签: excelvba

解决方案


c.Value = "TEXT"检查该值是否准确 TEXT,但在您的示例中1 TEXT它只是. 所以我们需要使用占位符和运算符。 TEXTlike

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.Select(请参阅如何避免在 Excel VBA 中使用 Select。)

请注意,Excel 不知道该范围在哪个工作表中Range("A3:AAA3").Cells更好地指定工作表,例如ThisWorkbook.Worksheets("MySheet").Range("A3:AAA3").Cells

最后,在所有情况下,如果您使用 F8 逐步调试代码会很有帮助,这样您就可以查看代码在每一步中的作用,并调查变量的值以了解错误的确切位置。


无关:

我什至更喜欢以下风格:

c.Offset(ColumnOffset:=1).Copy Destination:=c.Offset(RowOffset:=-2)

读起来更直观。


推荐阅读