将行与标题进行比较,然后在列中插入值并在 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 中进行重复检查的主要内容,如果未能解决你的问题,请参考以下文章