NamedRange コントロールまたはネイティブ Excel 範囲オブジェクトの値を格納および取得することができます。
適用対象: このトピックの情報は、Excel のドキュメント レベルのプロジェクトおよび VSTO アドインのプロジェクトに適用されます。 詳細については、「Office アプリケーションおよびプロジェクトの種類別の使用可能な機能」を参照してください。
Visual Studio の Office 開発ツールを使用して、1/1/1900 以降の日付値を範囲に格納すると、その値は OLE オートメーション (OA) 形式で格納されます。 OLE オートメーション (OA) の日付の値を取得するには、FromOADate メソッドを使用する必要があります。 1/1/1900 より前の日付は、文字列として格納されます。
Note
1900 年の最初の 2 か月については、Excel の日付と OLE オートメーションの日付は異なります。 また、[1904 年から計算する] オプションがオンになっている場合にも違いがあります。 以下のコード例は、これらの違いには対処していません。
NamedRange コントロールを使用する
- この例は、ドキュメント レベルのカスタマイズ用です。 このコードは、
ThisWorkbook
クラスではなく、シート クラスに配置する必要があります。
名前付き範囲に日付値を格納するには
NamedRange コントロールをセル A1 に作成します。
Microsoft.Office.Tools.Excel.NamedRange NamedRange1 =
this.Controls.AddNamedRange(this.get_Range("A1"), "NamedRange1");
Dim NamedRange1 As Microsoft.Office.Tools.Excel.NamedRange = _
Me.Controls.AddNamedRange(Me.Range("A1"), "NamedRange1")
今日の日付を NamedRange1
の値として設定します。
DateTime dt = DateTime.Now;
NamedRange1.Value2 = dt;
Dim dt As DateTime = DateTime.Now
NamedRange1.Value2 = dt
名前付き範囲から日付値を取得するには
NamedRange1
から日付値を取得します。
object value = NamedRange1.Value2;
if (value != null)
{
if (value is double)
{
dt = DateTime.FromOADate((double)value);
}
else
{
DateTime.TryParse((string)value, out dt);
}
}
MessageBox.Show(dt.ToString());
Dim value As Object = NamedRange1.Value2
If Not value Is Nothing Then
If TypeOf value Is Double Then
dt = DateTime.FromOADate(CType(value, Double))
Else
DateTime.TryParse(CType(value, String), dt)
End If
End If
MessageBox.Show(dt.ToString())
ネイティブの Excel 範囲を使用する
ネイティブ Excel 範囲オブジェクトに日付値を格納するには
セル A1 を表す Range を作成します。
Excel.Range rng = this.Application.get_Range("A1");
Dim rng As Excel.Range = Me.Application.Range("A1")
今日の日付を rng
の値として設定します。
DateTime dt = DateTime.Now;
rng.Value2 = dt;
Dim dt As DateTime = DateTime.Now
rng.Value2 = dt
ネイティブ Excel 範囲オブジェクトから日付値を取得するには
rng
から日付値を取得します。
object value = rng.Value2;
if (value != null)
{
if (value is double)
{
dt = DateTime.FromOADate((double)value);
}
else
{
DateTime.TryParse((string)value, out dt);
}
}
System.Windows.Forms.MessageBox.Show(dt.ToString());
Dim value As Object = rng.Value2
If Not value Is Nothing Then
If TypeOf value Is Double Then
dt = DateTime.FromOADate(CType(value, Double))
Else
DateTime.TryParse(CType(value, String), dt)
End If
End If
System.Windows.Forms.MessageBox.Show(dt.ToString())
関連するコンテンツ