数据从网络表单传输到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
它只抓取包含文本的单元格,但它以与它所在的完全相同的布局显示它。任何帮助都会受到赞赏,并在将来节省大量扫描时间,提前感谢:)
答案 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