将行与标题进行比较,然后在列中插入值并在 VBA 中进行重复检查

Posted

技术标签:

【中文标题】将行与标题进行比较,然后在列中插入值并在 VBA 中进行重复检查【英文标题】:Compare Rows with Header then insert value in column with duplicate check in VBA 【发布时间】:2021-05-23 06:46:09 【问题描述】:

大家好,我是 VBA 代码的新手,我被这个代码卡住了。我希望有人帮助我..

第 1 步:将行与每个 SU 标头进行比较。在第 2 行中,SU_BS 中的值为 211。一旦 SU 中有值,NAME2 列应显示对应的 NAME (s1) 与 SU 值 (211)。所以 NAME2 应该显示 s1 211。

第 2 步:一旦 NAME2 显示值,想要移动到下一行而不进一步检查 SU 标题。

第 3 步:根据第 1 步和第 2 步,下一行中的 NAME2 列也将显示 S1 211。但我需要的是在填充值时,NAME2 列应该检查重复值。如果存在重复值,则控制移动到下一个 SU 标头。如果 SU 标头没有值,如果值存在则转到下一个 SU 标头 NAME2 应该在 row3 中显示值 (S1 ZY)。

【问题讨论】:

【参考方案1】:

使用数组依次存储每一行​​和上一行,比较元素直到不同。

Option Explicit

Sub macro()

    Dim ws As Worksheet
    Set ws = ActiveSheet
    
    Dim r As Long, c As Integer, n As Integer
    Dim k As Integer, kLast As Integer
    Dim ar(4, 1) As String
    
    r = 2 ' start row
    While Len(ws.Cells(r, 1)) > 0
    
        ' fill array
        For n = 0 To 3
           c = n * 2 + 4
           ar(n, 1) = ws.Cells(r, c)
        Next
        
        k = 0
        If r > 2 Then
           ' compare
           While k <= kLast And ar(k, 1) = ar(k, 0)
              k = k + 1
           Wend
           ' skip pass any blanks
           While Len(ar(k, 1)) = 0 And k <= 3
              k = k + 1
           Wend
        End If
        
        ' output
        ws.Cells(r, 3) = ws.Cells(r, 2) & " " & ar(k, 1)
        
        ' remember last row
        For n = 0 To 3
           ar(n, 0) = ar(n, 1)
        Next
        kLast = k
        r = r + 1
        
    Wend
    MsgBox "Done"
End Sub

【讨论】:

以上是关于将行与标题进行比较,然后在列中插入值并在 VBA 中进行重复检查的主要内容,如果未能解决你的问题,请参考以下文章

插入数据并在列中添加前一行数据

SQL:将行与列中的逗号分隔值合并

根据第一列中的字母数将行与上一行连接起来

在表列中查找值并返回表行号 - VBA

访问 VBA:在列中查找最大数并加 1

如果它们与使用 vba 的条件匹配,则在列中查找最小值和中值