excel搜索工作表指定列范围中的数据替换其复制到另一个工作表中
这里的应用场景如下:
“ 在工作表 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
结束功能
这是一个通用函数,直接拿来使用就行了,可用于在指定的区域查找并返回满足条件的所有单元格。