2014-02-14 186 views
1

我有一個有很多數據的excel表。正如你可能知道的,這帶來了很多問題。其中一個主要原因是數據太多。我不熟悉vba,但我想知道如何清理數據。使用vba清理excel表

我有一個3字段的表:日期,時間和溫度。溫度以分鐘爲單位記錄。溫度只記錄從早上7點到晚上10點,但表格是在24小時內。所以我的表格有很多空白單元格。所以,我想寫一個代碼,指出:

我可以這樣做嗎?

此外,另一個問題是數據不是在週末收集。我沒有給這個格式的日子場,僅日期字段:20130102這是1月02日2013年我想:

if ((date = saturday) or (date = sunday)): 
      delete row 

要麼這些可行?

我的片材看起來如下:

甲..............乙......... ....Ç

日期........ .........時間溫度

enter image description here

+0

你的時間是什麼格式?你的例子看起來只有幾分鐘? – ARich

+0

你需要vba嗎? –

回答

3

因爲這兩個日期和時間格式不同於正常的,我們需要處理的數值得到的東西要測試的。請看下面的例子(我曾經評論的每一行,以幫助你跟着):

Sub DeleteRows() 

Dim lastRow As Long 
Dim Cell As Long 
Dim dt As Date 

'Work with the active sheet. 
With ActiveSheet 

    'Find the last row of your dataset. 
    lastRow = .Range("A:A").Find("*", searchdirection:=xlPrevious).Row 

    'Format your time column to a readable time. 
    .Columns("B").NumberFormat = "[$-F400]h:mm:ss AM/PM" 

    'Loop through the rows, beginning at the bottom. 
    For Cell = lastRow To 2 Step -1 

     'Piece together the date. 
     dt = Mid(.Cells(Cell, 1), 7, 2) & "/" & _ 
      Mid(.Cells(Cell, 1), 5, 2) & "/" & Left(.Cells(Cell, 1), 4) 

     'If the date is a Sat or Sun, delete the row. 
     If Weekday(dt) = 1 Or Weekday(dt) = 7 Then 
      .Rows(Cell).EntireRow.Delete 

     'If the time is before 7am or after 10pm, delete the row. 
     ElseIf Hour(.Cells(Cell, 1)) < 7 Or Hour(.Cells(Cell, 1)) > 22 Then 
      .Rows(Cell).EntireRow.Delete 
     End If 
    Next Cell 
End With 

MsgBox "Done!" 

End Sub 

有幾件事情需要注意的代碼。首先,我們必須從列表的底部開始,因爲當我們刪除行時,其餘行向上移動。如果我們從上到下(例如A1A10),如果我們刪除第5行,第6行將滑入它的位置,並且循環將跳過第5行(先前第6行)並繼續到第6行。換句話說,當刪除行時從上到下循環將最終無意中跳過行。其次,我不得不猜測你的時間格式。雖然我相信我猜對了,但我可能沒有。如果我錯了,並且我的代碼沒有將時間列更改爲可讀時​​間,請在更改該列的格式的同時記錄一個宏,並將新格式替換爲我的("[$-F400]h:mm:ss AM/PM" )。

最後,由於您的日期列是異常格式(對於Excel),我們需要重新排序日期以便Excel可以讀取它。一旦我們完成了,我們可以使用結果日期來查看日期是否爲星期六。或太陽。

+0

非常感謝。你是最棒的。 – user1681664

2

你能做到這樣,假設包含您的日期是2(B)列:

Dim i As Integer 
for i = 1 to cellsCount 
    If Hour(Cells(i, 2)) < 7 Or Hour(Cells(i, 2) > 22 Then 
     Rows(i).Delete 
    Else If WeekDay(Cells(i, 2)) = 7 Or WeekDay(Cells(i, 2)) = 1 Then 
     Rows(i).Delete 
    End If 
next 

你可以有大約平日這裏的功能的更多信息: http://msdn.microsoft.com/en-us/library/82yfs2zh%28v=vs.90%29.aspx

+0

謝謝。我的日期在A列,時間在B,溫度在C – user1681664

+0

這會丟掉所有條目的所有數據......提示:隨機時間*在7:00之後或22:00之前*總是* –

+0

@igelineau謝謝 – user1681664