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

问题描述

大家好,我是 VBA 代码的新手,我对这个很着迷。我希望有人帮助我..

第 1 步:将行与每个 SU 标头进行比较。在 row2 中,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 应在第 3 行中显示值 (S1 ZY)。

enter image description here

解决方法

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

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