この記事では、あまり注目されないが便利なアクション「OpenDocumentスプレッドシート - 検索」を紹介します。
Excelの処理において、特定の文字列に一致する(部分一致、または完全一致)文字列およびセルを探して
それをもとにして検索処理や値取得・書込みを行うものが存在するかと思います。
その処理のために、データセットをループしたうえで「If - テキストが含まれる場合」などの条件式を使って処理をしている等ないでしょうか。
そのために、大量の読み飛ばしが発生しており処理効率があまり良くない場合もあるかと思います。
その際、条件に一致するセル・シート・セルの内容をデータセットとして一気に抽出するには、「OpenDocumentスプレッドシート - 検索」アクションが大変便利です。
(なお、該当アクションはExcelブックに対しても使用可能です)
このアクションを使用して部分一致を検索するには、ワイルドカードとして「*」と「?」が使用できます。
以下では、セルの内容として
「オートメイト」「オートメート」「オートメイトA」「Aオートメイト」「AutoMateオートメイト」
の5種類が存在すると仮定します。
■ケース1. 検索文字列に「オートメイト」のみを指定した場合(=完全一致)
<AMODS ACTIVITY="search" SESSION="OPENDOCSession1" SEARCH="オートメイト" RESULTDATASET="ds_SearchResult" />
→「オートメイト」と完全一致するセルのみ、「セル番地」「シート」「文字列」の情報が取得される
→「オートメート」「オートメイトA」「Aオートメイト」「AutoMateオートメイト」はヒットしない
■ケース2. 検索文字列に「オート*」を指定した場合(=「オート」から始まる任意の文字列)
<AMODS ACTIVITY="search" SESSION="OPENDOCSession1" SEARCH="オート*" RESULTDATASET="ds_SearchResult" />
→「オートメイト」「オートメート」「オートメイトA」がヒットし、「セル番地」「シート」「文字列」の情報が取得される
→「Aオートメイト」「AutoMateオートメイト」はヒットしない
■ケース3. 検索文字列に「オートメイト?」を指定した場合(=「オートメイト」の後ろに任意の1文字)
<AMODS ACTIVITY="search" SESSION="OPENDOCSession1" SEARCH="オートメイト?" RESULTDATASET="ds_SearchResult" />
→「オートメイトA」のみがヒットし、「セル番地」「シート」「文字列」の情報が取得される
→「オートメイト」「オートメート」「Aオートメイト」「AutoMateオートメイト」はヒットしない
■ケース4. 検索文字列に「*オート*」を指定した場合(=文字列「オート」が文字列中の任意の場所に存在)
<AMODS ACTIVITY="search" SESSION="OPENDOCSession1" SEARCH="*オート*" RESULTDATASET="ds_SearchResult" />
→上記の5種の文字列が全てヒット、「セル番地」「シート」「文字列」の情報が取得される
こちらを使用すると、ループで1行ずつ探す場合に比べて読み飛ばしが大幅に減り、効率が上がることが期待されます。
機会があれば、ぜひ使用してみてください。