我是一名 Excel 基础用户,正在处理 2016 版的 Excel 工作簿,有以下查询:
我在一本 Excel 书中有 9 个工作表,每个工作表中都有一个特定的列,其中显示一系列参考编号,如下所示:
GAD5-CDC-T2-349-230315-DWG-PP-STR-0114-0
GAD5-MGM-T2-349-230315-DWG-PP-STR-0114-0
GAD5-CDC-T2-349-230315-DWG-SD-STR-0114-0
GAD5-MGM-T2-363-250315-DWG-PP-STR-0119-0
GAD5-CDC-T2-363-250315-DWG-DD-STR-0119-0
GAD5-CDC-T2-363-250315-DWG-BD-STR-0119-0
GAD5-CDC-T2-259-51-050515-DWG-FD-S-0233-00
GAD5-CDC-T2-259-51-050515-DWG-TD-S-0233-00
GAD5-MGM-T2-259-51-050515-DWG-LD-S-0233-00
GAD5-MGM-T3-119-25-DDS-ST-1568-02
GAD5-MGM-T3-119-25-DDS-RT-1568-02
GAD5-MGM-T3-119-25-DDS-OT-1568-02
等等,请注意:这些数字不遵循任何顺序。我想计算倒数第二个数字出现的次数。在这个例子中
- 0114 是 3 次
- 0119 是 3 次
- 0233 是 3 次 &
- 1568 是 3 倍
我想用公式计算这个,并将结果作为计数器放在任何其他单元格中。如果您能帮助我,我将不胜感激。
答案1
根据您提供的信息,这个 VBa 可以做到这一点。我知道您没有要求使用 VBa,但我写了这个以防您没有得到其他答案,它可能会帮助其他人(而且它有效!)
您需要将 B 列格式化为文本类型(假设 B 列是您想要结果的位置)
我假设数据将按照您的例子连续。
Sub WalkThePlank()
Dim startRow As Integer
startRow = 1 'Update this cap'ain as ye like
Dim column As String
column = "A" 'The column for ye data
Dim resultsColumn As String
resultsColumn = "B" 'This be the column you want the results!
Dim resultsColumnCount As String
resultsColumnCount = "C" 'This be the column you want the results!
Do While (Range(column & startRow).Value <> "")
Dim content As String
content = Range(column & startRow).Value
Dim splitty() As String
splitty = Split(content, "-")
Dim resultDigit As String ' must be string as your values start with a 0
resultDigit = splitty(UBound(splitty) - 1)
Dim resultsRow As Integer
resultsRow = 1
Do While (Range(resultsColumn & resultsRow).Value <> "")
Dim resultsVal As String
resultsVal = Range(resultsColumn & resultsRow).Value
If resultsVal = resultDigit Then
Range(resultsColumnCount & resultsRow).Value = Range(resultsColumnCount & resultsRow).Value + 1
End If
If resultsVal <> resultDigit And Range(resultsColumn & resultsRow + 1).Value = "" Then
Range(resultsColumn & resultsRow + 1).Value = resultDigit
Range(resultsColumnCount & resultsRow + 1).Value = 0
End If
resultsRow = resultsRow + 1
Loop
If (Range(resultsColumn & "1").Value = "") Then
Range(resultsColumn & "1").Value = resultDigit
Range(resultsColumnCount & "1").Value = 1
End If
startRow = startRow + 1
Loop
End Sub
前
后
数据中唯一的区别是我没有使用每种数据 3 个,而是使用了不同的值来显示其计数正确。