vba 遍历sheet1的B列数据(数据为字符串)

vba 遍历sheet1的B列数据(数据为字符串),和arr(Dim arr As Range)对象中的数据比较,把和arr中不相同的数据添加到brr中

楼主,你说的这个操作,有简便的方法,excelhome上就有的,不过是要调用api,说实话,我不太懂那个,用的太少了,而且有的电脑调用api会出错,不要问我为什么,我都快被折磨死了。


如果是我做的话,我用了下面的方式撒...


Sub TEST()

Dim i As Long, k As Long

Dim Flag As Integer

Dim RowCt As Long

Dim arr() As String

Dim tmp As String

Dim brr() As String


arr = Split("A,E,F,G,P,Q", ",")   '数组arr定义下


RowCt = Application.CountA(Sheet1.Range("B:B"))

'B列非空行的数量,方便下面的循环对比,不过这个方法适用于B列数据是连续的,如果2行中间有1个或多个空行,会导致B列后面有几行没有比较

'用下面方法可以避免上述问题,不细讲了,万用法,适用性高,记住吧

'RowCt=Cells(Rows.Count,"B").End(xlup).row


'开始循环了。。。

For i = 1 To RowCt

    Flag = UBound(Filter(arr, Sheet1.Cells(i, "B")))

   'Fliter作用是从中arr中筛选出B列的当前字符串,Ubound就是看数组的元素个数哈

   '如果当前字符串在arr中,那么Flag=0。(等0是因为数组的第一个元素索引号是arr(0),如果在程序的开头限定了索引号从1开始,那么Flag=1)


‘不等于0,就表示不在arr中

    If Flag <> 0 Then

        tmp = Sheet1.Cells(i, "B").Value & "," & tmp

'对于不在arr中的字符,先用tmp连接起来

        k = k + 1

    End If

Next i


'将tmp传送给数组brr,和上面arr定义方法是一样的。不过brr最后一个元素是空的

'如果不想是空,可以先对tmp处理下,如tmp=left(len(tmp)-1),把最后一个“,”去掉

brr = Split(tmp, ",")


'下面是为了把brr表示出来,注意看下索引号的变化,不细说了

'主要还是因为brr最后一个元素是空,下面的方法没有要最后的元素的

For i = 1 To UBound(brr)

    Sheet1.Cells(i, "G") = brr(i - 1)

Next i


End Sub

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网