用VBA 比较Excel多行数据,请高手优化程序
一个工作簿中有Sheet1和Sheet2两张工作表。要求:Sheet1中从第五行开始,分别与前第4、3、2、1行同列位置比较,若数据值相同,则把该数据放在Sheet2中,...
一个工作簿中有Sheet1 和Sheet2两张工作表。
要求:Sheet1中从第五行开始,分别与前第4、3、2、1行同列位置比较,若数据值相同,则把该数据放在Sheet2中,并在该行12列算出相同个数;每四行为一组,每组间有一空行,直至最后一行。代码如下:
Sub 数据比较()
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim n As Integer
For i = 5 To ActiveSheet.UsedRange.Rows.Count
For k = 4 To 1 Step -1
For j = 1 To ActiveSheet.UsedRange.Columns.Count
If Cells(i, j) = "" Then
ElseIf Cells(i, j) = Cells(i - k, j) Then
n = n + 1
Sheet2.Cells((i - 4) * 5 - k, n) = Cells(i, j)
Sheet2.Cells((i - 4) * 5 - k, 12) = n
End If
Next j
n = 0
Next k
Sheet2.Cells(i * 5) = ""
Next i
End Sub
测试结果:1、运行速度比较慢;2、当n=0时,12列没有标“0”;3、能否增加序列号,如第八行与前第三行比较则序号为8.3,第十行与前第四行比较,则序号为10.4等等,请各位高手优化和改正。谢谢!
Sheet1:
A B C D E F G H I J
4 2 6 5 3 6 8 10 9 8
1 3 5 7 9 6 11 8 7 10
2 4 3 8 5 1 3 5 9 6
3 2 1 4 6 5 7 10 9 8
1 2 3 4 5 6 7 8 9 10
4 2 6 5 3 6 8 10 9 8
1 3 5 7 9 6 11 8 7 10
2 4 3 8 5 1 3 5 9 6
3 2 1 4 6 5 7 10 9 8
1 2 3 4 5 6 7 8 9 10
4 2 6 5 3 6 8 10 9 8
1 3 5 7 9 6 11 8 7 10
2 4 3 8 5 1 3 5 9 6
3 2 1 4 6 5 7 10 9 8
1 2 3 4 5 6 7 8 9 10
4 2 6 5 3 6 8 10 9 8
1 3 5 7 9 6 11 8 7 10
2 4 3 8 5 1 3 5 9 6
3 2 1 4 6 5 7 10 9 8
1 2 3 4 5 6 7 8 9 10
Sheet2:(结果)
相同值 相同个数
2 6 9 3
1 6 8 10 4
3 5 9 3
2 4 7 9 4
6 1
9 1
2 10 9 8 4
2 6 9 3
1 6 8 10 4
6 1
9 1
3 5 9 3
9 1
2 4 7 9 4
2 10 9 8 4
9 1
…… 展开
要求:Sheet1中从第五行开始,分别与前第4、3、2、1行同列位置比较,若数据值相同,则把该数据放在Sheet2中,并在该行12列算出相同个数;每四行为一组,每组间有一空行,直至最后一行。代码如下:
Sub 数据比较()
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim n As Integer
For i = 5 To ActiveSheet.UsedRange.Rows.Count
For k = 4 To 1 Step -1
For j = 1 To ActiveSheet.UsedRange.Columns.Count
If Cells(i, j) = "" Then
ElseIf Cells(i, j) = Cells(i - k, j) Then
n = n + 1
Sheet2.Cells((i - 4) * 5 - k, n) = Cells(i, j)
Sheet2.Cells((i - 4) * 5 - k, 12) = n
End If
Next j
n = 0
Next k
Sheet2.Cells(i * 5) = ""
Next i
End Sub
测试结果:1、运行速度比较慢;2、当n=0时,12列没有标“0”;3、能否增加序列号,如第八行与前第三行比较则序号为8.3,第十行与前第四行比较,则序号为10.4等等,请各位高手优化和改正。谢谢!
Sheet1:
A B C D E F G H I J
4 2 6 5 3 6 8 10 9 8
1 3 5 7 9 6 11 8 7 10
2 4 3 8 5 1 3 5 9 6
3 2 1 4 6 5 7 10 9 8
1 2 3 4 5 6 7 8 9 10
4 2 6 5 3 6 8 10 9 8
1 3 5 7 9 6 11 8 7 10
2 4 3 8 5 1 3 5 9 6
3 2 1 4 6 5 7 10 9 8
1 2 3 4 5 6 7 8 9 10
4 2 6 5 3 6 8 10 9 8
1 3 5 7 9 6 11 8 7 10
2 4 3 8 5 1 3 5 9 6
3 2 1 4 6 5 7 10 9 8
1 2 3 4 5 6 7 8 9 10
4 2 6 5 3 6 8 10 9 8
1 3 5 7 9 6 11 8 7 10
2 4 3 8 5 1 3 5 9 6
3 2 1 4 6 5 7 10 9 8
1 2 3 4 5 6 7 8 9 10
Sheet2:(结果)
相同值 相同个数
2 6 9 3
1 6 8 10 4
3 5 9 3
2 4 7 9 4
6 1
9 1
2 10 9 8 4
2 6 9 3
1 6 8 10 4
6 1
9 1
3 5 9 3
9 1
2 4 7 9 4
2 10 9 8 4
9 1
…… 展开
1个回答
2011-07-02
展开全部
说说思路:
这个显然要用ADO
1、连接数据库,得到连接对象conn
2、用下面的select语句打开表,将数据读入RecordSet
set rs=conn.execute("select * from 表名")
3、用循环将数据读入二维数组arr
row=0
while not rs.eof
arr[row,0]=rs["id"]
arr[row,1]=rs["year"]
arr[row,2]=rs["mon"]
arr[row,3]=rs["1"]
arr[row,4]=rs["2"]
...
...
...
row=row+1
wend
另外,团IDC网上有许多产品团购,便宜有口碑
这个显然要用ADO
1、连接数据库,得到连接对象conn
2、用下面的select语句打开表,将数据读入RecordSet
set rs=conn.execute("select * from 表名")
3、用循环将数据读入二维数组arr
row=0
while not rs.eof
arr[row,0]=rs["id"]
arr[row,1]=rs["year"]
arr[row,2]=rs["mon"]
arr[row,3]=rs["1"]
arr[row,4]=rs["2"]
...
...
...
row=row+1
wend
另外,团IDC网上有许多产品团购,便宜有口碑
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询