2015-12-21 71 views
2

我所試圖做的是,在每個工作表:
1.將所有G列數(G23和下),並在A列的最後
2.格式粘貼的號碼只有粘貼特殊一個小數點。
3.複製粘貼的數字並將它們粘貼到B列末尾,並刪除重複項。VBA - 如何選擇剛剛粘貼的值,然後對其應用更改?

我完成了第1步,但我不知道如何執行第2步和第3步....我無法找到方法來選擇剛纔粘貼在A列底部的數字。我是VBA新手 - 非常感謝您的幫助。

這裏是我到目前爲止的代碼:

Sub WorksheetLoop() 
Dim WS_Count As Integer 
Dim I As Integer 
Dim rng As Range 
Dim last As Long 

'Set WS_Count equal to the number of worksheets in the active workbook. 
WS_Count = ActiveWorkbook.Worksheets.Count 

'Begin loop, starts from the sixth worksheet 
For I = 6 To WS_Count 

    last = Worksheets(I).Cells(Rows.Count, "G").End(xlUp).Row 
    Set rng = Worksheets(I).Range("G23:G" & last) 

    Worksheets(I).Select 
     rng.Copy 
     Worksheets(I).Cells(Rows.Count, 1).End(xlUp)(2).PasteSpecial xlPasteFormulasAndNumberFormats 

    ....(what should I do next here?) 

Next I 

Application.ScreenUpdating = True 

End Sub 
+0

我想嘗試錄製宏按照步驟2,3和編輯代碼 – tdmsoares

+0

謝謝,但宏的問題是我無法在所有工作表中重複使用它。 – Grinsummer

+0

錄製該宏後,單擊編輯,然後顯示該代碼。然後你可以適應你的vba – tdmsoares

回答

1

已經知道要粘貼值的範圍。該範圍的第一個單元格是用於PasteSpecial的單元格,並且行數將等於rng中的行數。所需的信息已經存在,所需要的就是將其設置爲一個變量。

這裏有一個片段來說明:

Sub Example() 
    Dim last As Long 
    Dim copyRange As Range 
    Dim pasteRange As Range 

    last = Worksheets(1).Cells(Rows.Count, "G").End(xlUp).Row 
    Set copyRange = Worksheets(1).Range("G23:G" & last) 
    Set pasteRange = Worksheets(1).Cells(Rows.Count, 1).End(xlUp)(2) _ 
        .Resize(copyRange.Cells.Count, 1) 

    copyRange.Copy 
    pasteRange.PasteSpecial xlPasteFormulasAndNumberFormats 

    ' use pasteRange for modifying the pasted data 

End Sub 

改變可以用range.NumberFormat做的格式。在這種情況下,你可以這樣做:

pasteRange.NumberFormat = "0.0" 

我覺得很奇怪,你首先複製NumberFormat然後改變它!也許你可以選擇格式化整個列A,而不是粘貼格式?


range.RemoveDuplicates是在Excel中構建的第三步。這裏是展示它如何被使用一對夫婦的答案:

+0

謝謝 - 這適用於第2步!但是,我該如何做第3步 - 將相同的東西粘貼到B列的末尾?我嘗試設置另一個PasteSize:Set pasteRange2 = Worksheets(I).Cells(Rows.Count,2).End(xlUp)(2)。調整大小(rng.Cells.Count,2),然後:pasteRange2.PasteSpecial xlPasteValuesAndNumbersFormats。但它不起作用。 – Grinsummer

+0

您可以避免必須處理兩個粘貼範圍,方法是使用「設置copyRange = pasteRange」切換複製範圍,然後複製粘貼,就像以前一樣。然後,只需要找到列B中的所有值並將該範圍用於「RemoveDuplicates」 - 這與您爲構建初始copyRange「rng」所做的事情大致相同。 – natancodes

+0

註釋中的粘貼代碼問題看起來是'Resize(rows,columns)'調用,其中您傳遞了2作爲列計數。這會引發錯誤,因爲複製範圍和粘貼範圍*必須具有相同的大小*。 – natancodes