2014-05-09 87 views
0

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

次测试()

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 

末次

我tryed做出头,但它显示了一个错误: 'run时错误'1004':
应用 - 定义的或对象定义的错误

有什么想法?

+0

你也应该把'i,x,y'从'Integer's改为'Long's。整行将在行'32,767'后失败,无论如何它们在内部转换为'Long':http://msdn.microsoft.com/zh-cn/library/aa164754。 – Ioannis

回答

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 
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列在同一行单元格,将在以后予以删除的价值。

+0

这个工作正常,但它是以奇怪的格式粘贴数据,比如带有comme的数字。但谢谢你的帮助! – Andrea

+0

comme?你什么意思? – EngJon

+0

逗号:)这是一个错误。 – Andrea

相关问题