|
本帖最后由 zorsite 于 2013-4-24 13:17 编辑
根据之前的思路,查找了一些资料,完善了代码。
蓝桥玄霜版主用了两层For循环,还用了goto,作为初学者看起来有些吃力。
于是我就在想,不就是判断品牌吗,拿出一个型号来,看看它型号前两个字符能不能在各品牌序列中找到。如果能找到,就把它归为一类。
而且蓝桥玄霜版主把程序主框架都搭起来了,我就在他的基础上改了一下。主要就是把两个For循环改为一个For循环,其他的没有变动。
- Sub 手机品牌分类()
- Dim Myr&, Arr, x&
- Dim d, d1, d2
- Set d = CreateObject("Scripting.Dictionary")
- Set d1 = CreateObject("Scripting.Dictionary")
- Set d2 = CreateObject("Scripting.Dictionary")
- Myr = [a65536].End(xlUp).Row
- Arr = Range("a2:a" & Myr)
- Range("c2:e" & Myr).ClearContents
- my = Array("MOTO", "诺基亚", "三星", "索爱")
- gc = Array("OPPO", "联想", "天语", "金立", "步步高", "波导", "TCL", "酷派")
- '----------------------------------------------------------------------------
- For x = 1 To UBound(Arr)
- arr1 = Filter(my, Left(ActiveSheet.Cells(x + 1, 1), 2), 1)
- arr2 = Filter(gc, Left(ActiveSheet.Cells(x + 1, 1), 2), 1)
- If UBound(arr1) = 0 Then
- d(Arr(x, 1)) = ""
- ElseIf UBound(arr2) = 0 Then
- d1(Arr(x, 1)) = ""
- Else
- d2(Arr(x, 1)) = ""
- End If
- Next
- '-------------------------------------------------------------------------------
- Range("c2").Resize(UBound(d.keys) + 1, 1) = Application.Transpose(d.keys)
- Range("d2").Resize(UBound(d1.keys) + 1, 1) = Application.Transpose(d1.keys)
- Range("e2").Resize(UBound(d2.keys) + 1, 1) = Application.Transpose(d2.keys)
- End Sub
复制代码
空数组的概念:空数组首先它必须是数组,其次它没有元素。
VBA用UBound(arr)=-1来表示空数组。
如果返回的数组的上标为0,也即UBound(arr)=0的时候,说明它有1个元素存在;如果返回的数组的上标为3,也即UBound(arr)=3的时候,说明它有4个元素存在。
数组默认下标下界是0,所以空数组有一个特性就是下界大于上界。
例:
Sub Ehp_arr()
Dim i!
Dim arr, arr2, arr3
arr = Array("face", "计费", "Sheet1")
arr2 = Array("单价", "计费", "表")
For i = 0 To UBound(arr2)
arr3 = Filter(arr, arr2(i))
'Filter函数返回空数组
If LBound(arr3) > UBound(arr3) Then
'通过比较arr的上下界来判断数组是否为空
MsgBox "数组arr3是一个空数组"
Else
MsgBox "数组arr3不是一个空数组"
End If
Next
End Sub
|
|