Excelセル内(日付形式・数式あり)の値を文字列として取得したい

いつもお世話になっております。

Excel 日付形式で設定されているセル内に数式(日付の計算)があります。
そのセルの値を文字列として取得したいです。

現在は、
範囲を読み込み(ワークブック)でデータテーブルへセット
繰り返し(データテーブルの各行)でマッチした行の値を取得しています。

セル内の値・・・2025/01/28
セル内の数式・・・「=B5-5」(セルB5(日付)から-5日)

取得したい文字列・・・20250128

出来ればExcelを開かず操作取得できるとうれしいところです。
よろしくご教示のほどお願いいたします。

こんにちは

取得したDataTableをdtとすると

CDate(dt.Rows(0)(0).ToString).ToString("yyyyMMdd")

で取得できると思います。カッコ内の0は必要な列および行のインデックスを指定してください

Yoichi様
早々ありがとうございます。

CDate(dt.Rows(0)(0).ToString).ToString(“yyyyMMdd”)
を参考に

CDate(CurrentRow.Item(“値”).Tostring).ToString(“yyyyMMdd”)

としてみたのですが、エラーが出てしまいました。
Conversion from string “45680” to type ‘Date’ is not valid.

ちなみに
同じファイル内で別のセル(日付形式)には数式「=TODAY()」が設定されてますが、

Convert.ToDateTime(CurrentRow.Item(“値”)).ToString(“yyyyMMdd”)
で文字列取得できています。
※同じようにConvert.ToDateTimeは使ってみましたが、エラーになってしまいました。

引き続きよろしくお願いいたします。

こんにちは

としてみたのですが、エラーが出てしまいました。
Conversion from string “45680” to type ‘Date’ is not valid.

以下何れかで解消すると思います

DateTime.FromOADate(CDbl(CurrentRow.Item("値").Tostring)).ToString("yyyyMMdd")

または

範囲読み込みの表示形式維持のプロパティを有効にする。
(データ量が多い場合は処理速度が問題になるかもしれません)

Yoichi様

範囲を読み込みでは、すでに表示形式を維持して繰り返しを実行していました。
そのため、さきほどご提案いただいた、

DateTime.FromOADate(CDbl(CurrentRow.Item(“値”).Tostring)).ToString(“yyyyMMdd”)

を試したところ無事に取得できました。

FromOADateメソッドが思い浮かんでこなかったので非常に参考になりました。

どうもありがとうございました。

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.