2022-11-22 11:28来源:m.sf1369.com作者:宇宇
1 返回按下ctrl+end后选中的单元格所在列的列号.
2 返回使用过的区域的列数.
如果A列有单元格使用过且没有隐藏列的情况下,它和1返回的结果一致,否则就可能不一致.
3 返回从A4按下ctrl+ →选中的单元格所在的列号. 这种很少用到.常用的是用range("iv4").end(xltoleft).column 返回从IV4按ctrl+ ←选中的单元格(最后一个有数据的可见单元格)的列号
Sql="SelectCount(*)AsRecordCountFromtablenameWhere....."然后rs.getInt("RecordCount")rs.fields.count得到列数,rs.fields(i).name得到指定列的列名
=SUMPRODUCT(N(A1:A10""))
意思是在A1至A10单元格中统计不为空值的单元格个数
(不包含假空单元格的个数)
=COUNT(A1:A10)
意思是在A1至A10单元格中统计数字单元格个数
=COUNTA(A1:A10)
意思是在A1至A10单元格中统计非空值的单元格个数(但包含假空单元格个数)
假空是指公式得出的空值,如=""这样的值,是公式产生的结果,也就是说单元格有内容,但内容是公式得出的空值
真空单元格是指单元格没有写入任何内容,在编辑栏中看不到任何值和公式
使用随机数,在选定区域对应的行和列的范围内随机生成一个行数和一个列数,即可得到一个随机抽取的单元格,再把这个单元格的内容复制到指定的单元格,连续三次,即可实现随机抽取三个数。随机数的生成举例如下:
- 假设选定区域范围为第a到b列(a<b),第m到n行(m<n)- 随机选定一列:
C = Int((b - a + 1) * Rnd + a)- 随机选定一行:
R = Int((n - m + 1) * Rnd + m)- 单元格 CR 即为随机抽取的一个数
Option Explicit
Dim letters As Integer '声明模块级变量,此变量计算字母个数
Dim space As Integer '空格个数
Dim digit As Integer '数字个数
Dim others As Integer '其他字符个数
Private Sub Command1_Click()
Dim s As String
s = InputBox("请输入字符串")
Call jisuan(s)
'以下代码用来显示统计出的结果值
Print "字符串【" & s & "】包含:"
Print "英文字母数量="; letters
Print "空格数量="; space
Print "数字数量="; digit
Print "其他字符数量="; others
End Sub
Private Sub jisuan(InputStr As String) 'InputStr变量存储输入的字符串
Dim i As Integer '循环控制变量,整型
Dim CaseStr As String '此变量保存储所截取的字符
letters = 0 '初始化为0
space = 0
digit = 0
others = 0
For i = 1 To Len(InputStr) '开始分别统计个数
CaseStr = Mid(InputStr, i, 1) '取得某个字符
Select Case CaseStr
Case "a" To "z", "A" To "Z" '如果字符是英文字母
letters = letters + 1
Case " " '如果字符是空格
space = space + 1
Case 0 To 9 '如果字符是数字
digit = digit + 1
Case Else '如果字符是其他字母
others = others + 1
End Select
Next
End Sub
可以用range().end(xlup).row取行数range().end(xltoleft).column取列数取到最右下角就简单了,自己构造一下就行了
在vba中是无法实现的。 一个数组被定义的时候已经指明了其类型,你无法使用不同的类型 唯一能够用来变通的就是将这些不同的数据类型打包为一个新的数据对象或者结构体 然后将数组声明为这个新的数据对象或者结构体的类型
excel2003版的行是65536,列是256
excel2007版和2010版的行是1048576,列是16384
Excel中,行与列是最基本的装载数据的信息
任何数据都应该在Excel所能容纳的最大行数与列数的范围之内
超出了行数和列数,比如在VBA编程中,如果超出了最大行数,就会出错
但实际应用中,插入一行为什么不会出错呢?
因为插入一行的原理实际是将最后一行删除
所以如果最后一行是空的,就不会出错
但是如果最后一行有内容
那么也会提示错误的
我看出问题了,数据多的时候,隐藏的操作会很慢。加快速度有两个途径:
第一个简单点,for i=11 ti h的循环不要检查cells,而是先把第5列内容存放在数组里面,在数组里面检查是否应当隐藏。
进行隐藏的算法也优化了一点,就是先根据是否相等判断出是否隐藏到变量x里面,然后检测那一行的状态是否与x相同,不同才处理,减少处理次数。
优化后的代码如下:上面的代码通过从数组里面判断,减少了取数时间,隐藏/显示行之前先检测一下状态,减少处理时间,应该有一定的效果。
代码还可以进一步优化,逐行扫描去隐藏和显示的操作仍然非常耗时,进一步优化的思路就是一块一块的进行处理,例如在数万行中筛选出需要显示的只有几行(极端就是一行)而其它都要显示的时候,最最佳状态下只需要执行三次:前面一段隐藏、中间一段显示、后面一段隐藏,能把上万次的表格界面操作缩小到三次,效果会大大加强。
但是代码会很长、很复杂,要用一系列变量记录判断的当前行应该隐藏还是显示,但不立即处理,继续判断下一行;如果需要的处理和前面的相同,就记录需要处理的范围,继续下一行判断;如果需要的处理和之前的不同,那就执行之前的操作,重新记录。
编程如下:Subaa()Dimi,jj=UsedRange.Rows.CountFori=1ToUsedRange.Rows.CountIfCells(i,1)="某个记录"ThenRange(Cells(i,1),Cells(j,1)).EntireRow.SelectExitSubEndIfNextEndSub