Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.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_Vba - Fatal编程技术网

Excel 根据数据旁边单元格中的文本复制和粘贴数据

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

我希望代码检查“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
想法?我确信这是一个非常简单的解决方案,但我有点卡住了。

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)

这看起来更直观。

虽然不需要循环或选择,但如果文本完全匹配(例如,没有尾随空格),代码应该可以工作。啊!我是如此接近,多么烦人。非常感谢-它工作得非常好。