如何连接和格式化输出的特定部分

问题描述 投票:0回答:1

假设我们有一张包含数百行和数十列的表,例如这个:

我需要完成的是将 B、F、M 列的内容连接到一个新工作表中,格式如下:

让我们更好地解释一下,我必须将 B 列的内容放在括号和粗体中,并在同一行上连接 F 列的内容,并用换行符连接 M 列的斜体内容。

虽然我可以通过 Excel 公式执行此操作并手动更改输出格式,但我需要对表的所有行执行此操作,因此 VBA 是解决此问题的唯一可行方法。

我请求任何 VBA 专家的帮助。

这是仅用于表中特定行的所需输出的公式:

="("&Sheet1!B2&")"&Sheet1!F2&CHAR(10)&Sheet1!M2 

我正在寻找的是一种 VBA 代码,它能够以指定格式(粗体、换行、斜体)连接新工作表中表格所有行的 3 个不同列的内容。

根据要求,这是在对 3 列的第一个箭头进行连接操作后手动格式化输出后记录的 VBA 代码:

   Range("B2").Select
    ActiveCell.FormulaR1C1 = "(SPC-PRO-001)TEXT1: random" & Chr(10) & "Full"
    With ActiveCell.Characters(Start:=1, Length:=0).Font
        .Name = "Calibri"
        .FontStyle = "Regular"
        .Size = 11
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
        .ThemeFont = xlThemeFontMinor
    End With
    With ActiveCell.Characters(Start:=1, Length:=13).Font
        .Name = "Calibri"
        .FontStyle = "Bold"
        .Size = 11
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
        .ThemeFont = xlThemeFontMinor
    End With
    With ActiveCell.Characters(Start:=14, Length:=14).Font
        .Name = "Calibri"
        .FontStyle = "Regular"
        .Size = 11
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
        .ThemeFont = xlThemeFontMinor
    End With
    With ActiveCell.Characters(Start:=28, Length:=4).Font
        .Name = "Calibri"
        .FontStyle = "Italic"
        .Size = 11
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
        .ThemeFont = xlThemeFontMinor
    End With

我完全意识到大部分代码都是多余的,并且仅对表格的第一个箭头有效。我请求帮助的是一个对表格的所有箭头有效的代码,这需要测量同一箭头的每个单元格的长度以指定所需的格式(粗体或斜体)和 for 循环以覆盖表格的所有箭头.

excel vba format concatenation
1个回答
0
投票

假设 Sheet2 上需要结果,代码会在 A 列中创建未格式化的文本,并在 B 列中创建格式化文本。

Sub boldital()
    Dim trange As Range, target As Worksheet, sourcesheet As Worksheet
    
    Set target = Worksheets("Sheet2")
    Set sourcesheet = Worksheets("Sheet1")
    lastrow = sourcesheet.Range("A" & Rows.Count).End(xlUp).Row
    For i = 2 To lastrow
        a = sourcesheet.Range("B" & i)
        b = sourcesheet.Range("F" & i)
        c = sourcesheet.Range("M" & i)
        alen = Len(a)
        blen = Len(b)
        clen = Len(c)
        sumtext = "(" & a & ")" & b & Chr(10) & c
        Set trange = target.Range("B" & i)
        trange.Offset(0, -1) = sumtext
        trange = sumtext
        If alen <> 0 Then trange.Characters(2, alen).Font.Bold = TRUE
        If clen <> 0 Then trange.Characters(4 + alen + blen, clen).Font.Italic = TRUE
    Next i
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.