gpt4 book ai didi

arrays - 如果元素是某个值则删除数组中的元素VBA

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

我有一个全局数组,prLst(),长度可变。它将数字作为字符串 "1"Ubound(prLst) 接收。但是,当用户输入 "0" 时,我想从列表中删除该元素。我编写了以下代码来执行此操作:

count2 = 0
eachHdr = 1
totHead = UBound(prLst)

Do
If prLst(eachHdr) = "0" Then
prLst(eachHdr).Delete
count2 = count2 + 1
End If
keepTrack = totHead - count2
'MsgBox "prLst = " & prLst(eachHdr)
eachHdr = eachHdr + 1
Loop Until eachHdr > keepTrack

这不起作用。如果元素为 "0",如何有效删除数组 prLst 中的元素?

<小时/>

注意:这是一个更大程序的一部分,可以在此处找到该程序的描述: Sorting Groups of Rows Excel VBA Macro

最佳答案

数组是具有一定大小的结构。您可以在 vba 中使用动态数组,可以使用 ReDim 缩小或增大该数组,但不能删除中间的元素。从您的示例中不清楚您的数组如何工作或如何确定索引位置(eachHdr),但您基本上有 3 个选项

(A) 为您的数组编写自定义“删除”函数(未经测试)

Public Sub DeleteElementAt(Byval index As Integer, Byref prLst as Variant)
Dim i As Integer

' Move all element back one position
For i = index + 1 To UBound(prLst)
prLst(i - 1) = prLst(i)
Next

' Shrink the array by one, removing the last one
ReDim Preserve prLst(LBound(prLst) To UBound(prLst) - 1)
End Sub

(B) 只需将“虚拟”值设置为值,而不是实际删除元素

If prLst(eachHdr) = "0" Then        
prLst(eachHdr) = "n/a"
End If

(C) 停止使用数组并将其更改为 VBA.Collection。集合是一个(唯一的)键/值对结构,您可以在其中自由添加或删除元素

Dim prLst As New Collection

关于arrays - 如果元素是某个值则删除数组中的元素VBA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7000334/

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