使用1列值作为search数组

我有一个代码在整个工作簿中search个人值。 我遇到的问题是我需要input所有我正在search的代码,但代码select已经包含在工作簿中的工作表的单个列中。 基本上我想要做的search是看看这个列中的值,并将其用作整个工作簿中的数组。

我的总代码看起来像这样

Sub FMES() Dim Headers() As String: Headers = Split("FMES CODE,Part No,Part Name,FM ID,Failure Mode & Cause,FMCN,PTR,ETR", ",") Worksheets.Add().Name = "FMES" Dim wsFMES As Worksheet: Set wsFMES = Sheets("FMES") wsFMES.Move after:=Worksheets(Worksheets.Count) wsFMES.Cells.Clear Application.ScreenUpdating = False With wsFMES For i = 0 To UBound(Headers) .Cells(2, i + 2) = Headers(i) .Columns(i + 2).EntireColumn.AutoFit Next i .Cells(1, 2) = "FMES TABLE" .Range(.Cells(1, 2), .Cells(1, UBound(Headers) + 2)).MergeCells = True .Range(.Cells(1, 2), .Cells(1, UBound(Headers) + 2)).HorizontalAlignment = xlCenter .Range(.Cells(1, 2), .Cells(2, UBound(Headers) + 2)).Font.Bold = True End With Dim SourceCell As Range, FirstAdr As String Dim RowCounter As Long: RowCounter = 3 Dim SearchTarget() As String SearchTarget = Split("TM-CRIT-PART,TM-U-IFSD-HPT,TM-D-IFSD-HPT,TM-HPT-CBO,TM-HPT2-NGV-BURN-MIN,TM-HPT2-NGV-MAJ,TM-HPT-INTGRTY-LOSS,OIL-FZ2-MINOR LEAK,OIL-FZ2-MAJOR LEAK,FIRE-OIL-ZN2", ",") For i = 0 To UBound(SearchTarget) If Worksheets.Count > 1 Then For j = 1 To Worksheets.Count - 1 With Sheets(j) Set SourceCell = .Columns(8).Find(SearchTarget(i), LookAt:=xlPart, LookIn:=xlValues) If Not SourceCell Is Nothing Then FirstAdr = SourceCell.Address Do wsFMES.Cells(RowCounter, 2).Value = SearchTarget(i) wsFMES.Cells(RowCounter, 3).Value = .Cells(3, 10) wsFMES.Cells(RowCounter, 4).Value = .Cells(2, 10) wsFMES.Cells(RowCounter, 5).Value = .Cells(SourceCell.Row, 2).Value For k = 0 To SourceCell.Row - 1 If .Cells(SourceCell.Row - k, 3).Value <> "continued." Then wsFMES.Cells(RowCounter, 6).Value = .Cells(SourceCell.Row - k, 3).Value Exit For End If Next k wsFMES.Cells(RowCounter, 7).Value = .Cells(SourceCell.Row, 14).Value Set SourceCell = .Columns(8).FindNext(SourceCell) RowCounter = RowCounter + 1 Loop While Not SourceCell Is Nothing And SourceCell.Address <> FirstAdr End If End With Next j End If Next i End Sub 

定义我的search条件的部分是

  Dim SearchTarget() As String SearchTarget = Split("TM-CRIT-PART,TM-U-IFSD-HPT,TM-D-IFSD-HPT,TM-HPT-CBO,TM-HPT2-NGV-BURN-MIN,TM-HPT2-NGV-MAJ,TM-HPT-INTGRTY-LOSS,OIL-FZ2-MINOR LEAK,OIL-FZ2-MAJOR LEAK,FIRE-OIL-ZN2", ",") For i = 0 To UBound(SearchTarget) If Worksheets.Count > 1 Then For j = 1 To Worksheets.Count - 1 With Sheets(j) Set SourceCell = .Columns(8).Find(SearchTarget(i), 

它正在寻找的代码是TM-CRIT-PART …等我的问题是,有这些数以百计,他们都包含在一个工作表FMES代码单元格A4和A397之间。 有没有一种方法可以将这个单元格的值定义为我的search条件?

当将范围传递给不是Object variable时,您可以使用简单的解决scheme,您将获得一个二维数组。 代码中需要进行一些更改。 按照代码:

 Dim SearchTarget As Variant '<<change type, remove brackets SearchTarget = Sheets("FMES").Range("A4:A297") '<<define array 'our array is now two dimensional starting with (1,1) For i = 1 To UBound(SearchTarget, 1) '<<change starting point and loop scope '...some of your code here Set SourceCell = .Columns(8).Find(SearchTarget(i, 1), '<<changes here 

暗示! 可以将来自单个Colum Range的二维数组转换为一维数组。 如果需要使用Transpose function