第2个回答 2021-11-29
用以下代码可实现:
Sub main()
Sheets("782 Forward Report").Activate
For i = 1 To Range("C65536").End(3).Row
If Cells(i, 3) = "Deutsche Bank" Then
For j = 1 To 256
Sheets("testing").Cells(i, j) = Cells(i, j)
Next
End If
Next
Sheets("testing").Columns("A:B").Delete
Sheets("testing").Columns("I:XX").Delete
End Sub
关于题目中出现的不能获取最大行的问题,是用Range("C65536").End(3).Row来解决的
关于End的相关知识如下:
For irow = 1 To [A65536].End(3).Row
If Abs(Cells(irow, 1).End(2) - Cells(irow, 256).End(1)) / Cells(irow, 1).End(2) > 0.1 Then Cells(irow, 1).End(2)(1, 2) = Cells(irow, 256).End(1)
Next
括号中的1、2、3、4分别代表向左、向右、向上、向下。END(x)表示从指定的单元格向左、向右、向上、向下最后一个有效RANGE
以Cells(irow, 1).End(2)为当前单元格,向右移一位。
假如Cells(irow, 1).End(2)为B2,Cells(irow, 1).End(2)(1, 2) 为C2
end(xlup)是向上,end(xldown)是向下,end(xltoleft)是向左,end(xltoright)是向右
关于[A65536].End(xlUp).row 中的[A65536]
在1995-2006年,excel工作簿包含65536行,但现在的office 2007中工作簿包含1048576行。[A65536]就是A列的最后一行的意思,这段话的意思就是,从A列最后一行向上找,找到有数据的行为止。
是从A列最下面往上遇到的有数据的列号
如果{A27}是你数据的最后列
I=[A65536].End(xlUp).row
则I就是27
[a65536].End(3)的意思是查找A列最后一个非空单元格,比如找到非空单元格为A2
[a65536].End(3)(2, 1)
(2,1)是数据行最末行的下一空单元格;(1,2)是数据行最末一个单元格的右侧单元格
第3个回答 2021-11-29
上周,我发了关于Excel VBA的第一篇文章后,社群里就砸开了锅
看到辣么多小伙伴们,辣么喜欢,我的干劲儿就更足了。
于是,我准备把Excel VBA写成一个系列免费教程,撸完这个系列你也是VBA界的黑山老妖了。
今天是这个系列的第2篇,我们用「如何利用VBA加减乘除运算」的例子,帮助大家理解VBA的一些基础概念。
基础很重要,正所谓“基础不牢,地动山摇”。好了,闲话不多说,直接上硬菜(大家看图自己跟着实操)
1. 准备案例
(1)新建一个Excel工作簿,随意命名
(2)单元格A4输入「10」,单元格B4输入「+」,单元格C4输入「8」,单元格D4输入「=」
2. 如何计算上述运算,并写入单元格E4里?
(1)青铜小白-符号运算
(2)铂金老鸟-公式运算
(3)王者大牛-代码运算
经验的同学,看到这里,肯定嘴角上扬45度,“我用公式就能轻松实现,何必用VBA呢?”
不错,用公式确实能够实现上述案例的结果,但是,VBA拥有公式无可比拟的优越性:
第一,公式无法使用「按钮控件」;
第二,日常的工作场景一般会涉及加减乘除等综合运算,如果我们使用公式就会格外的复杂而难以控制。
按钮控件:大家可以将其类比我们常见的“保存”、 “预览” 、“确定”等按钮,当然了还有需要输入文本的“文本框”、“下拉列表”、“复选框”等本回答被网友采纳
第4个回答 2021-11-29
VBA判断单元格是否包含某字符使用InStr函数,与工作表的FIND函数类似。
InStr函数的帮助信息如下:
程序中判断是否包含,可以这样写VBA代码:
If InStr("111a222", "a")=0 Then MsgBox "不包含" Else MsgBox "包含"
执行示例:
如果你要查找的某字符串是固定的数值,这个应该不难办到,可以用Worksheet_SelectionChange事件,添加适当的代码来达到些目的。
假如你的某两个单元格内有以下内容:
我们的家乡
我们的中国
你在在你选定的区域内查找“家乡”这两个字
在sheet1代码编辑器中粘贴以下代码。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
arr = Split(Target, "")
text1 = "*家乡*"
For x = 0 To UBound(arr)
If arr(x) Like text1 = True Then
MsgBox Target.Address & "包含" & text1
End If
Next
End Sub
然后,选中某些区域进行测试
追问您这里MsgBox Target.Address & "包含" & text1,能修改成这个单元格直接被选中的语句吧,语句中貌似没看到只对B列进行检索的语句