2011-04-12 78 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帮助与问候滤波器阵列使用它们进行排序。

相关问题