Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2780|回复: 3

[已解决]保留3个非零数字 隔一个删一个数字 请修改代码

[复制链接]
发表于 2015-1-14 10:08 | 显示全部楼层 |阅读模式
修改程序代码
1、在工作表2中,如果每行数字大于等于4个时,只保留3个非零数字,删除多余的数字;小于等于3时,数字直接转到工作表3内。
2、删除方法是:第一个非0数字不删除,第二个非0数字删除,第三个非0数字不删除,第四个非0数字删除,以此类推每隔一个非0数字删除下一个非0数字,非0数字剩下3个时就不再向后删除数字。
3、删除结果放到工作表3内。
4、结果如工作表3。


最佳答案
2015-1-14 11:49
  1. Sub tt()
  2.    arr = Sheets(2).[a1:j7]
  3.    For i = 1 To UBound(arr)
  4.      brr = Application.Index(arr, i, 0)
  5.       k = Application.CountA(brr)
  6.      If k <= 3 Then
  7.        Sheets(3).Range("a" & i).Resize(1, 10) = brr
  8.        Else
  9.       For j = 1 To UBound(brr)
  10.        If brr(j) > 0 Then n = n + 1
  11.        If n Mod 2 = 0 Then brr(j) = ""
  12.         If Application.Count(brr) = 3 Then _
  13.         Sheets(3).Range("a" & i).Resize(1, 10) = brr: Exit For
  14.          Next
  15.       End If
  16.    Next
  17. End Sub
复制代码

保留3个非零数字 隔一个删一个数字 请修改代码.rar

14.04 KB, 下载次数: 7

发表于 2015-1-14 11:05 | 显示全部楼层
Private Sub CommandButton1_Click()
    Dim A
    A = Sheets(2).[A1:J7]
    n = 3
    For i = 1 To UBound(A)
        '1)求不为空的个数x
        x = 0
        For j = 1 To UBound(A, 2)
            If A(i, j) Then x = x + 1
        Next j

        '2)如果超过n,则清空
        If x > n Then
            For j = 1 To UBound(A, 2)
                If A(i, j) Then
                    y = y + 1
                    If y Mod 2 = 0 Then
                        A(i, j) = ""
                        x = x - 1
                        If x = n Then Exit For
                    End If
                End If
            Next j
        End If
    Next i
    Sheets(3).Cells.Clear
    Sheets(3).Range("a1").Resize(UBound(A), UBound(A, 2)) = A
End Sub
2.rar (14.3 KB, 下载次数: 0)

评分

参与人数 1 +3 收起 理由
ymq123 + 3

查看全部评分

回复

使用道具 举报

发表于 2015-1-14 11:49 | 显示全部楼层
  1. Sub test()
  2.     Dim i%, j%, x%, y%, n%, l%
  3.     With Sheets("3")
  4.         Sheets("2").UsedRange.Copy .Range("a1") '复制源数据到表3
  5.         x = .UsedRange.Columns.Count            '列宽
  6.         For i = 1 To .UsedRange.Rows.Count      '循环数据源1至最后一行
  7.             y = Application.Count(.Rows(i))     '统计每一行非空单元格
  8.             If y > 3 Then                       '超过3个非空
  9.                 n = 0: l = 0: j = 0             'n非空位置,l删除个数,j列数
  10.                 Do
  11.                     j = j + 1
  12.                     If .Cells(i, j).Value <> "" Then n = n + 1
  13.                     If n > 0 And n Mod 2 = 0 Then .Cells(i, j).ClearContents: l = l + 1
  14.                 Loop Until l > y - 4
  15.             End If
  16.         Next
  17.         .Select
  18.     End With
  19. End Sub
复制代码
保留3个非零数字.rar (12.06 KB, 下载次数: 3)
回复

使用道具 举报

发表于 2015-1-14 11:49 | 显示全部楼层    本楼为最佳答案   
  1. Sub tt()
  2.    arr = Sheets(2).[a1:j7]
  3.    For i = 1 To UBound(arr)
  4.      brr = Application.Index(arr, i, 0)
  5.       k = Application.CountA(brr)
  6.      If k <= 3 Then
  7.        Sheets(3).Range("a" & i).Resize(1, 10) = brr
  8.        Else
  9.       For j = 1 To UBound(brr)
  10.        If brr(j) > 0 Then n = n + 1
  11.        If n Mod 2 = 0 Then brr(j) = ""
  12.         If Application.Count(brr) = 3 Then _
  13.         Sheets(3).Range("a" & i).Resize(1, 10) = brr: Exit For
  14.          Next
  15.       End If
  16.    Next
  17. End Sub
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-6-1 19:35 , Processed in 0.260610 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表