我有一個包含項目信息的工作表。工作表包含一個包含每個項目風險的列。項目與其風險之間存在一對多的關係。Excel - 根據換行符向單元格文本添加序列號
當前項目的風險被添加到單個單元格中,並通過換行符分隔。我需要在每個風險開始時添加順序標識符。因此,例如在一個特定的單元格內,它應該看起來像這樣。如果可能的話,序號應該是粗體的。
1)。**風險1
2)。**風險2
3)。**風險3
等
如何解決這個任何建議將不勝感激。
我有一個包含項目信息的工作表。工作表包含一個包含每個項目風險的列。項目與其風險之間存在一對多的關係。Excel - 根據換行符向單元格文本添加序列號
當前項目的風險被添加到單個單元格中,並通過換行符分隔。我需要在每個風險開始時添加順序標識符。因此,例如在一個特定的單元格內,它應該看起來像這樣。如果可能的話,序號應該是粗體的。
1)。**風險1
2)。**風險2
3)。**風險3
等
如何解決這個任何建議將不勝感激。
這裏就是我想通過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
我從以前的線程利用一些知識,喜歡的事實,輸入可能是一個數組(和整體功能可能在使用數組公式),但只會是一維的。
我已經使這個相當一般的重新格式化。它可以使用任何輸入分隔符(在你的情況下,一個換行符)列表和輸出使用任何所需的分隔符(在你的情況下,仍然是一個換行符)。 numFormat
參數使用格式化功能並支持您在Excel中常見的格式。如果您需要幫助,請檢查the documentation。
默認參數已經針對您的示例進行了調整 - 換行符作爲分隔符和「0」。「作爲編號格式。
您可以對每個單元格值使用Split
函數來創建一系列風險,然後將每個風險與序列ID進行前綴。然後,您可以使用Join
函數將數組放回到單個值中以更新單元格。
根據換行符如何進入細胞,你可能需要在下面的示例代碼中使用vbCrLf
,或vbNewLine
代替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
前:
後:
這是一個格式問題,您可以手動對其進行排序,也可以在單元格字符串中的每個換行符(vbCrlf)字符後面寫入vba來添加數字。使用換行符作爲分隔符將數組中的每個元素分開並將序列號連接到每個字符串,然後將其全部放入單元格中。 – newguy
不是最清晰的問題陳述。你可能應該鏈回到以前的文章,也許提供你用來創建這個輸出的當前函數,至少指定你想使用一個UDF與數組公式一致。對於有興趣的人來說,以下是原始問題(http:// stackoverflow。com/a/38920761/3397613) - 查看更多信息的評論 – Mikegrann