1. vba取某一列行数
实现这样的功能需要用到VBA编程:使用计时器TIMER以及统计函数counta。
2. vba提取一列不重复数据
我看出问题了,数据多的时候,隐藏的操作会很慢。加快速度有两个途径:
第一个简单点,for i=11 ti h的循环不要检查cells,而是先把第5列内容存放在数组里面,在数组里面检查是否应当隐藏。
进行隐藏的算法也优化了一点,就是先根据是否相等判断出是否隐藏到变量x里面,然后检测那一行的状态是否与x相同,不同才处理,减少处理次数。
优化后的代码如下:上面的代码通过从数组里面判断,减少了取数时间,隐藏/显示行之前先检测一下状态,减少处理时间,应该有一定的效果。
代码还可以进一步优化,逐行扫描去隐藏和显示的操作仍然非常耗时,进一步优化的思路就是一块一块的进行处理,例如在数万行中筛选出需要显示的只有几行(极端就是一行)而其它都要显示的时候,最最佳状态下只需要执行三次:前面一段隐藏、中间一段显示、后面一段隐藏,能把上万次的表格界面操作缩小到三次,效果会大大加强。
但是代码会很长、很复杂,要用一系列变量记录判断的当前行应该隐藏还是显示,但不立即处理,继续判断下一行;如果需要的处理和前面的相同,就记录需要处理的范围,继续下一行判断;如果需要的处理和之前的不同,那就执行之前的操作,重新记录。
3. vba获取一列数据的单元格总数
比较规范的写法是: 选中单元格数量=selection.cells.count count是属于集合的方法,cells是集合,而selection不是,但cells是selection的隐藏(缺省)属性。。。所以selection.count行得通,但不规范。。不规范的书写习惯害处很多,也不利于代码的阅读
4. vba取指定列数据
VBA截取某个字符前的字符串,可以使用如下的方法:使用Index = InStr(string, exp)函数判断字符串中是否含有某个字符,如果有,就会返回该字符出现的位置。
再使用left_char = Left(string, Index)来截取某个字符前的字符串
5. vba 获取a列的总行数
你试试吧,假定数据从第1行第1列开始,有个等于情况就没考虑了,你可以自己再想想Sub Col_max() Dim Rowmax As Long, i As Integer, j As Integer Dim Arr() As Variant '声明数组 Dim C_Max(1 To 5) As Double Rowmax = ActiveSheet.Range("a65536").End(xlUp).Row '求第一列最大行数 ReDim Arr(1 To Rowmax) '动态 For i = 1 To Rowmax '假定数据从第1行开始,循环给数组赋值 Arr(i) = Cells(i, 1).Value Next C_Max(1) = WorksheetFunction.Max(Arr) '使用工作表MAX函数求最大值 For j = 2 To 5 C_Max(j) = WorksheetFunction.Match(C_Max(j - 1), Range("a1:a" & Rowmax), 1) '使用MATCH函数逐个求值 NextEnd Sub
- 相关评论
- 我要评论
-