2017-02-08 8 views
0

数値のみのワイルドカードまたは正規表現でRange.Find()メソッドを使用する方法はありますか?C#Excel:パターンマッチングを使用してセルを検索する

スプレッドシートの日付を解析するために、「2015 M05」、「2016 M08」、「2017 M01」などの値を持つセルを検索しようとしています。

enter image description here

これまでのところ、私は、ワイルドカードを使用していると考えることができる最高の「?」検索文字列「???? M ??」を形成する。

object missingVal = System.Reflection.Missing.Value; 
Excel.Range match = allCells.Find("???? M??", missingVal, Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, 
    Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, false, missingVal, missingVal); 

しかし、「M」で始まる2番目の単語がある2単語のラベルがあるとすぐに問題に遭遇します。

編集:私がRange.Find()で使用できる数字だけのワイルドカードを持っていれば最も簡単だと思います。しかし、 "#"は機能していないようですので、回避策があるかどうか疑問に思っていましたか?

+0

代わりに名前付きテーブルを定義し、テーブルとそのヘッダー行に名前でアクセスするのはなぜですか? –

+0

アイデアありがとう!私はそれが実現することが可能かどうかを見てみましょう...事は、スプレッドシートのためのフォルダをスクラブするC#プログラムを書いています。スプレッドシートは自動的に生成されることがあります。手動で作成されることもあります。私が現在保証している唯一の一貫性は、数字が日付の後の行に表示されることですので、私ができることに取り組もうとしています。 – Calseon

答えて

2

このパターンでは*を使用できます。 *?M??と思われるものは、M ##というパターンは一意です。

+0

ありがとう! #### M ##パターンはセルの値が常に4桁の数字(年)に続いてスペースと "M"の後に2桁の数字(月)が続くように、本当にユニークです。 私は現在、 "???? M ??"という検索文字列を使用しています。それは動作しません。それは私が "John Moe"のようなどこかでシートに奇妙なエントリを持っているときに壊れます。 数字のみのワイルドカードはありますか? – Calseon

+1

残念ながら、いいえ。 *と? Excelの唯一のワイルドカードです。その場合、あなたは最良の賭けはオブジェクトとして[C]に値を引くことです[、]といくつかの正規表現を行います。 – reasra

+0

ああ、それは残念だ。私はC#オブジェクト[、]アイデアワークを作ることができると思うが、ありがとうございます:) – Calseon

関連する問題