Share via


プログラムによって Excel の範囲に日付値を格納および取得する

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 クラスではなく、シート クラスに配置する必要があります。

名前付き範囲に日付値を格納するには

  1. NamedRange コントロールをセル A1 に作成します。

    Microsoft.Office.Tools.Excel.NamedRange NamedRange1 =
        this.Controls.AddNamedRange(this.get_Range("A1"), "NamedRange1");
    
  2. 今日の日付を NamedRange1 の値として設定します。

    DateTime dt = DateTime.Now;
    NamedRange1.Value2 = dt;
    

名前付き範囲から日付値を取得するには

  1. 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());
    

ネイティブの Excel 範囲を使用する

ネイティブ Excel 範囲オブジェクトに日付値を格納するには

  1. セル A1 を表す Range を作成します。

    Excel.Range rng = this.Application.get_Range("A1");
    
  2. 今日の日付を rng の値として設定します。

    DateTime dt = DateTime.Now;
    rng.Value2 = dt;
    

ネイティブ Excel 範囲オブジェクトから日付値を取得するには

  1. 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());