VBA 含某个字符单元格自动被选中?

比如,在A1输入某个数字
在b列整列中从下往上检索,搜索包含这个数字的单元格,并这个单元格被自动选中,
请教了

第1个回答  2021-11-29

不知道这是不是您的意思

本回答被提问者采纳
第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列进行检索的语句

第5个回答  2021-11-29

方法/步骤

    打开新文档

    依次点击菜单“开始”——“程序”——“Microsoft Office”——“Microsoft Office Excel 2007”打开一个新建的excel文档

    或同时按下“win+R”键,在打开的运行对话框中输入“excel”回车,打开一个新建的excel文档。

    请点击输入图片描述

    打开VB编辑器

    在打开的excle窗口,依次点击工具栏“开发工具”——“Visual Basic”或直接按快捷键“ALT+F11”,打开VB编辑器。

    请点击输入图片描述

    请点击输入图片描述

    打开代码编辑窗

    双击左侧工程窗口中的“sheet1”,打开“sheet1”代码编辑窗口。

    请点击输入图片描述

    开始编写代码

    在代码窗口的下拉框中,分别选择“Worksheet”、"SelectionChange",下面会自动生成相应的过程块代码。

    请点击输入图片描述

    在过程中写入以下代码:

    If (Target.Columns.Count = Sheet1.Columns.Count) And (Target.Row <= Range("b4").Row) And (Target.Row + Target.Rows.Count > Range("b4").Row) Then

    MsgBox "yes"   

    Else    

    MsgBox "no"    

    End If

    其中,Target.Columns.Count表示选区的列数,Sheet1.Columns.Count表示sheet1表列的最大数,如果两都相等,则表示整行选择;

    Target.Row 表示选区的开始行号,Target.Row + Target.Rows.Count-1表示选区的结束行号 。

    请点击输入图片描述

    运行测试效果

    我们再回到excel窗口,测试一下代码是否能够正确运行,可以看到结果很成功。当然,你也可以修改msgbox语句成你需要的代码,进行更多操作处理。B4单元格也可以定义成可变值,如果有需要可以给小编留言。

    请点击输入图片描述

相似回答