gpt4 book ai didi

excel - 在 Excel VBA 中删除一行

转载 作者:行者123 更新时间:2023-12-01 16:37:00 25 4
gpt4 key购买 nike

我有这段代码,它从列表中查找项目的 Excel 行并从列表中删除该项目。我想要的...是同时删除 Excel 行。

代码在这里

Private Sub imperecheaza_Click()
Dim ws As Worksheet
Dim Rand As Long
Set ws = Worksheets("BD_IR")
Rand = 3
Do While ws.Cells(Rand, 4).Value <> "" And Rand < 65000
If ws.Cells(Rand, 4).Value = gksluri.Value * 1 And ws.Cells(Rand, 5).Value = gksluri.List(gksluri.ListIndex, 1) * 1 Then
ws.Range(Rand, 1).EntireRow.Delete '(here I want to delete the entire row that meets the criteria from the If statement)
gksluri.RemoveItem gksluri.ListIndex
Exit Do
End If
Rand = Rand + 1
Loop
End Sub

我添加 ws.Range(Rand,1).EntireRow.Delete 的地方是我想删除整行但我不知道该怎么做的地方。我想要什么...如果它在单元格中找到相同的值(例如我的列表中的某些选定项目),则能够删除 Excel 中的整行和列表框中的项目。它可以从列表框中删除该项目,但我也不知道如何删除该行

最佳答案

克里斯·尼尔森的解决方案很简单,而且效果很好。稍微短一点的选择是......

ws.Rows(Rand).Delete

...注意删除行时无需指定 Shift,因为根据定义,不可能向左移动

顺便说一句,我删除行的首选方法是使用...

ws.Rows(Rand) = ""

...在初始循环中。然后,我使用排序函数将这些行推到数据的底部。这样做的主要原因是删除单行可能是一个非常慢的过程(如果要删除>100)。它还确保按照 Robert Ilbrink 的评论不会遗漏任何内容

您可以通过录制宏并减少代码来学习排序代码,如expert Excel video中所示。 。我怀疑最简洁的方法 (Range("A1:Z10").Sort Key1:=Range("A1"), Order1:=xlSortAscending/Descending, Header:=xlYes/No) 只能在预发现2007 版本的 Excel...但您始终可以减少 2007/2010 等效代码

还有一点...如果您的列表尚未按列排序并且您希望保留顺序,则可以在循环时将行号“Rand”粘贴到每行右侧的备用列中。然后,您可以按该评论排序并将其删除

如果您的数据行包含格式,您可能希望找到新数据范围的末尾并删除之前清除的行。这是为了减小文件大小。请注意,过程末尾的单个大删除不会像删除单行那样损害代码的性能

关于excel - 在 Excel VBA 中删除一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7851859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com