如果单元格有文本,则复制一行

时间:2015-01-28 15:38:46

标签: excel vba excel-vba

我正在尝试编写一个复制行的宏,如果该行中的特定单元格包含文本(C列),我已经搜索了互联网并找到了处理复制具有特定文本的行但我想写的行无论单元格中包含哪些文本,都会复制它。

例如,如果有30行,但只有10行包含C列中的文本,我希望它复制这10行并将其粘贴到“操作摘要”表中。

目前我正在使用条件格式为没有文本的任何单元格着色,然后将它们过滤掉并复制剩余的行但这有点乱,我想知道是否有更简洁的方法。

谢谢。

4 个答案:

答案 0 :(得分:1)

也许:

Sub SmartCopy()
    Dim s1 As Worksheet, s2 As Worksheet
    Dim N As Long, i As Long, j As Long
    Set s1 = Sheets("Sheet1")
    Set s2 = Sheets("Action Summary")
    N = s1.Cells(Rows.Count, "C").End(xlUp).Row
    j = 1
    For i = 1 To N
        If s1.Cells(i, "C").Value = "" Then
        Else
            s1.Cells(i, "C").EntireRow.Copy s2.Cells(j, 1)
            j = j + 1
        End If
    Next i
End Sub

更新名称以符合您的要求。

答案 1 :(得分:0)

试试这个

Private Sub CopyNonBlank()
    Dim destWS As Worksheet ' Destination worksheet
    Set destWS = ThisWorkbook.Worksheets("Action Summary")
    Dim i As Long: i = 1
    For Each cell In Range("C2:C32")
        If Len(cell.Value) > 0 Then ' if cell is not empty lenght would be greater than 0
            destWS.Range("A" & i).Value = cell.Value
            i = i + 1
        End If
    Next cell
End Sub

答案 2 :(得分:0)

那样的话:

Dim y As Integer

y = 1
For x = 1 To 30
    If Sheets(1).Cells(x, 3) <> "" Then
        Do While Sheets("Action Summary").Cells(y, 3) <> ""
            y = y + 1
        Loop
        Sheets(1).Rows(x).Copy Destination:=Sheets("Action Summary").Rows(y)
        y = 1
    End If

Next x

它循环通过第一张第30行,然后在列c(第3列)中找到一个值时,它循环遍历&#34;动作摘要&#34;表格递增y变量,直到找到要粘贴的空白行,然后将表格1的整行x复制到&#34;行动摘要&#34;的行y中。片材。

答案 3 :(得分:-1)

您可以使用If语句来确定单元格是否包含使用以下内容的文本:

If IsNumeric(rCell.Value) = False And _
IsError(rCell.Value) = False And _
IsDate(rCell.Value) = False Then

第1行检查该值不是数字,下一步检查它不是来自公式的错误消息,并且最后一次检查它不是日期,因为根据它们的格式化,这些可能被误认为是文本。

然后添加代码以复制已找到的行。