Worksheets(shname).Range("b4") Next End Sub VBA中怎样创建一个名为“table”的新工作表 通过VBA编程,很容易添加新的工作表,但是新表的名字不知怎样控制,对于新创建 的工作表,由于其名字并非特定,所以就不好使用所创建的新表了。不知各位有何高 见。。。。 Sheets.Add ActiveSheet.Name = "table" 请教:如何用VBA检索表1中A列与表2,3,4,5.....中A列相同的行并把后者整行拷 贝到表1检索到的行中,谢谢!!!! To yxptwq∶用这程序试看看。 Sub Copy1() Dim Row_dn1, Row_dnN, i, j, n As Integer Row_dn1 = Sheet1.Range("A65536").End(xlUp).Row k = 1: n = 1 For Each wSheet In ActiveWorkbook.Worksheets With wSheet If .Name "Sheet1" Then Row_dnN = .Range("A65536").End(xlUp).Row For i = 2 To Row_dn1 For j = 2 To Row_dnN If .Cells(j, 1) = Sheet1.Cells(i, 1) Then .Rows(j & ":" & j).Copy Destination:=Sheet1.Rows(Row_dn1 + n & ":" & Row_dn1 + n) n = n + 1 End If Next j Next i End If End With Next wSheet End Sub 如果要用VBA程式输入密码使用下列程式码 Sub EnterNewPW() '程式说明:利用SendKey输入VBAProject密码 '注意事项:执行本程式需要在Excel视窗,不能在VBE视窗 Application.SendKeys "%{F11}", True 'Alt + F11 切换到VBA视窗 Application.SendKeys "%T", True 'ALT + T 工具(繁体中文是(T)) Application.SendKeys "e", True '工具(T)-VBproject属性(E) Application.SendKeys "^{TAB}", True 'TAB 键(切换到PAge2 保护页面) Application.SendKeys "{+}", True '选取Checkbox方块(锁定专案以供检 视) '({+} 选取, {-} 取消选取) Application.SendKeys "{TAB}", True 'TAB 键(跳到第一次输入密码 Textbox myPW = "chijanzen" '假设密码 chijanzen Application.SendKeys myPW, True '输入密码 Application.SendKeys "{TAB}", True 'TAB 键(跳到第二次输入密码 Textbox Application.SendKeys myPW, True '输入密码 Application.SendKeys "{ENTER}", True '按确定钮(预设值) Application.SendKeys "%{F11}", True '返回Excel视窗 End Sub 冒泡排序法: 冒泡排序法之所以成为“冒泡排序”是因为值较小的或是较轻的元素浮到作为继续排 序的一组数的顶部。 Sub Macro1() Dim i As Integer Dim j As Integer Dim t as integer Static number(1 To 10) As Integer For i = 1 To 10 number(i) = inputbox“输入要排序的数:” Next i For i = 10To 2 Step -1 For j = 1 To i – 1 ‘下面进行位置交换 If number(j) > number(j + 1) Then t = number(j + 1) number(j + 1) = number(j) number(j) = t End If Next j Next i For i = 1 To 20 Print number(i) Next i End sub 首先定义一个数组:通过循环录入10个整数,然后用一个二重循环测试前一个数是否 大于后一个数。如果大于则交换两个数的下标,即交换两个数在数组中的位置,交换 通过一个变量来进行。 我先用传统的方法解决这个问题,经过比较,选用了较为简单的和高效的排序方法 ——“快速排序”,具体算法可参考数据结构等有关书籍。对所有数据排序后再合 并相同数据,合并程序较为简便,我开始时采用了这种方法,但后来发现对于这些 的数据,先合并后排序速度更快,因为有大量相同的数据。合并是采用“标记”算 法,具体如下:(设数据已存放在sData()数组中 ,结果存到Queryp()数组, Amount是数据个数) '把相同元素置 0 For i = 1 To Amount If sData(i) 0 Then For j = i + 1 To Amount If sData(i) = sData(j) Then sData(j) = 0 Next j End If Next i '删除相同元素 Queryp(1) = sData(1) k = 1 For i = 2 To Amount If Not (sData(i) = 0) Then k = k + 1 Queryp(k) = sData(i) End If Next i kMax = k ReDim Preserve Queryp(kMax) 虽然这样使得运算速度有所高,但是仍然要进行大量的循环运算,占据了程序大部 分的运算时间。于是我一直在寻觅一种更为高效的算法。 功夫不负有心人,在仔细分析数据的特征,比较了多种方案之后,我终于找到了一 种相当成功的算法,原来要3到4秒的运算缩短到仅需0.1到0.2秒。 我遇到的数据具有以下特征:①相同数据很多,②最大、最小数之间相差不到3, ③都是带两位小数的正数。 针对数据的特征,我采用了以下算法: 针对数据的特征,我采用了以下算法: 步骤: 1. 用一个循环找出整数和小数部分的最大、最小值。小数部分的最大、最小值乘 以100转为整数。 2. 定义一个二维数组,下标范围分别是整数和小数部分的最小值到最大值。 |