Top > OOoBasic > Calc > search
*検索 [#c113aacd]
検索してみます。

#contents

**準備 [#kb1f0539]
検索するための準備をします。

検索するためには, SearchDescriptor が必要です。これは, Calc ではシートオブジェクトから取得します。

 Sub search_1
 Dim oDoc As Object, oSheet As Object
 Dim oSearchDesc As Object
 
   oDoc = ThisComponent
   oSheet = oDoc.Sheets(0)
   oSearchDesc = oSheet.createSearchDescriptor()
 End Sub
**検索文字列 [#e63e5de1]
検索する文字列は ''SearchString'' プロパティーに設定します。

  oSearchDesc.SearchString = "found"

検索に正規表現を使用したいときは正規表現をこの文字列に指定します。また,正規表現を使用するように, ''SearchRegularExpression'' プロパティーを true に設定します。

 oSearchDesc.SearchRegularExpression = true

正規表現についてはここでは説明しないことにします。

**検索オプション [#s957cd0d]

***単語単位 [#d979e607]
単語単位での検索を行いたいときは ''SearchWords'' プロパティーを true に設定します。

 oSearchDesc.SearchWords = true

***大文字と小文字の区別 [#hdd0ddd8]
大文字と小文字を区別して検索したいときは ''SearchCaseSensitive'' プロパティーを true に設定します。

  oSearchDesc.SearchCaseSensitive = true
**最初の一つだけの検索 [#i541d62e]
最初に見つかる一つ目だけを検索するには ''findFirst'' メソッドを使用します。順に検索を行う際には一番最初にこのメソッドで検索を行う必要があります。

 .uno.XInterface findFirst ( [in] .util.XSearchDescriptor xDesc )


**次の検索 [#l7691dec]
最初以降の検索を行うには ''findNext'' メソッドを使用して検索します。順に検索するときには ''findFirst'' 以降の検索にこのメソッドを使用します。

 .uno.XInterface findNext ( .uno.XInterface xStartAt, .util.XSearchDescriptor xDesc )

 Sub search_2
 Dim oDoc As Object, oSheet As Object
 Dim oSearchDesc As Object, oFound As Object
 
   oDoc = ThisComponent
   oSheet = oDoc.Sheets(0)
   oSearchDesc = oSheet.createSearchDescriptor()
   oSearchDesc.SearchString = "found"
   oFound = oSheet.findFirst(oSearchDesc)
   Do While NOT IsNull(oFound)
     oFound = oSheet.findNext(oFound, oSearchDesc)
   Loop
 End Sub

ここで戻される oFound はセルオブジェクトです。

**全検索 [#mfb7ba2a]
すべて検索するときです。これには, ''findAll'' メソッドを使用します。

 .container.XIndexAccess findAll ( [in] .util.XSearchDescriptor xDesc )

 Sub search_3
 Dim oDoc As Object, oSheet As Object
 Dim oSearchDesc As Object
 Dim oFounds As Object
 
   oDoc = ThisComponent
   oSheet = oDoc.Sheets(2)
   oSearchDesc = oSheet.createSearchDescriptor()
   oSearchDesc.SearchString = "text"
   oFounds = oSheet.findAll(oSearchDesc)
   If NOT(IsNull(oFounds)) Then
     MsgBox oFounds.getCount()
   Else
     MsgBox "Not found !"
   End If
 End Sub

''findAll'' メソッドで戻される oFounds は CellRanges オブジェクトです。このオブジェクトは複数のセル範囲の集まりです (セル範囲が一つのときもあります)。この検索結果を使用してセルのプロパティーを変更するには,一度に行うまたは別々に行う,の二つがあります。目的に応じて使い分けます。

**範囲内の検索 [#k35a45ba]

[[OOoBasic/Calc/sheetcellranges]] 参照。

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes