2015-07-21 150 views
0

嗨我有一个电子表格,我需要提取一些数据并将其复制到新工作表。基于条件的Excel复制列

以下是电子表格的图片。我想要的是当列N包含数字(在这种情况下,只有2列将位于第二行 - 第7列行26)时,新列表中所有黄色突出显示列的副本。这张纸很大,所以这只是一个例子。

enter image description here

Here is the code I have tried to use: 

    Sub CopyYesAdrian() 
Dim a As Variant, o As Variant 
Dim i As Long, j As Long, n As Long 
Application.ScreenUpdating = False 
With Sheets("Sheet1") 
    a = .Cells(1, 1).CurrentRegion 
    n = Application.CountIf(.Columns(9), "Yes") 
    ReDim o(1 To n + 1, 1 To 11) 

End With 
j = j + 1: o(j, 1) = "CORP ID": o(j, 2) = "Application ID" 
o(j, 3) = "Orig - Country": o(j, 4) = "Network DDI": o(j, 5) = "PTT ACCESS": 
    o(j, 6) = "TERM - COUNTRY": o(j, 7) = "TERM SW/TRUNK" 
: o(j, 8) = "TERM DIGITS": o(j, 9) = "PSTN ROUTE": o(j, 10) = "PLAN": o(j, 
11) = "DNIS" 
For i = 2 To UBound(a, 1) 
If IsError(a(i, 6)) Then 

ElseIf a(i, 8) = "Yes" And a(i, 6) Like "[0-9][0-9][0-9][/][0-9]*" Then 
    j = j + 1: o(j, 1) = a(i, 1): o(j, 2) = a(i, 3) 
    o(j, 3) = a(i, 4): o(j, 4) = a(i, 6): o(j, 5) = a(i, 8): o(j, 6) = a(i, 
9): o(j, 7) = a(i, 10): o(j, 8) = a(i, 11) 
: o(j, 9) = a(i, 12): o(j, 10) = a(i, 12): o(j, 11) = a(i, 12) 
    End If 
Next i 
With Sheets("Sheet2") 
    .UsedRange.Clear 
    .Cells(1, 1).Resize(UBound(o, 1), UBound(o, 2)) = o 
    .UsedRange.Columns.AutoFit 
    .Activate 
End With 
Application.ScreenUpdating = True 
End Sub 
+0

首先,你到目前为止尝试过什么?你建议使用VBA,但你使用VBA是否舒服?请显示你已经尝试过的代码,并显示它不能做你想要的事情。然后,澄清:如果列M是一个数字,列N也总是一个数字?或相反亦然? –

+0

对不起,由于某种奇怪的原因,我无法获得代码。不,他们可能并不总是一个数字。有时候会有字符串,但我只想在两个字符都有数字的时候提取。 – user1766709

+0

@级在elseif语句中,它的失败点是'o(j,1)= a(i,1)'。某些字段不在图像中,缺少的重要1是列F,其中包含列M&N的连接值(当两者都有数字时) – user1766709

回答

0

与此更换你多句台词:

j = j + 1 
o(j, 1) = "CORP ID" 
o(j, 2) = "Application ID" 
o(j, 3) = "Orig - Country" 
o(j, 4) = "Network DDI" 
o(j, 5) = "PTT ACCESS" 
o(j, 6) = "TERM - COUNTRY" 
o(j, 7) = "TERM SW/TRUNK" 
o(j, 8) = "TERM DIGITS" 
o(j, 9) = "PSTN ROUTE" 
o(j, 10) = "PLAN" 
o(j, 11) = "DNIS" 
For i = 2 To UBound(a, 1) 
If IsError(a(i, 6)) Then 

ElseIf a(i, 8) = "Yes" And a(i, 6) Like "[0-9][0-9][0-9][/][0-9]*" Then 
    j = j + 1 
    o(j, 1) = a(i, 1) 
    o(j, 2) = a(i, 3) 
    o(j, 3) = a(i, 4) 
    o(j, 4) = a(i, 6) 
    o(j, 5) = a(i, 8) 
    o(j, 6) = a(i, 9) 
    o(j, 7) = a(i, 10) 
    o(j, 8) = a(i, 11) 
    o(j, 9) = a(i, 12) 
    o(j, 10) = a(i, 12) 
    o(j, 11) = a(i, 12) 
End If 

请试试这个,让我知道,如果它的工作原理。

+0

当我可以测试时,我会让你知道我的结果。你认为有可能做我在找什么,而不使用vb​​a? – user1766709

0

这可以在没有VBA(在某种程度上)的情况下完成。

  • 类型下列公式表2,小区A2:这个公式 =IF(AND(ISNUMBER(Sheet1!$M2),ISNUMBER(Sheet1!$N2)),Sheet1!I2,"")

  • 复制/粘贴到单元格B2:H2。

  • 删除列C(它指的是Sheet1中的列K,您不需要)。
  • 选择公式的整行并复制下来,多的行,在表1

这将让你至于你问过的问题,但我假设你会想要从那里挑出空白的行。在这种情况下,您可能希望将Sheet2制作成表格,以便可以过滤掉空白行。