将行的单元格从一列复制/粘贴到另一列 - VBA

时间:2014-05-09 11:27:37

标签: excel-vba vba excel

我在电子表格上有一些数据。特别是我需要第一列中的TIME和第二列中的TIME,这取决于时间,出于奇怪的原因,当我将txt文件导入excel时,如果时间是从上午10点到23.59,则时间在列A上。在B的时间 我正在尝试创建一个VBA脚本,允许我将所有数据放在同一列(A)中。 我的想法是:   - 对于列A中的所有行   - 如果单元格为空,则复制实际单元格中B单元格(同一行)的值(例如,如果A1为空,则在A1中复制B1)   - 停止

子测试()

Dim i As Integer
Dim lastRow As Long
Dim x, y As Integer
Dim rng As String

Sheets("Sheet1").Select
' count numer of recorsd (in the first column) - check the range
lastRow = Worksheets("Sheet1").Range("B:B").Cells.SpecialCells(xlCellTypeConstants).Count

For i = 1 To lastRow
   If IsEmpty(Worksheets("Sheet1").Range(Cells(1, i))) Then Range(Cells(2, i)).Select: Range (Cells     (1, i)).Copy: Range(Cells(1, i)).PasteSpecial:    Range(Cells(2, i)).Clear
Next i  

End Sub

我尝试做某些事情,但它显示错误: '运行时错误'1004':
应用程序定义或对象定义的错误

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我在你的代码中看到了一些东西。首先,变量lastrow正在计算B列中的项目数,这不一定意味着它将为您提供最后一行编号,因此我建议更改下面的代码以解决此问题。此外,您对单元格的范围引用已交换列/行,我在下面的代码中也修复了它。最后,您收到错误的原因是您对单元格的引用不正确。这是我的建议,应该做你想要的

Sub Main()

Dim i As Integer
Dim lastRow As Long
Dim x As Integer
Dim y As Integer
Dim rng As Range

Sheets("Sheet1").Activate
' count numer of recorsd (in the first column) - check the range
With ActiveSheet
    lastRow = .Cells(.Rows.Count, "B").End(xlUp).Row
End With
For i = 1 To lastRow
    Set rng = Cells(i, 1)
    If IsEmpty(rng) Then
        Cells(i, 2).Copy
        Cells(i, 1).PasteSpecial
        Cells(i, 2).Clear
    End If
Next i
End Sub

答案 1 :(得分:0)

方法IsEmpty不是指表格中的单元格,而是指未初始化的变量。您可以简单地检查单元格是否包含空字符串。希望以下代码有所帮助:

Sub Copy()

Dim i As Integer
Dim lastRow As Long
lastRow = ActiveSheet.UsedRange.Rows.Count

For i = 1 To lastRow
    If (Cells(i, 1) = "") Then
        Cells(i, 1) = Cells(i, 2)
        Cells(i, 2).Clear
    End If
Next i

End Sub

它检查A列中的单元格是否为空字符串,并复制b列中相同行单元格的值,之后将删除。