【问题标题】:How to merge several cells using VBA如何使用 VBA 合并多个单元格
【发布时间】:2019-06-22 02:29:53
【问题描述】:

我对excel和VBA有一些问题,因为不知道有多少知识。我从pdf复制文本,这很糟糕。 我有包含一些文本的单元格。 问题是一个段落中的文本被分解为多个单元格。每个段落的开头是一个粗体字(例如 CLR.),用于描述文本的其余部分。因此,它定义了每个段落应该从哪里开始。如何将这些单元格合并为一个?

我看到

我要

【问题讨论】:

  • 如何确定要合并哪些行以及从哪里开始新行?
  • 我想用粗体声明开始新行。在我的屏幕上是 CLR、CLI、Razor 等。明白了吗?
  • 这背后的逻辑是什么?
  • 所以,如果我有 500 多个单元格并且我应该连接所有这些单元格,那么手工制作将非常困难
  • 你要做的是连接,而不是合并

标签: excel vba


【解决方案1】:
Sub MergeText()

    Dim strMerged$, r&, j&, i&

    r = 1
    Do While True
        If Cells(r, 1).Characters(1, 1).Font.Bold Then
            strMerged = "": strMerged = Cells(r, 1)
            r = r + 1
            While (Not Cells(r, 1).Characters(1).Font.Bold) And Len(Cells(r, 1)) > 0
                strMerged = strMerged & Cells(r, 1)
                r = r + 1
            Wend
            i = i + 1: Cells(i, 2) = strMerged
            Cells(i, 2).Characters(1, InStr(1, strMerged, ".", vbTextCompare)).Font.Bold = True
        Else
            Exit Do
        End If
    Loop

End Sub

【讨论】:

    【解决方案2】:

    修改(如果需要)并尝试:

    Option Explicit
    
    Sub test()
    
        Dim LastRow As Long, i As Long, j As Long, Count As Long
        Dim str As String
    
        With ThisWorkbook.Worksheets("Sheet1") 'Change sheet name if needed
    
            LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
    
            For i = LastRow To 2 Step -1
    
                If (UCase(Left(.Range("A" & i), 1)) <> Left(.Range("A" & i), 1)) And UCase(Left(.Range("A" & i - 1), 1)) = Left(.Range("A" & i - 1), 1) Then
    
                    Count = 0
    
                    For j = 1 To Len(.Range("A" & i - 1))
    
                        If .Range("A1").Characters(j, 1).Font.FontStyle = "Bold" Then
                            Count = Count + 1
                        Else
                            Exit For
                        End If
    
                    Next j
    
                    str = .Range("A" & i - 1).Value & " " & .Range("A" & i).Value
    
                    With .Range("A" & i - 1)
                        .Value = str
                        .Font.Bold = False
    
                        With .Characters(Start:=1, Length:=Count).Font
                            .FontStyle = "Bold"
                        End With
    
                    End With
    
                    .Rows(i).EntireRow.Delete
    
                ElseIf (UCase(Left(.Range("A" & i), 1)) <> Left(.Range("A" & i), 1)) And UCase(Left(.Range("A" & i - 1), 1)) <> Left(.Range("A" & i - 1), 1) Then
    
                    str = .Range("A" & i - 1).Value & " " & .Range("A" & i).Value
    
                    With .Range("A" & i - 1)
                        .Value = str
                        .Font.Bold = False
                    End With
    
                    .Rows(i).EntireRow.Delete
    
                End If
    
            Next i
    
        End With
    
    End Sub
    

    【讨论】:

    • 干得好!但有一件事:如果我们有粗体单元格,我的意思是我们的单元格具有粗体属性,那么所有字符串都将具有粗体格式。但我只需要加粗我的关键字,而不是所有字符串。你认识我吗?
    猜你喜欢
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    • 2017-04-24
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 2017-11-16
    • 1970-01-01
    相关资源
    最近更新 更多