复制单元格,如果它包含文本

时间:2016-05-21 01:36:46

标签: excel vba copy cells

数据从网络表单传输到Excel。并非每个单元都接收输入。有许多单元格,扫描每个单元格寻找文本是耗时的。

如何将文本自动从sheet1复制到sheet2。但我不希望单元格显示与原始图纸相同的布局。我希望它们能够组合在一起,消除它们之间的所有空单元。我还想从包含文本的行中获取标题。

我找到了这个宏:

Sub CopyC()  
Dim SrchRng As Range, cel As Range  
Set SrchRng = Range("C1:C10")  
For Each cel In SrchRng  
    If cel.Value <> "" Then  
        cel.Offset(2, 1).Value = cel.Value  
    End If  
Next cel

它只抓取包含文本的单元格,但它以与它所在的完全相同的布局显示它。任何帮助都会受到赞赏,并在将来节省大量扫描时间,提前感谢:)

2 个答案:

答案 0 :(得分:0)

我想这就是你要找的东西:

if geometry is not None:
    w.show()
    w.setGeometry(*geometry)
else:
    w.showNormal()

以上代码会将Sub CopyNonBlankCells() Dim cel As Range, myRange As Range, CopyRange As Range Set myRange = Sheet1.Range("C1:C20") '---> give your range here For Each cel In myRange If Not IsEmpty(cel) Then If CopyRange Is Nothing Then Set CopyRange = cel Else Set CopyRange = Union(CopyRange, cel) End If End If Next cel CopyRange.Copy Sheet2.Range("C1") '---> enter desired range to paste copied range without blank cells End Sub 中的范围C1:C20复制到Sheet1中的C1

来自here


编辑:以下答案取决于您的评论 的 ------------------------------------------------------------------------

如果您要写下面的内容

Sheet2

Set myRange = Sheet1.Range("G:G") Set myRange = Sheet2.Range("G:G") 将首先设置为myRange,然后设置为Sheet1.Range("G:G"),这意味着Sheet2.Range("G:G")将具有myRange的当前范围。

如果你想使用多个范围你可以使用Sheet2.Range("G:G")功能,但是使用UNION有一个限制,你可以组合不同的范围但只有一张。您的要求是组合不同表格的范围。为此,我要添加一个新的工作表,并将所有工作表中的UNION范围添加到其中。然后在使用新添加的工作表后,我将其删除。

以下代码将在名为G:G的工作表中为您提供所需的输出。

Result

答案 1 :(得分:0)

您可以使用数组!

您可以先将所有信息存储在数组中,然后将数组打印在另一个工作表上,而不是将信息从一个单元格复制到另一个单元格。您可以告诉阵列避免空单元格。通常,使用数组是存储信息的最佳方式。 (通常是使用信息的最快方式)

如果您只查看一列,则可以使用一维数组。如果您正在查看多个列,并且想要将信息打印到另一个页面中的相应列(但不同的单元格)中,那么您可以使用多维数组来存储列号/您想要的任何其他内容。

从您的代码中,它可能如下所示:

Sub CopyC()  
Dim SrchRng As Range, cel As Range 

'Declare your 1-d array (I don't know what you are storing)
Dim myarray() as variant 
Dim n as integer
Dim i as integer

Set SrchRng = Range("C1:C10")
'define the number of elements in the array - 1 for now, increase it as we go
n = 0
Redim myarray(0 to n)

For Each cel In SrchRng  
    If cel.Value <> "" Then
        'redim preserve stores the previous values in the array as you redimension it
        Redim Preserve myarray(0 to n)
        myarray(n) = cel.Value  
        'increase n by 1 so next time the array will be 1 larger
        n = n + 1
    End If  
Next cel

'information is now stored, print it out in a loop
'this will print it out in sheet 2 providing it is called "Sheet2"
For i = 0 to ubound(myarray)
    Sheets("Sheet2").cells(i,1).value = myarray(i)
Next i