基于连续值连接字段
Posted
技术标签:
【中文标题】基于连续值连接字段【英文标题】:Concatenating fields based on consecutive values 【发布时间】:2018-07-04 20:22:49 【问题描述】:我有 2 列,200k 行:
F1 1
F2 0
F3 0
F4 0
F5 0
F6 1
F7 1
F8 0
F9 10
对于所有值 = 0,我想将关联字段与前一个关联字段连接起来。 当有更多连续字段 (4) 时,我希望将所有 (5) 个相关字段连接在一起。
我想要:
F1 1
F2 0 F1|F2|F3|F4|F5
F3 0
F4 0
F5 0
F6 1
F7 1
F8 0 F7|F8
F9 10
目前我有:
Sub mfewj()
N = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To N
If Cells(i, 2) = 0 Then Cells(i, 3).FormulaR1C1 = "=CONCATENATE(R[-1]C[-2],""|"",RC[-2])"
Next i
End Sub
这会返回:
F1 1
F2 0 F1|F2
F3 0 F2|F3
F4 0 F3|F4
F5 0 F4|F5
F6 1
F7 1
F8 0 F7|F8
F9 10
欢迎提出任何建议
【问题讨论】:
用公式代替 vba 好吗? 【参考方案1】:您可以在列表中向后循环:
Option Explicit
Sub ConCatMacro()
Dim i As Long
Dim str As String
i = ActiveSheet.Range("A" & ActiveSheet.Rows.Count).End(xlUp).Row
For i = i To 1 Step -1 'Loops backwards
If Cells(i, 2).Value = 0 Then
If Len(str) > 0 Then
str = Cells(i, 1).Value & "|" & str
Else
str = Cells(i, 1).Value
End If
Else
If Len(str) > 0 Then
Cells(i + 1, 3).Value = Cells(i, 1).Value & "|" & str
str = ""
End If
End If
Next
End Sub
【讨论】:
谢谢!我以前从不知道后退一步! @alex 没问题!再考虑 2 秒钟,您实际上不必向后循环,但无论如何您学到了一些新东西,所以它有很好的副作用:P以上是关于基于连续值连接字段的主要内容,如果未能解决你的问题,请参考以下文章
mysql-重新排序修改排序值-删除数据后排序字段序号断层,重新根据顺序设置连续性的排序值