Excel 是否仅使用vba连接可见单元格?

Excel 是否仅使用vba连接可见单元格?,excel,vba,Excel,Vba,我希望将一张工作表中的许多单元格连接到另一张工作表中,然后将公式复制到最后一行 但是,我要从中连接的工作表有隐藏的单元格。所以现在这把我在目标表上的结果搞砸了 有没有办法解决这个问题,让它只拾取可见的细胞 Dim FitRng As Range, Lastrowteam As Long Lastrowteam = Cells(Rows.Count, "H").End(xlUp).Row Sheets("Pipeline simplified").Select Range("W7").Form

我希望将一张工作表中的许多单元格连接到另一张工作表中,然后将公式复制到最后一行

但是,我要从中连接的工作表有隐藏的单元格。所以现在这把我在目标表上的结果搞砸了

有没有办法解决这个问题,让它只拾取可见的细胞

Dim FitRng As Range, Lastrowteam As Long

Lastrowteam = Cells(Rows.Count, "H").End(xlUp).Row

Sheets("Pipeline simplified").Select
Range("W7").FormulaR1C1 = _
"=CONCATENATE(Pipeline!R[2]C[7],"" "",Pipeline!R[2]C[8],"" "",Pipeline!R[2]C[9],"" "",Pipeline!R[2]C[10])"

Set FitRng = Range("W7:W" & Lastrowteam).SpecialCells(xlCellTypeVisible)
FitRng.FillDown

根据您的问题中提供的代码,类似的内容应该适用于您:

Sub tgr()

    Dim wb As Workbook
    Dim wsData As Worksheet
    Dim wsDest As Worksheet
    Dim rData As Range
    Dim rDest As Range
    Dim DataCell As Range
    Dim aResults() As String
    Dim i As Long

    Set wb = ActiveWorkbook
    Set wsData = wb.Worksheets("Pipeline Simplified")   'Sheet where you are getting the concatenated data
    Set wsDest = wb.Worksheets("Sheet1")                'Sheet where the results will be output
    Set rDest = wsDest.Range("A2")                      'Cell on destination sheet where output results will start

    On Error Resume Next
    Set rData = wsData.Range("G2", wsData.Cells(wsData.Rows.Count, "G").End(xlUp)).SpecialCells(xlCellTypeVisible)
    On Error GoTo 0
    If rData Is Nothing Then Exit Sub   'No visible cells
    If rData.Row < 2 Then Exit Sub      'No data

    ReDim aResults(1 To rData.Cells.Count, 1 To 1)
    For Each DataCell In rData.Cells
        i = i + 1
        aResults(i, 1) = DataCell.Value & " " & DataCell.Offset(, 1).Value & " " & DataCell.Offset(, 2).Value & " " & DataCell.Offset(, 3).Value
    Next DataCell

    rDest.Resize(UBound(aResults, 1)).Value = aResults

End Sub
Sub-tgr()
将wb设置为工作簿
将wsData设置为工作表
将wsDest设置为工作表
Dim rData作为范围
暗视范围
Dim数据单元作为范围
Dim aResults()作为字符串
我想我会坚持多久
设置wb=ActiveWorkbook
设置wsData=wb.Worksheets(“Pipeline Simplified”)工作表,从中获取连接的数据
将wsDest=wb.Worksheets(“Sheet1”)设置为输出结果的工作表
在将开始输出结果的目标工作表上设置rDest=wsDest.Range(“A2”)单元格
出错时继续下一步
设置rData=wsData.Range(“G2”,wsData.Cells(wsData.Rows.Count,“G”).End(xlUp)).SpecialCells(xlCellTypeVisible)
错误转到0
如果rData为空,则退出“无可见单元格”
如果rData.Row<2,则退出Sub“无数据”
重拨结果(1到rData.Cells.Count,1到1)
对于rData.Cells中的每个数据单元
i=i+1
aResults(i,1)=DataCell.Value&&&DataCell.Offset(,1)。Value&&DataCell.Offset(,2)。Value&&DataCell.Offset(,3)。Value
下一个数据单元
rDest.Resize(uBond(arResults,1))。值=arResults
端接头

根据您问题中提供的代码,类似的内容应该适合您:

Sub tgr()

    Dim wb As Workbook
    Dim wsData As Worksheet
    Dim wsDest As Worksheet
    Dim rData As Range
    Dim rDest As Range
    Dim DataCell As Range
    Dim aResults() As String
    Dim i As Long

    Set wb = ActiveWorkbook
    Set wsData = wb.Worksheets("Pipeline Simplified")   'Sheet where you are getting the concatenated data
    Set wsDest = wb.Worksheets("Sheet1")                'Sheet where the results will be output
    Set rDest = wsDest.Range("A2")                      'Cell on destination sheet where output results will start

    On Error Resume Next
    Set rData = wsData.Range("G2", wsData.Cells(wsData.Rows.Count, "G").End(xlUp)).SpecialCells(xlCellTypeVisible)
    On Error GoTo 0
    If rData Is Nothing Then Exit Sub   'No visible cells
    If rData.Row < 2 Then Exit Sub      'No data

    ReDim aResults(1 To rData.Cells.Count, 1 To 1)
    For Each DataCell In rData.Cells
        i = i + 1
        aResults(i, 1) = DataCell.Value & " " & DataCell.Offset(, 1).Value & " " & DataCell.Offset(, 2).Value & " " & DataCell.Offset(, 3).Value
    Next DataCell

    rDest.Resize(UBound(aResults, 1)).Value = aResults

End Sub
Sub-tgr()
将wb设置为工作簿
将wsData设置为工作表
将wsDest设置为工作表
Dim rData作为范围
暗视范围
Dim数据单元作为范围
Dim aResults()作为字符串
我想我会坚持多久
设置wb=ActiveWorkbook
设置wsData=wb.Worksheets(“Pipeline Simplified”)工作表,从中获取连接的数据
将wsDest=wb.Worksheets(“Sheet1”)设置为输出结果的工作表
在将开始输出结果的目标工作表上设置rDest=wsDest.Range(“A2”)单元格
出错时继续下一步
设置rData=wsData.Range(“G2”,wsData.Cells(wsData.Rows.Count,“G”).End(xlUp)).SpecialCells(xlCellTypeVisible)
错误转到0
如果rData为空,则退出“无可见单元格”
如果rData.Row<2,则退出Sub“无数据”
重拨结果(1到rData.Cells.Count,1到1)
对于rData.Cells中的每个数据单元
i=i+1
aResults(i,1)=DataCell.Value&&&DataCell.Offset(,1)。Value&&DataCell.Offset(,2)。Value&&DataCell.Offset(,3)。Value
下一个数据单元
rDest.Resize(uBond(arResults,1))。值=arResults
端接头

什么是“搞乱我的结果”?请注意,非限定的
工作表
成员调用(
单元格
范围
)隐式引用的是
活动工作表
。结果是否写错了表?尝试使用特定的
工作表
对象引用限定
单元格
范围
调用。或者它正在填充到隐藏的行?尝试分配到
.SpecialCells(xlCellTypeVisible).FormulaR1C1
。当我想要避开隐藏单元格时,我会从隐藏单元格中提取结果。这有意义吗?“搞乱我的结果”到底代表什么?请注意,非限定的
工作表
成员调用(
单元格
范围
)隐式引用的是
活动工作表
。结果是否写错了表?尝试使用特定的
工作表
对象引用限定
单元格
范围
调用。或者它正在填充到隐藏的行?尝试分配到
.SpecialCells(xlCellTypeVisible).FormulaR1C1
。当我想要避开隐藏单元格时,我会从隐藏单元格中提取结果。这有意义吗?这可以连接可见单元格中的值,但会将OP的逻辑从计算/公式更改为普通值-这可能适合OP的需要,但他们应该知道,修改任何单个连接的值将不再重新计算结果列(即需要重新执行宏以更新值)@MathieuGuindon这是一个好的观点,我没有考虑到。我将进入W列的公式解释为连接值的占位符,因为该公式与其连接的数据放在同一工作表上,而在问题中,OP指定他希望结果放在不同的工作表上,所以这只是跳过了that(不可否认,已解释)中间步骤。如果它确实需要生成公式,我肯定会更新答案。感谢Tiger-将尝试此操作!我知道(我正在努力变得更好)-哪一行细化单元格以连接?下标超出范围错误-aResults(I,1)=DataCell.Value&〃和DataCell.Offset(,1).Value&&&DataCell.Offset(,2)。Value&&DataCell.Offset(,3).Value.这是因为未定义数据单元吗?@SuperLoz我无法再现该错误。只有当结果不够大,无法容纳rData时才会发生此错误,但这种情况永远不会发生,因为它是基于rData定义的。我需要查看您的数据的外观,以尝试再现该错误。同时,您可以尝试更改<代码>重拨要重拨的行<代码>重拨结果(1到65000,1到1)并查看这是否有帮助。这可以连接可见单元格中的值,但会将OP的逻辑从计算/公式更改为普通值-这可能适合OP的需要,但他们应该知道,修改任何单个连接的值将不再重新计算结果列(即需要重新执行宏以更新值)。@MathieuGuindon