问题描述
大家好,我是 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)。
解决方法
用数组依次存储每一行和上一行,比较元素直到不同。
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