2014-12-03 46 views
1

我刚刚发布了这个代码昨天与一个不同的问题,这简单地解决了(谢谢!)。我正在尝试使用宏来搜索某个字符串的Excel文档。我想获取找到字符串的单元格的地址,并将它们一个接一个地放在当前工作表的第i列中。我的问题是宏只识别字符串的第一次出现,并不识别其他实例,即使我知道它们存在。我的代码如下。搜索一个字符串“datatoFind”超出第一个出现

Option Explicit 

Sub Find_Data() 

Dim datatoFind As String 
Dim rangeSearch As Range 
Dim rangeLast As Range 
Dim foundRange As Range 
Dim strFirstAddress As String 
Dim sheetCount As Integer 
Dim sheetCounter As Integer 
Dim currentSheet As Integer 
Dim foundmatrixCounter As Integer 
foundmatrixCounter = 2 'initialize this to the second row so the total can be placed in the first row when done 

'set search range 
Set rangeSearch = ActiveSheet.Range("B2:X100") 

'set last cell in range 
Set rangeLast = rangeSearch.Cells(rangeSearch.Cells.Count) 

currentSheet = ActiveSheet.Index 
datatoFind = InputBox("Please enter the value to search for") 
If datatoFind = "" Then Exit Sub 
sheetCount = ActiveWorkbook.Sheets.Count 

For sheetCounter = 1 To sheetCount 
    Sheets(sheetCounter).Activate 
    Set foundRange = Cells.Find(What:=datatoFind, After:=Cells(1, 1), LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) 
    'if datatoFind is found in search range 
    If Not foundRange Is Nothing Then 
     'save the address of the first occurrence of datatoFind, in the strFirstAddress variable 
     strFirstAddress = foundRange.Address 
     Do 
      'Find next occurrence of datatoFind 
      Set foundRange = foundRange.FindNext(foundRange) 
      'Place the address of this occurrence in the next cell down in the column that holds found values (i column) 
      Cells(foundmatrixCounter, 9).Value = foundRange.Address 
      'Increment the loop counter for the i column 
      foundmatrixCounter = foundmatrixCounter + 1 
      'The Loop ends on reaching the first occurrence of datatoFind 
     Loop Until foundRange.Address = strFirstAddress 
    End If 
    Cells(1, 9).Value = foundmatrixCounter 'Put the total number of instances, in this case foundmatrixCounter, in Z1 
Next sheetCounter 

If foundRange Is Nothing Then 
MsgBox ("Value not found") 
Sheets(currentSheet).Activate 
End If 
End Sub 

可能还有一些其他的错误,我对VBA相当陌生。任何帮助将非常感激。

+0

那么对于初学者你以后'如果datatoFind =“”然后退出Sub'线... – Chrismas007 2014-12-03 15:10:42

+0

为什么一个else语句缺少必要的'Else'?如果If语句是假的,那么它将被跳过,是正确的?为了清楚起见,或者如果我有一个If Else声明,我只会对其他声明发表正确的看法。 – 2014-12-03 16:06:48

+0

http://www.techonthenet.com/excel/formulas/if_then.php – Chrismas007 2014-12-03 16:10:07

回答

1

将包含数据的单元格的所有地址转储到称为“结果”的新工作表中。每次搜索前清除结果页面。

Sub Find_Data() 

Dim datatoFind As String 
Dim CurSht As Worksheet, wsTest As Worksheet 
Dim rangeSearch As Range, cel As Range 
Dim LastRow As Long, LastCol As Long 
Dim FoundCount As Integer 

Application.ScreenUpdating = False 

Set wsTest = Nothing 
On Error Resume Next 
Set wsTest = ActiveWorkbook.Sheets("Results") 
On Error GoTo 0 

If wsTest Is Nothing Then 
    Worksheets.Add.Name = "Results" 
End If 

datatoFind = InputBox("Please enter the value to search for") 
If datatoFind = "" Then 
    Exit Sub 
Else 

'Clear the Results Sheet 
Sheets("Results").Cells.Clear 

FoundCount = 0 
For Each CurSht In ActiveWorkbook.Sheets 
    If CurSht.Name = "Results" Then 
     'Do Nothing 
    Else 
     Set rangeSearch = CurSht.Range("B2:X100") 
     For Each cel In rangeSearch 
      If cel.Value Like "*" & datatoFind & "*" Then 
       LastRow = Sheets("Results").Range("A" & Rows.Count).End(xlUp).Row + 1 
       Sheets("Results").Range("A" & LastRow).Value = cel.Address 
       FoundCount = FoundCount + 1 
      End If 
     Next cel 
    End If 
Next CurSht 
Sheets("Results").Range("A1").Value = FoundCount & " values found of " & datatoFind 

If FoundCount = 0 Then 
MsgBox (datatoFind & " not found") 
End If 
Application.ScreenUpdating = True 
Sheets("Results").Activate 

End Sub 
+0

这里的问题是单元格的值可能不完全是datatoFind。我需要在单词的整个单元格中包含datatoFind只是一个或两个单词的实例。 .Find方法似乎比较谨慎,因为这个原因和速度的原因。 – 2014-12-03 16:04:46

+0

更新后添加“喜欢”的方法。应该在单元格中找到任何字符串的实例。这对你有用吗?如果是这样,请接受答案。 – Chrismas007 2014-12-03 16:08:07

+0

不错的一个@ Chrismas007去保存你的代码只是为了将来的参考 – mrbungle 2014-12-03 17:35:46

相关问题