|
楼主 |
发表于 2009-2-9 22:17
|
显示全部楼层
【2009.2.9】代码起步——我的程序(续)
大家好,今天是元宵节,过完今天,这个年也就结束了,大伙也该安心上班了~然而今天也是我们这个教程的最后一讲,在讲完这个案例之后,相信大家已经从一个对VBA来说完全找不着北的门外汉,慢慢摸到了门边上了,虽然还是在门外,但相信只要继续努力,已经可以独立摸着门进去了!
还记得代码吗?我再次贴出来:
Private Sub CommandButton1_Click()
Dim i, j, p, q, x, y, u As Integer
Dim tmpaddr As String
p = 34
q = 34
x = 34
y = 34
w = 0
Range("A34", "D1000").Clear
For i = 1 To Sheet2.Range("a1", "af30").Cells.Count
tmpaddr = Sheet2.Range("a1", "af30").Cells(i).Address
j = CountIf(Sheet2.Range("a1", "af30"), Sheet2.Range(tmpaddr).Value)
Select Case j
Case 1:
Sheet2.Range("A" & CStr(p)).Value = Sheet2.Range(tmpaddr).Value
p = p + 1
Range("g34").Value = CStr(p - 34)
Case 2:
For u = 34 To q - 1
If Sheet2.Range("B" & CStr(u)).Value = Sheet2.Range(tmpaddr).Value Then
GoTo exit_q
End If
Next
Sheet2.Range("B" & CStr(q)).Value = Sheet2.Range(tmpaddr).Value
q = q + 1
Range("h34").Value = CStr(q - 34)
exit_q:
Case 3:
For u = 34 To x - 1
If Sheet2.Range("C" & CStr(u)).Value = Sheet2.Range(tmpaddr).Value Then
GoTo exit_x
End If
Next
Sheet2.Range("C" & CStr(x)).Value = Sheet2.Range(tmpaddr).Value
x = x + 1
Range("i34").Value = CStr(x - 34)
exit_x:
Case Is > 3:
For u = 34 To y - 1
If Sheet2.Range("D" & CStr(u)).Value = Sheet2.Range(tmpaddr).Value Then
GoTo exit_y
End If
Next
Sheet2.Range("D" & CStr(y)).Value = Sheet2.Range(tmpaddr).Value
y = y + 1
Range("j34").Value = CStr(y - 34)
exit_y:
' Case Else
' w = w + 1
' Range("k34").Value = CStr(w)
End Select
Next
End Sub
Private Function CountIf(ByVal tmpR As Range, ByVal tmpN As String) As Integer
Dim a, b, c As Integer
b = 0
For a = 1 To tmpR.Cells.Count
If tmpR.Cells(a).Value = tmpN Then
b = b + 1
End If
Next
CountIf = b
End Function
上次讲到了每个分支结构的内部都是来处理对应个数数字的,比如第一个分支就是处理变量J等于1的情况的,这个从CASE后面跟的条件可以看出来,其他还有J等于2、J等于3以及J大于3这样三种情况。在每个分支内部的代码,大家仔细观察可以发现基本大同小异,因为毕竟都是做统计个数这个事情,唯一的不同是计数存放的地方不同而已。以J等于2为例,首先是一个FOR循环,这个循环的作用是将当前单元格的值与存放在A1到AF30区域出现2次的数字的队列中的数进行比较,如果发现当前单元格的值已经被登记在这个队列里了,那么立即结束这个分支结构,GOTO exit_q是一个无条件转移语句,目的是将程序下一步执行的目的跳转到exit_q这个标号表示的地方。如果通过FOR循环发现当前单元格的值没有被登记在该队列里,那么就将该单元格的值登记到该队列里,并将计数器Q加1,同时改变记录出现2次的单元格的统计数字。
还有一个FUNCTION,名字叫做CountIf,有2个参数,前一个是表示一个区域,后一个是表示一个字符串,结果返回一个整形数值。该函数的作用是按照第一个参数指定的区域范围,统计某一个字符串出现的次数,并将该次数的数值作为函数结果返回给调用者。
好了,这个程序就讲解到这里。可能有的朋友会说,我还没懂呢,呵呵,没关系,从下一次课开始,我们将开始一个全新的学习旅程,我把它称为“从实例学VBA编程”,通过一个帖子一个实例的方式,带领大家逐步迈进VBA的大门,一步一个脚印,脚踏实地地打下扎实的基础!让我们为最终掌握VBA这门技术并为我所用而不懈努力吧!
朋友们,再见!顺祝大家元宵节快乐! |
|