2014-05-09 88 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

相關問題