百度首页 | 百度空间
 
查看文章
 
对于excel数据中连续非零数行的处理算法
2008-07-04 14:03

对于连续非零数行的数据处理算法:

具体见baidu知道中我提的问题。

http://zhidao.baidu.com/question/59092196.html

下面给出我自己写的算法(VB宏,excel2003)

'处理后,空值单元格的去除方法

'选中所要去除空值的区域,“编辑”-“定位”-“定位条件”- 选择“空值”

'右键快捷菜单"删除"-“下方单元格上移”。 至此,所需的数据表格构建完成!

Sub Freq()
'
' Freq Macro
' 宏由 Hank 录制,时间: 2008-7-2

Sheets("Sheet2").Select     '表格选择
Const line = 25             '处理行数

Dim j, t, m, n As Integer
Dim k(100) As Integer
j = 0               '连续非零行的长度
t = 0               '暂存j值
m = 0               'm为最长连续行长度
n = 0               '连续零行的长度
k(100) = 0          'k(t) ——连续t个非零行在序列中出现的次数。该数组的数据至关重要。

For i = 2 To line
    If ActiveSheet.Cells(i, 2) <> 0 Then        '判断第i行第2列是否为零,若非零则拷贝数据置新列
    ActiveSheet.Cells(i, 3) = ActiveSheet.Cells(i, 1)
    ActiveSheet.Cells(i, 4) = ActiveSheet.Cells(i, 2)
    j = j + 1      '用来累计连续非零行的长度
    t = j           '暂存j的值,当下一行为零时,将其输出
    n = 0           '连续零行的长度
    If t >= m Then 'm为最长连续行的长度,输出数组时使用
    m = t
    End If
   
    Else
    j = 0           '当第i行为零时,停止非零行累计
    n = n + 1       '开始连续零行累计
    If n < 2 Then   '只在第一个零时,对上一个非零行数据进行累加
    k(t) = k(t) + 1
    ActiveSheet.Cells(i - 1, 5) = k(t)      '数据拷贝
    ActiveSheet.Cells(i - 1, 6) = t
    End If
   
    End If
Next i
   
For a = 1 To m          '输出数组中 1到m个元素,即连续1个…到…连续m个非零行,每个组合出现的次数。这样可以有效去除冗余元素。
    ActiveSheet.Cells(a + 1, 7) = k(a)
Next a
    ActiveSheet.Cells(2, 8) = m        '输出m值


End Sub


类别:计算机与 internet | 添加到搜藏 | 浏览() | 评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码:
 

     

©2008 Baidu