2011-04-12 79 views
0

我試圖複製的範圍中選擇的行是基於價值的一個cell.I行的值的行希望爲所有這樣做包含單元格中相同值的行,然後轉到下一個附加到第一個列表底部的值。Excel 2007中,複製從一個表到另一個基於在1列

下面是我在解釋什麼,我希望達到的嘗試 - 希望這些都有助於解釋更多我的困境。我四處尋找,但沒有找到我想要的東西。我認爲這很簡單,可能是。

我收到一個數據轉儲數千個數據的行和列18中。根據列P「合同」的價值,我想將整行復制到新的單個工作表workingdata。不是所有的數據都會進入workingdata工作表。

合同編號C1234,c1235,c2345等

什麼,我實現被複制和排序後,所以複製數據的所有行,其中合同編號爲C1234,在workingdata,然後直接在其下方複製合約爲c1235等的所有行。

我以爲我可以選擇的範圍P:P和排序,但無濟於事。

Sheets("Data Dump").Select 
Columns("P:P").Select 
If Selection.Value = "C1234" Then 
Selection.EntireRow.copy 

我知道我應該張貼什麼我都試過了,但它是一個可憐的,由於某種原因,我似乎無法讓我的頭一輪這一個。

這裏是我的最新努力 - 我知道有錯誤

Dim oWorksheet As Excel.Worksheet 
Dim oRangeSource As Excel.Range 
Dim oRangeDest As Excel.Range 

Set oWorksheet = Worksheets("DataDump") 
Set oRangeSource = oWorksheet.Range("p:p") 
Set oRangeDest = Worksheets("workingdata") 

If oRangeSource="CA0004000" Then Select.EntireRow 

Selection.EntireRow.copy 
Sheets("workingdata").Select.Paste 
End If 

最新努力,但擺脫不必要的不​​排序數據,或者,我必須做一個手工篩選和排序,其種種失敗的對象宏觀

Sub copy() 
' 
' copy Macro 
' 
Dim rngContracts As Range:  Set rngContracts = Sheets("DataDump").Range("P:P") 
Dim wsData As Worksheet 

Dim wsFound As Boolean: wsFound = False 
Dim ws As Worksheet 
For Each ws In ThisWorkbook.Worksheets 
    If ws.Name = "Working Data" Then 
     Set wsData = ws 
     wsFound = True 
     Exit For 
    End If 
Next ws 

If wsFound = False Then 
    Application.CutCopyMode = False 
    ActiveSheet.Range("A1").EntireRow.copy 
    Set wsData = Sheets.Add(After:=Sheets(Sheets.Count)) 
    wsData.Name = "Working Data" 
    wsData.Range("A1").EntireRow.PasteSpecial xlPasteAll, Transpose:=False 
End If 

Dim iCell As Range 
For Each iCell In rngContracts 
    If iCell.EntireRow.Hidden = False Then 
     Application.CutCopyMode = False 
     iCell.EntireRow.copy 
     wsData.Range("P" & Rows.Count).End(xlUp).Offset(1, 0).EntireRow.PasteSpecial xlPasteAll, Transpose:=False 
    End If 
Next iCell 

Application.CutCopyMode = False 
Application.Calculation = xlCalculationAutomatic 
Application.ScreenUpdating = True 

End Sub 

最新attaempt - 複製我所需要的數據,但不排序:

Sub copytest() 
' 
' copytest Macro 
' 
Set MR = Sheets("data Dump").Range("P:P") 

    For Each cell In MR 

If cell.Value = "CA000154" Then 
cell.EntireRow.copy 
Sheets("working data").Range("A" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial 

    End If 

If cell.Value = "CA000220" Then 
cell.EntireRow.copy 
Sheets("working data").Range("A" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial 
    End If 
If cell.Value = "CA000393" Then 
cell.EntireRow.copy 
Sheets("working data").Range("A" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial 
    End If 
If cell.Value = "CA000429" Then 
cell.EntireRow.copy 
Sheets("working data").Range("A" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial 
    End If 
Application.CutCopyMode = False 

Next 

End Sub 
+0

如果我正確理解你的問題,你的問題的一部分就是如何對你的表進行排序。爲此,僅選擇要排序的列P是不夠的;你還需要選擇17個應該排序的其他列!你能更清楚地描述你想要你的代碼除了排序嗎?是否有一些不復制某些行的標準,因爲你說「不是所有的數據都會進入'workingdata'工作表?」? – 2011-04-13 17:00:36

+0

使用列p對數據進行排序,即擺脫我不想要的合同,但對於我想要的合同,將它們組合在一起並複製到新工作表。但我需要複製整行以獲取我想要的合同。 – SteveW1968 2011-04-14 06:22:03

+0

你曾經在VBA中使用過「Watches」嗎?他們可以幫助你理解你的代碼實際上在做什麼。例如,你做的If比較(順便說一句缺少End If)會比較一個數組(因爲你選擇了一個完整的列)和一個值。你會想在你的代碼中添加一個For循環,逐個遍歷P列的單元格...... – 2011-04-14 07:46:29

回答

0

記錄一個宏以在數據上設置篩選器只選擇一個篩選器。

然後,編輯通過每個過濾器複製可見光範圍內的代碼,並循環到您的片材。這也必須對數據進行排序,因爲篩選器已經排序。

此外,看一看創造了Excel VBA幫助與問候濾波器陣列使用它們進行排序。

相關問題