Excel – 根据换行符将序号添加到单元格文本中

我有一个包含项目信息的工作表。 工作表中包含一个包含每个项目风险的列。 项目与风险之间有一对多的关系。

目前,项目的风险被添加到单个单元格中,并通过换行符分隔。 我需要在每个风险开始时添加顺序标识符。 因此,例如在一个特定的单元格内,它应该看起来像这样。 如果可能的话,序号应该是粗体的。

1)**风险1

2)**风险2

3)。**风险3

等等

任何build议如何解决这个将不胜感激。

以下是我如何通过UDF来处理它:

' Reformats a list from a simple delimitation to a numbered list ' Accepts arrays of strings for inList (allowing array formulas) ' numFormat is a standard Excel-style format string (default "0. ") ' inDelimiter is the delimiter in the input list ' outDelimiter is the delimiter for the output list Public Function TO_NUMBERED_LIST(inList As Variant, Optional numFormat As Variant, _ Optional inDelimiter As Variant, Optional outDelimiter As Variant) As Variant Dim i As Integer, j As Integer ' Set default parameters If IsMissing(numFormat) Then numFormat = "0). " If IsMissing(inDelimiter) Then inDelimiter = vbNewLine If IsMissing(outDelimiter) Then outDelimiter = inDelimiter If IsArray(inList) Then ' Must loop through each entry if using as an array formula Dim outList() As Variant ReDim outList(0 To (UBound(inList) - LBound(inList)), 1 To 1) j = 0 For i = LBound(inList) To UBound(inList) If IsError(inList(i, 1)) Then outList(j, 1) = inList(i, 1) Else outList(j, 1) = MakeNumbered(CStr(inList(i, 1)), CStr(numFormat), CStr(inDelimiter), CStr(outDelimiter)) End If j = j + 1 Next TO_NUMBERED_LIST = outList Else TO_NUMBERED_LIST = MakeNumbered(CStr(inList), CStr(numFormat), CStr(inDelimiter), CStr(outDelimiter)) End If End Function ' Helper function to do the actual work of splitting lists, numbering them, and recombining them Private Function MakeNumbered(inList As String, Optional numFormat As String, _ Optional inDelimiter As String, Optional outDelimiter As String) As String Dim i As Integer Dim tokenArr() As String tokenArr = Split(inList, inDelimiter) For i = 0 To UBound(tokenArr) tokenArr(i) = Format(i + 1, numFormat) & tokenArr(i) Next MakeNumbered = Join(tokenArr, outDelimiter) End Function 

我利用了前一个线程的一些知识,比如input可能是一个数组(而且整个函数可能用在数组公式中),但是只能是一维的。

我已经做了这个相当一般的重新格式化。 它可以在任何input分隔符(在你的情况下,一个换行符)列表和输出使用任何所需的分隔符(在你的情况下,仍然是一个换行符)。 numFormat参数使用格式化function,并支持像在Excel中常见的格式。 如果您需要帮助,请检查文档 。

默认参数已经被调整为你的例子 – 新行作为分隔符和“0)”作为编号格式。

您可以在每个单元格值上使用Splitfunction来创build一系列风险,然后用序号标识每个风险的前缀。 然后,您可以使用Join函数将数组放回到单个值中以更新单元格。

根据换行符进入单元格的方式,您可能需要在以下示例代码中使用vbCrLfvbNewLine而不是vbLf

 Option Explicit Sub AddRiskSequence() Dim rngRisks As Range Dim rngCell As Range Dim varRisks As Variant Dim lngIndex As Long 'set range with risk values Set rngRisks = Sheet2.Range("B2:B4") 'iterate cells in risk column For Each rngCell In rngRisks 'split cell contents by line feed into array varRisks = VBA.Split(rngCell.Value, vbLf) 'iterate array and add sequence ids For lngIndex = 0 To UBound(varRisks) varRisks(lngIndex) = VBA.CStr(lngIndex + 1) & ") " & varRisks(lngIndex) Next lngIndex 'rejoin array and update cell value rngCell.Value = VBA.Join(varRisks, vbLf) Next rngCell End Sub 

之前:

在这里输入图像说明

后:

在这里输入图像说明