所以我有几列数字,它的变量让我们说3只是例如
Column B Column C Column D
**520** 600 **550**
基于其他过程,我们可以说列A和列C都是粗体。我想将它们连接成一个单元格并保持粗体格式,如下所示:
Column A
**520**,600,**550**
这将在可变数量的行上重复,一些列有两个粗体,一些粗体,一些没有。
任何人都可以通过简单的方式获得大胆的格式吗?我得到了字符串cat并写入新单元格,但我不知道如何将格式添加到新的连接单元格。下面的代码只是内部循环,为了简单起见,我使用2作为单行而不是变量。
下面是我对内循环的看法,粗体没有贯彻:
Sub OneCell()
Dim i as Integer 'column number
Dim str1 as String 'String storage
i = 2 'initialize col num
str1 = Cells(2, i).value 'initialize str1
'Outer loop
Do
'....code for outer loop iterating rows
'Inner loop to concatenate values into one string
Do
str1 = str1 & "," & Cells(2,i+1).Value
i = i + 1
Loop until Cells(2,i+1).Value = ""
'Put concatenated string in cell(2,1)
Cells(2,1).Value = str1
Loop Until 'some condition of rows is met
End Sub
答案 0 :(得分:1)
我之前只是张贴过这个,因为我刚开始这么做,然后被牵制了。
Sub OneCell()
Dim i As Integer 'column number
Dim str1 As String 'String storage
Dim v(1 To 100, 1 To 3) 'the 100 limit is arbitrary
Dim j As Long
i = 2 'initialize col num
str1 = Cells(2, i).Value 'initialize str1
Do
If Cells(2, i + 1).Font.Bold Then
j = j + 1
v(j, 1) = 1
v(j, 2) = Len(str1) + 2
v(j, 3) = Len(Cells(2, i + 1))
Else
j = j + 1
v(j, 1) = 0
End If
str1 = str1 & "," & Cells(2, i + 1).Value
i = i + 1
Loop Until Cells(2, i + 1).Value = ""
With Cells(2, 1)
.NumberFormat = "@"
.font.bold=false
.Value = str1
End With
For i = 1 To j
If v(i, 1) = 1 Then
Range("A2").Characters(v(i, 2), v(i, 3)).Font.Bold = True
End If
Next i
End Sub
答案 1 :(得分:0)
这实际上比我想象的要复杂一些,但我确实找到了一种让它工作的方法(换句话说,我测试了代码)。可能有一种更有效的方法,但这种方法适用于3单元格范围选择。您需要修改范围以适合您的程序。
Sub ConcatWithBold()
Dim str1 As String
'first build string and identify bolded cells with *
Dim c As Range
For Each c In Selection
If c.Font.Bold = True Then
str1 = str1 & "," & "*" & c.Value
Else
str1 = str1 & "," & c.Value
End If
Next
str1 = Mid(str1, 2) 'to remove first comma
Dim iCnt As Integer
For iCnt = 1 To Len(str1)
If Mid(str1, iCnt, 1) = "*" Then
'it's a bolded cell so make next 3 characters bold
With Selection.Cells(1, 1).Offset(1)
.Characters(iCnt, 3).Caption = Mid(str1, iCnt + 1, 3) 'set characters (add 1 to iCnt to skip asterik marking bold)
.Characters(iCnt - 1, 3).Font.Bold = True 'make bold (-1 to include first character)
iCnt = iCnt + 3 'jump to next comma
End With
Else
With Selection.Cells(1, 1).Offset(1)
.Characters(iCnt, 1).Caption = Mid(str1, iCnt, 1)
.Characters(iCnt - 1, 1).Font.Bold = False '(-1 to include character just set
End With
End If
Next
End Sub
答案 2 :(得分:0)
所以我的评论不再出现在你的答案之下,@ SRJ。所以生病添加在这里(我知道我不应该,但似乎所有那些工作此刻,我道歉)。我通过一些调整得到了它。
在开始时将i初始化为1(如果你没有,则会移动粗体)
然后在With块语句之前添加一个Mid属性 STR1 =中(str1,2)
我之所以这样做,是因为我发现第一个单元格是否是粗体,它不会加粗第一组字符(但它现在就是doea)。现在我遇到了另一个问题。我需要能够在一个可变范围内循环设置整个事物,因为这将发生在5-15次的任何地方,具体取决于我有多少行。我尝试使用cells属性作为范围引用,我之前总是先工作但由于某种原因它给对象_global的"方法范围失败"该行上的错误...有时候没有,但它仍然无法正确地加粗字符串。