3

ドキュメントが見つからないという問題に遭遇しました。

スプレッドシートにデータを入力しています。次に、ワークシートで特定の値を検索していたところ、それらのいくつかが見つからないことがわかりました。

問題を「解決」しましたが、Range.Find の動作に非常に驚いています。

何が起こったのかというと、シートにデータを入力したときに、列のサイズが十分に広くなかったため、一部の値が ###### として表示されました。それらが見つからない値であることに気付きました。すべての列で自動調整を実行した後、すべての値を見つけることができました。

列のサイズを変更する以外にできることはありますか?

編集の更新:

私は最初にこれを持っていました:

find.Find(day.ToShortDateString(), Type.Missing, Excel.XlFindLookIn.xlValues, 
Excel.XlLookAt.xlWhole, Excel.XlSearchOrder.xlByRows, 
Excel.XlSearchDirection.xlNext, false, Type.Missing, Type.Missing);

私はそれを次のように切り替えました:

find.Find(day.ToShortDateString(), Type.Missing, Excel.XlFindLookIn.xlFormulas, 
Excel.XlLookAt.xlWhole, Excel.XlSearchOrder.xlByRows, 
Excel.XlSearchDirection.xlNext, false, Type.Missing, Type.Missing);

列幅は問題になりません。

異なる .XlFindLookIn パラメータを使用するのはどのような場合ですか?

4

1 に答える 1

2
Excel.XlFindLookIn.xlValues

セルの .Text プロパティの値に基づいて検索します (.Value2 に基づいていると言う MS フォーラムの投稿を見たことがありますが、あなたのケースはそれが間違っていることを明確に証明しています)

Excel.XlFindLookIn.xlFormulas

セルの .Formula プロパティの値に基づいて検索します。セルに固定値またはそのセルに使用される実際の数式がある場合、このプロパティには .Value2 プロパティと同じ値が含まれます。

これはすべて、シートに固定値のみが含まれており、値が数式に由来するセルが見つからない場合にのみ、独自のソリューションが機能することを意味します。

この検索動作は VSTO 固有ではないことに注意してください。Excel 自体の検索ダイアログでの動作と同じであり、VBA から if を呼び出した場合も同様です。

最も簡単なテストケース:

  • セル A1 に 1234567 を入力します
  • セル A2 に =A1 を入力します。
  • 1E+06 になるまで、列幅のサイズを変更 (縮小) します。
  • 検索ダイアログ (ctrl+f) に移動し、オプションを展開して開きます
  • 検索値として 1234567 を入力します
  • 「式」を参照して「すべてを検索」すると、「A1」が返されます
  • 「値」を参照して「すべてを検索」すると、何も返されません
  • 値全体が表示されるように列のサイズを変更し、検索ダイアログを再度開始します
  • 「式」を参照して「すべてを検索」すると、「A1」が返されます
  • 「値」を参照して「すべて検索」すると、「A1」と「A2」の両方が返されるようになりました
于 2012-10-15T00:08:02.853 に答える