Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

[5分]如何编写excel表中删除空格中的值的函数

殷小宝  发表于:2012-12-01 10:59:51  
复制

在应用电子表时,经常遇到公式,得到结果后就删除公式,是这样删除的,选中有公式的那列,右键“复制”,再右键选择“选择性粘贴”,选中“数值”,结果只有值了,没有公式了,但其中的空格用countA函数计数时还在计数,说明其空格里还有文本,这个文本为“”,这样给统计造成麻烦,如何删除空格中的值,我以前用的是筛选,再清楚,但这样效率太低了,想制作一下宏,下面的宏有问题,请老师们修改一下:

Sub 删除空格中的值()

Dim Rnge As Range
    Cells.Select
    Selection.SpecialCells(xlCellTypeBlanks).Select
    If WorksheetFunction.CountIf(Rnge, "") = 1 Then
    Selection.ClearContents
   
    End If
End Sub

谢谢。

 

Top
风行 发表于:2012-12-01 11:22:16
这个EXCEL问题,我也搞不懂,你可以去EXCEL论坛寻求答案,那高手多

煮江品茶 发表于:2012-12-01 19:55:51
Cells.SpecialCells(xlCellTypeBlanks).ClearContents

乔峰 发表于:2012-12-01 20:09:01
1 SpecialCells 函数 在没有一个符合的条件 的情况下 会出错 , 另外我估计内部机制也是要用的查找函数的吧, 那还不如用查找函数.

2 find 和 findnext 组合, 把F列 F2: F6000范围内所有满足 的全部找到, 速度也是很快的. 我用这个方法.

3 用数组 等其他方法也可以.



Sub 删除空格中的值()

Dim rng As Range
Dim firstAddress As String
Set rng = Range("f2:f6000").Find("")
If Not rng Is Nothing Then
firstAddress = rng.Address
Do
rng.ClearContents
Set rng = Range("f2:f6000").FindNext(rng)
Loop While Not rng Is Nothing And rng.Address <> firstAddress
End If

End Sub



殷小宝 发表于:2012-12-01 22:26:27

这是我做的,也行,谢谢大家的回答,她将更开拓我的思路。

Sub 删除空格中的值()
    Dim tempx As Integer
    Dim tempy As Integer
    Dim myrow As Integer
    myrow = Range("D65536").End(xlUp).Row

    Range("O5").Select

    Range("O5:Q" & CStr(myrow)).Select
    For tempy = 15 To 17
        For tempx = 5 To myrow
            If WorksheetFunction.CountIf(Cells(tempx, tempy), "") = 1 Then
                Cells(tempx, tempy).ClearContents
            End If
        Next
    Next
End Sub

 



殷小宝 发表于:2012-12-01 22:28:20
乔峰分不多,鼓励一下。

乔峰 发表于:2012-12-01 22:57:09

呵呵, 谢谢关照, 你的方法不快的, 可以把这个矩形区域直接转成数组, 在数组中循环,判断, 然后符合条件, 直接以单元格格式修改即可.  速度快上很多.



殷小宝 发表于:2012-12-02 22:36:20

怎么能将矩形区域直接转成数组,望赐教!



乔峰 发表于:2012-12-04 22:11:54
Sub 删除空格中的值()
Dim tempx As Integer
Dim tempy As Integer
Dim myrow As Integer
Dim arr As Variant
myrow = Range("D65536").End(xlUp).Row
arr = Range("O5:Q" & myrow)
For tempy = 1 To UBound(arr, 2)
For tempx = 1 To UBound(arr)
If Len(arr(tempx, tempy)) = 0 Then
Cells(tempx + 4, tempy + 14).ClearContents
End If
Next
Next
End Sub



殷小宝 发表于:2012-12-04 23:06:46
UBound(arr, 2)这个意思有点不理解,望乔峰给予帮助。


殷小宝 发表于:2012-12-04 23:09:31
arr数组究竟为几维?

乔峰 发表于:2012-12-06 22:14:15

excel 表格 的单元格数大于1个的区域 赋值给不定对象或不定类型一个变量的话, 那这个变量就会转换成一个二维数组.

比如  dim  arr    或  dim arr as Variant 或 dim arr()  或 dim arr() as Variant     注意: 尽量少用 后两者, 假如只有一个单元格 就会出错 , 用前两者,虽然模糊一点,速度稍慢一点,但适应范围更广了, 就是我们在ACCESS中 明明可以定义到具体的对象, 但我们更多的用到  OBJECT 这个 大范围的对象, 宁愿牺牲一些速度,内存 也要 让我们的程序不出错 的道理一样.

对于一个数组. 上标 LBOUND函数. 下标UBOUND 函数 . 

对于一个二维数组arr ,    用  UBound(arr, 1)   取得一维的 下标 的意思, 一维上标下标都可以简写   LBound(arr)    ,      UBound(arr)   省掉里面的 1

第二维   用 UBOUND( arr , 2)   ........以此类推. 




乔峰 发表于:2012-12-06 22:14:34

excel 表格 的单元格数大于1个的区域 赋值给不定对象或不定类型一个变量的话, 那这个变量就会转换成一个二维数组.

比如  dim  arr    或  dim arr as Variant 或 dim arr()  或 dim arr() as Variant     注意: 尽量少用 后两者, 假如只有一个单元格 就会出错 , 用前两者,虽然模糊一点,速度稍慢一点,但适应范围更广了, 就是我们在ACCESS中 明明可以定义到具体的对象, 但我们更多的用到  OBJECT 这个 大范围的对象, 宁愿牺牲一些速度,内存 也要 让我们的程序不出错 的道理一样.

对于一个数组. 上标 LBOUND函数. 下标UBOUND 函数 . 

对于一个二维数组arr ,    用  UBound(arr, 1)   取得一维的 下标 的意思, 一维上标下标都可以简写   LBound(arr)    ,      UBound(arr)   省掉里面的 1

第二维   用 UBOUND( arr , 2)   ........以此类推. 




乔峰 发表于:2012-12-06 22:14:42

excel 表格 的单元格数大于1个的区域 赋值给不定对象或不定类型一个变量的话, 那这个变量就会转换成一个二维数组.

比如  dim  arr    或  dim arr as Variant 或 dim arr()  或 dim arr() as Variant     注意: 尽量少用 后两者, 假如只有一个单元格 就会出错 , 用前两者,虽然模糊一点,速度稍慢一点,但适应范围更广了, 就是我们在ACCESS中 明明可以定义到具体的对象, 但我们更多的用到  OBJECT 这个 大范围的对象, 宁愿牺牲一些速度,内存 也要 让我们的程序不出错 的道理一样.

对于一个数组. 上标 LBOUND函数. 下标UBOUND 函数 . 

对于一个二维数组arr ,    用  UBound(arr, 1)   取得一维的 下标 的意思, 一维上标下标都可以简写   LBound(arr)    ,      UBound(arr)   省掉里面的 1

第二维   用 UBOUND( arr , 2)   ........以此类推. 




殷小宝 发表于:2012-12-06 22:49:28

用上例来说,arr数据是一个二维数组,相当于arr(5 to myrow,15 to 17)的二维数组。UBound(arr, 2)为17,UBound(arr)为myrow,故一个矩形区域可以用数组来表示。谢谢乔峰。



总记录:14篇  页次:1/1 9 1 :