Поделиться через


Практическое руководство. Поиск текста в диапазонах ячеек на листе

Обновлен: Ноябрь 2007

Применение

Сведения, приведенные в данном разделе, относятся только к указанным проектам Visual Studio Tools for Office и версиям Microsoft Office.

Тип проекта

  • Проекты уровня документа

  • Проекты уровня приложения

Версия Microsoft Office

  • Excel 2003

  • Excel 2007

Дополнительные сведения см. в разделе Доступность функций по типам приложений и проектов.

Метод Find объекта Microsoft.Office.Interop.Excel.Range позволяет выполнить поиск текста внутри диапазона. Этот текст также может быть любой строкой ошибки, которая может появляться в ячейке листа, например #NULL! или #VALUE!. Дополнительные сведения о строках ошибок см. в разделе Значения ошибок для ячеек.

Приведенный ниже пример выполняет поиск в диапазоне с именем Fruits и изменяет параметры шрифта ячеек, которые содержат слово "apples". В этой процедуре также вызывается метод FindNext, который использует предыдущий набор настроек повторения поиска. Указывается ячейка, после которой начинать поиск, и метод FindNext анализирует оставшуюся часть диапазона.

e4x1k99a.alert_note(ru-ru,VS.90).gifПримечание.

После достижения конца диапазон метод FindNext продолжает поиск с его начала. Код должен не допустить вход в бесконечный цикл. В этом примере показан один из способов решения этой задачи — с помощью свойства Address.

Выполнение поиска текста в диапазоне ячеек на листе

  1. Объявить переменные для хранения первого найденного диапазона и текущего найденного диапазона.

    Dim currentFind As Excel.Range = Nothing
    Dim firstFind As Excel.Range = Nothing
    
    Excel.Range currentFind = null; 
    Excel.Range firstFind = null; 
    
  2. Выполнить первый поиск, указав все параметры, кроме ячейки, после которой следует искать.

    currentFind = Fruits.Find("apples", , _
        Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, _
        Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, False)
    
    currentFind = Fruits.Find("apples", missing,
        Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, 
        Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, false,
        missing, missing); 
    
  3. Продолжать поиск, пока есть совпадения.

    While Not currentFind Is Nothing
    
    while(currentFind != null) 
    
  4. Сравнить первый найденный диапазон (firstFind) с Nothing. Если переменная firstFind не содержит значения, сохранить в ней найденный диапазон (currentFind).

    If firstFind Is Nothing Then
        firstFind = currentFind
    
    if (firstFind == null)
    {
        firstFind = currentFind; 
    }
    
  5. Выйти из цикла, если адрес найденного диапазона совпадает с адресом первого найденного диапазона.

    ElseIf currentFind.Address = firstFind.Address Then
        Exit While
    End If
    
    else if (currentFind.get_Address(missing, missing, Excel.XlReferenceStyle.xlA1, missing, missing)
          == firstFind.get_Address(missing, missing, Excel.XlReferenceStyle.xlA1, missing, missing))
    {
        break;
    }
    
  6. Изменить внешний вид найденного диапазона.

    With currentFind.Font
        .Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red)
        .Bold = True
    End With
    
    currentFind.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);
    currentFind.Font.Bold = true; 
    
  7. Выполнить следующий поиск.

    currentFind = Fruits.FindNext(currentFind)
    
    currentFind = Fruits.FindNext(currentFind); 
    

Ниже приведен полный пример.

Пример

Private Sub DemoFind()
    Dim currentFind As Excel.Range = Nothing
    Dim firstFind As Excel.Range = Nothing

    Dim Fruits As Excel.Range = Me.Application.Range("A1", "B2")
    ' You should specify all these parameters every time you call this method, 
    ' since they can be overridden in the user interface.
    currentFind = Fruits.Find("apples", , _
        Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, _
        Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, False)

    While Not currentFind Is Nothing

        ' Keep track of the first range you find.
        If firstFind Is Nothing Then
            firstFind = currentFind

        ' If you didn't move to a new range, you are done.
        ElseIf currentFind.Address = firstFind.Address Then
            Exit While
        End If

        With currentFind.Font
            .Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red)
            .Bold = True
        End With

        currentFind = Fruits.FindNext(currentFind)
    End While
End Sub
private void DemoFind() 
{
    Excel.Range currentFind = null; 
    Excel.Range firstFind = null; 

    Excel.Range Fruits = Application.get_Range("A1", "B3");
    // You should specify all these parameters every time you call this method,
    // since they can be overridden in the user interface. 
    currentFind = Fruits.Find("apples", missing,
        Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, 
        Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, false,
        missing, missing); 

    while(currentFind != null) 
    { 
        // Keep track of the first range you find. 
        if (firstFind == null)
        {
            firstFind = currentFind; 
        }

        // If you didn't move to a new range, you are done.
        else if (currentFind.get_Address(missing, missing, Excel.XlReferenceStyle.xlA1, missing, missing)
              == firstFind.get_Address(missing, missing, Excel.XlReferenceStyle.xlA1, missing, missing))
        {
            break;
        }

        currentFind.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);
        currentFind.Font.Bold = true; 

        currentFind = Fruits.FindNext(currentFind); 
    }
}

См. также

Задачи

Практическое руководство. Применение стилей к диапазонам в рабочих книгах

Практическое руководство. Ссылки на диапазоны листов в коде

Основные понятия

Работа с диапазонами

Общие сведения о необязательных параметрах в решениях Office