방법: 워크시트 범위에서 텍스트 검색
Microsoft.Office.Interop.Excel.Range 개체의 Find 메서드를 사용하면 범위 내에서 텍스트를 검색할 수 있습니다. 이 텍스트는 #NULL! 또는 #VALUE!와 같이 워크시트 셀에 나타날 수 있는 오류 문자열일 수도 있습니다. 오류 문자열에 대한 자세한 내용은 Cell Error Values를 참조하십시오.
적용 대상: 이 항목의 정보는 Excel 2007 및 Excel 2010의 문서 수준 프로젝트 및 응용 프로그램 수준 프로젝트에 적용됩니다. 자세한 내용은 Office 응용 프로그램 및 프로젝트 형식에 따라 사용 가능한 기능을 참조하십시오.
다음 예제에서는 Fruits라는 범위를 검색하고 "apples"라는 단어가 포함된 셀의 글꼴을 수정합니다. 이 프로시저에서는 이전에 지정한 검색 설정을 사용하여 검색을 반복하는 FindNext 메서드도 사용합니다. 검색을 시작할 셀만 지정하면 나머지는 FindNext 메서드에 의해 자동으로 처리됩니다.
참고
FindNext 메서드를 사용할 때 검색 범위의 끝에 도달하면 검색 범위의 시작 부분으로 돌아와 검색 작업이 이어집니다. 따라서 검색 작업이 무한 루프에 빠지지 않도록 코드를 작성해야 합니다. 다음 샘플 프로시저에서는 이 문제를 처리하기 위해 Address 속성을 사용하는 한 가지 방법을 보여 줍니다.
관련 비디오 데모를 보려면 How Do I: Use the Find Method in an Excel Add-in?을 참조하십시오.
워크시트 범위에서 텍스트를 검색하려면
전체 범위, 처음 찾은 범위 및 현재 찾은 범위를 추적하기 위한 변수를 선언합니다.
Dim currentFind As Excel.Range = Nothing Dim firstFind As Excel.Range = Nothing
Excel.Range currentFind = null; Excel.Range firstFind = null;
검색을 시작할 셀을 제외한 모든 매개 변수를 지정하여 일치하는 첫 번째 범위를 검색합니다.
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);
값이 일치할 때까지 검색을 계속 진행합니다.
While Not currentFind Is Nothing
while(currentFind != null)
처음 찾은 범위(firstFind)를 Nothing과 비교합니다. firstFind에 값이 없는 경우에는 찾은 범위(currentFind)가 저장됩니다.
If firstFind Is Nothing Then firstFind = currentFind
if (firstFind == null) { firstFind = currentFind; }
찾은 범위의 주소가 처음 찾은 범위의 주소와 일치하면 루프가 종료됩니다.
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; }
찾은 범위의 모양을 설정합니다.
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;
다른 검색을 수행합니다.
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);
}
}