基于连续值连接字段

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-重新排序修改排序值-删除数据后排序字段序号断层,重新根据顺序设置连续性的排序值

sql 语句:一个字段,连续几天值大于0,获得天数

SQL:查找给定字段连续几天具有不同字符串值的记录

自增长字段值的连续递增实现

mysql中如何设置一个字段,表中每增加一个值,这个字段自动产生一个连续的序号?

sql 语句:一个字段,连续几天值大于0,获得天数 怎么解决的?请教