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. 定义一个二维数组,下标范围分别是整数和小数部分的最小值到最大值。
本文地址:http://www.45fan.com/a/luyou/12334.html