繁体   English   中英

如果列中的单元格不为空,Excel VBA将列复制到列

[英]Excel VBA copying column to column if cells in the column is not empty

在同一工作表中是否有任何有效的方法或正确的方法来复制和粘贴? 我的代码:

With ActiveWorkbook.Sheets("Sheet1")
        For Each row In .Rows
            If Not row.Columns("A:A") Is Empty Then   'error here
                .Columns("A:A").Copy .Range("B1")
            End If
        Next rw
        .Columns("A:A").Delete
End With

因此,在上面的代码中,仅当单元格的列A不为空时,我才想用列A替换列B。 例如:

1   Nil
    Nil
    24
4   Nil
4   Nil
    12
    3
7   Nil
    2
    Nil
8   Nil

最终结果将在B列中如下所示:

1
Nil
24
4
4
12
3
7
2
Nil
8

编辑:没关系,解决了。

With ActiveWorkbook.Sheets("Sheet1")
    For rw = 1 To .Rows.Count
        If (.Rows(rw).Columns("A:A").Value <> "") Then
            .Rows(rw).Columns("A:A").Copy .Range("B" & rw)
        End If
    Next rw
    .Columns("A:A").Delete
End With
With ActiveWorkbook.Sheets("Sheet1").UsedRange
    For Each Row In .Rows
        If Row.Cells(1, 1) <> "" Then
            Row.Cells(1, 2) = Row.Cells(1, 1)
        End If
    Next

    .Columns("A:A").Delete
End With

如果要在列更改中的任何单元格发生时触发该方法,请使用Worksheet_Change方法,此处我们仅捕获J列中单元格的所有更改

在此示例中,我们将值从E列复制到G,而不包括空单元格。 我们使用此命令Worksheets(“ Sheet1”)。Range(“ G:G”)。ClearContents首先清除G列,如果它具有任何旧值

Private Sub Worksheet_Change(ByVal Target As Range)
idx = ActiveCell.Row
idxStr = CStr(idx)
labelIdx = "J" + idxStr
Dim ii As Long
Dim columnNumber As Long
ii = 1
columnNumber = 10
If ActiveCell.Column = columnNumber And ActiveCell.Value <> "" Then
    Worksheets("Sheet1").Range("F1") = Range(labelIdx).Value
    Worksheets("Sheet1").Range("G:G").ClearContents

    For Each cell In Worksheets("Sheet1").Range("E:E")
        If cell.Value <> "" And cell.Value <> "COLUMN LABEL" Then
            Worksheets("Sheet1").Range("G" + CStr(ii)).Value = cell.Value
            ii = ii + 1
        End If

    Next cell

End If

End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM