在EXCEL中 如何用VBA查找某特定单元格并返回该单元格的行和列值?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在EXCEL中 如何用VBA查找某特定单元格并返回该单元格的行和列值?相关的知识,希望对你有一定的参考价值。
步骤:
1)找到内容为Weight/Mt Contents的单元格(这个单元格在sheet中肯定是唯一的);
2)在该单元格所在行的下面插入一行;
3)从该单元格所在行一直到第一行全部删除。
RngFind过程使用Find方法在工作表Sheet1的A列中查找InputBox函数对话框中所输入的值,并查找该值所在的第一个单元格。
第6到第13行代码在工作表Sheet1的A列中查找InputBox函数对话框中所输入的值。应用于Range对象的Find方法在区域中查找特定信息,并返回Range对象,该对象代表用于查找信息的第一个单元格。如果未发现匹配单元格,就返回Nothing,语法如下:
expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SerchFormat)
参数expression是必需的,该表达式返回一个Range对象。
参数What是必需的,要搜索的数据,可为字符串或任意数据类型。
参数After是可选的,表示搜索过程将从其之后开始进行的单元格,必须是区域中的单个单元格。查找时是从该单元格之后开始的,直到本方法绕回到指定的单元格时,才对其进行搜索。如果未指定本参数,搜索将从区域的左上角单元格之后开始。
在本例中将After参数设置为A列的最后一个单元格,所以查找时从A1单元格开始搜索。
参数LookIn是可选的,信息类型。
参数LookAt是可选的,可为XlLookAt常量的xlWhole 或xlPart之一。
参数SearchOrder是可选的,可为XlSearchOrder常量的xlByRows或xlByColumns之一。
参数SearchDirection是可选的,搜索的方向,可为XlSearchDirection常量的xlNext或xlPrevious之一。
参数MatchCase是可选的,若为True,则进行区分大小写的查找。默认值为False。
参数MatchByte是可选的,仅在选择或安装了双字节语言支持时使用。若为True,则双字节字符仅匹配双字节字符。若为False,则双字节字符可匹配其等价的单字节字符。 参考技术A dim flag as boolean
flag=false
for i=1 to usedrange.rows.count
for j=1 to usedrange.columns.count
if cells(i,j)="Weight/Mt Contents" then
Rows(i+1).Insert Shift:=xlDown
Rows("1:"& i).Delete Shift:=xlUp
flag=true
exit for
end if
next j
if flag then exit for
next i追问
运行不了,要求调试“For i = 1 To UsedRange.Rows.Count”。
谢谢。
你把代码放到什么地方了,放到模块里了吗?
还是放到你的sheet里了
你要是放到模块里了这样改
Dim flag As Boolean
flag = False
Dim i As Integer
Dim j As Integer
For i = 1 To ActiveSheet.UsedRange.Rows.Count
For j = 1 To ActiveSheet.UsedRange.Columns.Count
If ActiveSheet.Cells(i, j) = "Weight/Mt Contents" Then
ActiveSheet.Rows(i + 1).Insert Shift:=xlDown
ActiveSheet.Rows("1:" & i).Delete Shift:=xlUp
flag = True
Exit For
End If
Next j
If flag Then Exit For
Next i
我们希望通过输入班级,点击筛选就能出来想要的内容,这里我忘了在筛选之前先做个清除,所以筛选二班记录时,三班的记录没有被清除掉。
我们要把某个班级的记录筛选出来,那么就希望首先在对应的列里找到某个班级所在的单元格,这里就用到了Find,找到后就把该行复制到对应位置,然后继续查找下一个。我们就可以使用VBA代码:
Sub 筛选()Dim rng1, rng2, rng3 As Range, addr$, adr$Set rng1 = Range("a:a").Find(Range("e6").Value)addr = rng1.AddressDo Set rng1 = Range("a:a").FindNext(rng1) adr = rng1.Address Set rng2 = Cells(Rows.Count, "e").End(xlUp)(2, 1) Set rng3 = rng1.EntireRow.Range("a1:c1") rng3.Copy rng2Loop Until addr = rng1.AddressEnd Sub 参考技术C 如果是多个,并且不要提示,让它变成行数的变量
Microsoft Excel是微软公司的办公软件Microsoft office的组件之一,是由Microsoft为Windows和Apple Macintosh操作系统的电脑而编写和运行的一款试算表软件,最早版本是在1985年开发的。
Microsoft Excel可以进行各种数据的处理、统计分析和辅助决策操作等,具有打开或关闭表格标题行、计算列使用单个公式调整每一行、数据排序和筛选、自定义公式和文本输入等功能。目前,Microsoft Excel被广泛应用于管理、统计财经、金融等众多领域。
在工作表中我们经常使用查找功能,在一列中查找某个内容,查找下一个,那在VBA中我们该如何进行查找呢?
我们希望通过输入班级,点击筛选就能出来想要的内容,这里我忘了在筛选之前先做个清除,所以筛选二班记录时,三班的记录没有被清除掉。
我们要把某个班级的记录筛选出来,那么就希望首先在对应的列里找到某个班级所在的单元格,这里就用到了Find,找到后就把该行复制到对应位置,然后继续查找下一个。我们就可以使用VBA代码:
Sub 筛选()Dim rng1, rng2, rng3 As Range, addr$, adr$Set rng1 = Range("a:a").Find(Range("e6").Value)addr = rng1.AddressDo Set rng1 = Range("a:a").FindNext(rng1) adr = rng1.Address Set rng2 = Cells(Rows.Count, "e").End(xlUp)(2, 1) Set rng3 = rng1.EntireRow.Range("a1:c1") rng3.Copy rng2Loop Until addr = rng1.AddressEnd Sub
vba 怎么实现在excel中搜索窗体textbox中的内容
vba 怎么实现在窗体textbox中输入内容,然后点击窗体按键,可以在sheet1的b列搜索含有textbox内容(含有,不是要完全一样)的单元格并返回?
参考如下问答:
如何让textbox中输入信息,在表格中搜索到,并实时显示在listbox中
功能描述如下,如附件中frame图所示,在textbox中输入一个人名,实时在一个表格(如附件表格图所示)中搜索此人名,并将搜索结果放到frame中的listbox中,搜索结果包括姓名,班级,性别。实时显示就是在textbox中输入后马上执行搜索并显示的任务,应该是在textbox的change方法中写代码。
根据textbox1里的值去查找,应该可以不用考虑使用字典的
Private Sub TextBox1_Change()
ListBox1.Clear
Set Rng = Sheets(1).Columns(2).Find(TextBox1.Text, lookat:=xlWhole)
If Not Rng Is Nothing Then
ListBox1.AddItem (Rng)
For j = Rng.Row + 1 To Sheets(1).Cells(Rows.Count, 2).End(3).Row
If Sheets(1).Cells(j, 2) = Rng Then
ListBox1.AddItem (Rng)
End If
Next j
End If
End Sub
根据textbox1的值查找
这个还是挺简单的.如果你刚学VBA,可以直接用FOR循环遍历单元格,如何满足要求就显示出来.只是这样搜索速度会慢点,如果将整个工作表赋值给一个数组变量后,在数组中进行检索的话,速度将会大大提高
下图是我自己做的一个用来查询重量的窗体
搜索内容很简单,你是想以什么样的形式返回?
搜索的话遍历行就可以,参考下面的代码
listbox1.Clearlistbox1.AddItem("库位 在库数量")
For j = 1 To 500 Step 1
If Trim(thisWs.Cells(i, 1)) = Trim(textbox1) and instr(1,thisWs.Cells(i, 2),textbox2) >0 Then
'thisWs.Cells(i, 2).Interior.ColorIndex = 3 '单元格颜色改成红色
listbox1.AddItem(thisWs.Cells(i, 3)&" "&thisWs.Cells(i, 4))'将符合条件的数据加入列表
'Exit For 允许多条结果时不要这个
End If
Next j
这段代码比较了第一列和textbox1相等,且第二列包含textbox2,变量名自己根据实际情况修改,遍历的行数也可以自己调整。
谢谢大神,送花~
我想以listbox形式返回,listbox1中第一行固定格式为“库位”,“在库数量”,比如我搜“钻头”,“1.6”,在listbox1中第二行(第一行库位的下面)可以出现:AA1,“在库数量”下面出现24;
这个样子,如果在excel中搜索1.6不止1个数据,那么 在listbox的第3行,第4行......都以第二行的数据格式返回出来;
代码又改了一下,listbox里增加数据就可以了。
追问谢谢大神,很简练,有用。采纳了
本回答被提问者采纳 参考技术C Private Sub CommandButton1_Click()Dim Rng As Range
With Application.Intersect(Sheet1.UsedRange, Sheet1.Range("A:A"))
Set Rng = .Find(What:=Me.TextBox1.Value, LookIn:=xlValues, LookAt:=xlPart)
If Not Rng Is Nothing Then
firstAddress = Rng.Address
Do
If InStr(1, Rng.Offset(0, 1).Value, Me.TextBox2.Value, vbBinaryCompare) > 0 Then
Sheet1.Activate
Rng.Select
Exit Sub
End If
Set Rng = .FindNext(Rng)
Loop While Not Rng Is Nothing And Rng.Address <> firstAddress
End If
End With
MsgBox "未找到"
End Sub 参考技术D
代码如下:
Private Sub CommandButton1_Click()Dim MyRows As Integer
Dim MyFind As Boolean
With Excel.Application.ActiveWorkbook.Sheets("Sheet1")
MyFind = False
MyRows = 1
Do While .Cells(MyRows, 1).Value <> ""
If .Cells(MyRows, 1).Value = TextBox1.Text And .Cells(MyRows, 2).Value = TextBox2.Text Then
MsgBox "你要的数据在第" & MyRows & "行!"
MyFind = True
Exit Do
End If
MyRows = MyRows + 1
Loop
If Not MyFind Then MsgBox "找不到你要的数据!"
End With
End Sub
运行时界面:
单击按钮后显示:
以上是关于在EXCEL中 如何用VBA查找某特定单元格并返回该单元格的行和列值?的主要内容,如果未能解决你的问题,请参考以下文章
Excel VBA - 查找所有具有值的单元格并删除整行(如果存在)
如何用VBA语句让EXCEL里某单元格不能被输入或更改?(比如说要让A1单元格不被输入)请诸路VBA高手赐教,谢谢!!