好的,问候这一切是我的第一篇文章(当然不是我的最后一篇,因为我是这个项目的唯一工作人员)。我的VBA体验很小,所以你看到的有点像我的“你好世界”。
总而言之......我想比较动态范围表中的两行(在打开时从访问数据库中更新)并找到与前四列完全匹配的行(参见下面的代码)。
然后将第七列与两个比较行中的最高值进行比较。 (Full,Adequate和Basic是要从最高到最低比较的值)
然后,在满足所有这些标准后,丢掉最低值并保持最高值。 FOR ALL ROWS(换句话说是While循环)。
此代码用于我工作地点的培训数据库,当员工继续培训时,有许多相同的条目具有不同的理解水平。这段代码应该完成所有的培训,并保持最高价值(最好的代表性)和其他“obselete”条目。
这是我毫无价值的代码:
Sub RemoveDuplicates()
Dim Bottom As Integer
Dim FalseBottom As Integer
'remove lower leveled duplicate entries
Bottom = CInt(Cells(Rows.Count, "A").End(xlUp).Row) 'initializes the bottom of the list (total number of entries)
Do Until Bottom = 0
FalseBottom = 1
If Not IsEmpty(Cells(Bottom, "A")) Then
Do Until FalseBottom = Bottom
If ((Cells(FalseBottom, "A").Text = Cells(Bottom, "A").Text) And (Cells (FalseBottom, "B").Text = Cells(Bottom, "B").Text) And (Cells(FalseBottom, "C").Text = Cells(Bottom, "C").Text) And (Cells(FalseBottom, "D").Text = Cells(Bottom, "D").Text)) Then
'(Cells(FalseBottom, "G").Text > Cells(Bottom, "G").Text)
If (Cells(Bottom, "G").Text = "Full") Then
Rows(FalseBottom).Delete Shift:=xlUp
FalseBottom = FalseBottom - 1
End If
If ((Cells(Bottom, "G").Text = "Adequate") And (Cells(FalseBottom, "G").Text = "Basic")) Then
Rows(FalseBottom).Delete Shift:=xlUp
FalseBottom = FalseBottom - 1
End If
If (Cells(FalseBottom, "G").Text = "Full") Then
Rows(Bottom).Delete Shift:=xlUp
End If
If ((Cells(FalseBottom, "G").Text = "Adequate") And (Cells(Bottom, "G").Text = "Basic")) Then
Rows(Bottom).Delete Shift:=xlUp
End If
End If
FalseBottom = FalseBottom + 1
Loop
End If
Bottom = Bottom - 1
Loop
End Sub
为了更好地解释,在我的excel表中我有
A |B |C |D |E |F |G
---------------------------------------------------------------
First|Last |Category|Task |Performance|Requirement|Understanding
---------------------------------------------------------------
Joe |Smoe |Cleaning|Toilets|10 |10 |Basic
Joe |Smoe |Cleaning|Toilets|10 |10 |Adequate
Joe |Smoe |Cleaning|Toilets|10 |10 |Full
Joe |Smoe |Cleaning|Showers|10 |10 |Basic
Jane |Plane|Cleaning|Toilets|10 |10 |Basic
...
...
基本上有一种方法可以找到(在所有行中)前4列匹配的位置,然后比较最后一列以查看哪个是最高级别并丢弃其他匹配?
答案 0 :(得分:0)
固定问题!!
将.Text更改为.Value
拆分If语句
为了便于阅读,将值分配给自己的变量
并且像魅力一样工作......不知道为什么,但我会接受它。