假设我们有一张包含数百行和数十列的表,例如这个:
我需要完成的是将 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 循环以覆盖表格的所有箭头.
假设 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