首页 > Excel专区 > Excel教程 >

excel搜索工作表指定列范围中的数据替换其复制到另一个工作表中

Excel教程 2022-01-07 22:10:42

这里的应用场景如下:

“ 在工作表 Sheet1 中存储着数据,现在想要在该工作表的第O 列至第T 列中搜索指定的数据,如果发现,则将数据所在行复制到工作表Sheet2 中。

用户在一个一级中输入要搜索的数据值,然后自动将满足前面条件的所有行复制到工作表Sheet2 中。”

首先,使用用户预先设计的输入第一步,如下图 1 所示。

图 1

在该用户常规模块中编写代码:

私人Sub cmdOK_Click()

昏暗的工作簿

调光行

昏暗搜索范围

昏暗的发现

Dim rngFoundCells作为范围

Dim rngFoundCell作为范围

昏暗的行

Application.ScreenUpdating = False

‘ 赋值工作表Sheet1

设置wks =工作表(“ Sheet1”)

有星期

‘ 工作表中的最后一个数据行

lngRow = .Range(“ A”&Rows.Count).End(xlUp).Row

‘ 被查找的单元格区域

设置rngSearch = .Range(“ O2:T”&lngRow)

“ 查找的数据文本值

‘ 由用户在文本目录输入

FindWhat =“ *”&Me.txtSearch.Text和“ *”

‘ 调用FindAll 函数查找数据值

‘ 存储满足条件的所有单元格

设置rngFoundCells = FindAll(SearchRange:= rngSearch,_

FindWhat:= FindWhat,_

LookIn:= xlValues,_

LookAt:= xlWhole,_

SearchOrder:= xlByColumns,_

MatchCase:=假,_

BeginsWith:= vbNullString,_

EndsWith:= vbNullString,_

BeginEndCompare:= vbTextCompare)

‘ 如果没有找到则称为消息

如果rngFoundCells什么都没有,那么

转到SendInfo

万一

‘ 清空工作表Sheet2

Sheets(“ Sheet2”)。Cells.Clear

‘ 获取数据单元格所在的行并复制到工作表Sheet2

对于rngFoundCells中的每个rngFoundCell

lngCurRow = Val(Mid(rngFoundCell.Address,4,Len(rngFoundCell.Address)))

范围(“ A”&lngCurRow和“:Z”&lngCurRow)。

Sheets(“ Sheet2”)。Cells(Rows.Count,1).End(xlUp).Offset(1)

下一个rngFoundCell

结束于

Application.ScreenUpdating = True

卸载我

退出子

SendInfo:

MsgBox“ 没有找到数据 ”,,“ 查找 ”

结束子

代码中使用的 FindAll 函数代码如下:

‘ 自定义函数

‘ 获取满足条件的所有单元格

函数FindAll(SearchRange AsRange,_

FindWhat作为变体,_

可选的LookIn为XlFindLookIn = xlValues,_

XlLookAt = xlWhole的可选LookAt,_

可选SearchOrder AsXlSearchOrder = xlByRows,_

可选MatchCase为布尔值= False,_

可选的BeginsWith As String = vbNullString,_

可选的EndsWith As String = vbNullString,_

可选的BeginEndCompare AsVbCompareMethod = vbTextCompare)作为范围

昏暗FoundCell作为范围

昏暗的FirstFound作为范围

DimLastCell作为范围

昏暗ResultRange作为范围

昏暗的XLookAt作为XlLookAt

暗含为布尔

Dim CompMode作为VbCompareMethod

昏暗区域作为范围

昏暗的MaxRow只要长

昏暗的MaxCol只要

昏暗的BeginB为布尔

将EndB昏暗为布尔值

CompMode = BeginEndCompare

如果BeginsWith <> vbNullString或EndsWith <> vbNullString然后

XLookAt = xlPart

其他

XLookAt = LookAt

万一

对于SearchRange.Areas中的每个区域

有面积

如果.Cells(.Cells.Count).Row> MaxRow然后

MaxRow = .Cells(.Cells.Count).Row

万一

如果.Cells(.Cells.Count).Column> MaxCol然后

MaxCol = .Cells(.Cells.Count).Column

万一

结束于

下一个区域

设置LastCell = SearchRange.Worksheet.Cells(MaxRow,MaxCol)

出错时转到0

设置FoundCell = SearchRange.Find(What:= FindWhat,_

之后:= LastCell,_

LookIn:= LookIn,_

LookAt:= XLookAt,_

SearchOrder:= SearchOrder,_

MatchCase:= MatchCase)

如果Not FoundCell一无所有

设置FirstFound = FoundCell

做到错误

包含=错误

如果BeginsWith = vbNullString AndEndsWith = vbNullString然后

包含=正确

其他

如果BeginsWith <> vbNullString然后

IfStrComp(Left(FoundCell.Text,Len(BeginsWith)),BeginsWith,BeginEndCompare)= 0然后

包含=正确

万一

万一

如果EndsWith <> vbNullString然后

如果StrComp(Right(FoundCell.Text,Len(EndsWith)),EndsWith,BeginEndCompare)= 0

包含=正确

万一

万一

万一

如果Include = True,则

如果ResultRange无效,则

设置ResultRange = FoundCell

其他

设置ResultRange = Application.Union(ResultRange,FoundCell)

万一

万一

设置FoundCell = SearchRange.FindNext(之后:= FoundCell)

如果(FoundCell什么都没有)然后

退出做

万一

如果(FoundCell.Address = FirstFound.Address)然后

退出做

万一

循环

万一

设置FindAll = ResultRange

结束功能

这是一个通用函数,直接拿来使用就行了,可用于在指定的区域查找并返回满足条件的所有单元格。


标签: Excel图表制作Excel常用函数excel数据透视表excel教程

office教程网 Copyright © 2016-2020 https://www.office9.cn. Some Rights Reserved.