簡體   English   中英

根據旁邊單元格中的文本復制和粘貼數據

[英]Copy and paste data based on text in cell next to it

我希望代碼檢查“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 所以我們需要使用占位符之like的運算符。

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

請注意,您可以在一行中復制/粘貼。
And you don't need c.Select (see How to avoid using Select in Excel VBA .)

請注意,Excel 不知道此范圍在哪個工作表中Range("A3:AAA3").Cells更好地指定工作表,如ThisWorkbook.Worksheets("MySheet").Range("A3:AAA3").Cells

最后,在所有情況下,使用 F8 逐步調試代碼會很有幫助,這樣您就可以查看代碼在每一步中的作用,並調查變量的值以查看錯誤的確切位置。


無關:

我什至更喜歡以下風格:

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

讀起來更直觀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM