首页 > 解决方案 > 用 VBA 连接单元格内容

问题描述

Excel 中的原始数据集如下所示:

原始数据集

但我想将例如单元格 A3:A4 转置为 B4:C4。在 Excel 中,我只需要复制单元格,然后在单元格 B4 中单击鼠标右键,然后单击转置复制单元格。但是由于有 100k 行,我需要找到一个好的解决方案来做到这一点。

一个问题是在单元格之间,我有“第一部分”、“第二部分”、“第三部分”之类的文本内容,我不想转置它。

对于第一节的意思,应该只考虑A3和A4等。

这是图片,我应该是什么样子。

[ 这就是我要的2

我记录了宏,但我不知道应该在哪里用“IF-Clause”告诉他们它应该只考虑除黄色单元格之外的所有内容。

Sub transponieren()
'
' transponieren Makro
'

'
    Range("A3:A4").Select
    Selection.Copy
    Range("B4").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
End Sub

标签: excelvbaexcel-formula

解决方案


您可能正在寻找的“测试”就是IsNumeric()测试。以下代码建议假定您的数据在 Sheet1 上,并且数字实际上是数字而不是文本。可能有一个更优雅的解决方案,但这确实有效:

Sub transposeNumbers()
Dim c As Range, LastRow As Long, TopN As Long, LastN As Long

LastRow = Sheet1.Range("A" & Rows.Count).End(xlUp).Row

For Each c In Sheet1.Range("A3:A" & LastRow)

    If IsNumeric(c.Offset(-1, 0)) = False Then
    
        TopN = c.Row
      
    Else
    
        If IsNumeric(c.Offset(1, 0)) = False Or c.Row = LastRow Then
        
            LastN = c.Row
            
            Sheet1.Range(Sheet1.Cells(TopN, 1), Sheet1.Cells(LastN, 1)).Copy
            c.Offset(0, 1).PasteSpecial Paste:=xlPasteAll, transpose:=True
            Application.CutCopyMode = False
        
        End If
    
    End If

Next c

End Sub

推荐阅读