方法: プログラムによって Excel の範囲内のデータの値を格納および取得する
NamedRange コントロールまたはネイティブな Excel 範囲オブジェクトに対して値の格納や取得を行うことができます。
対象: このトピックの情報は、Excel 2013 と Excel 2010 のドキュメント レベルのプロジェクトおよびアプリケーション レベルのプロジェクトに適用されます。詳細については、「Office アプリケーションおよびプロジェクト タイプ別の使用可能な機能」を参照してください。
Visual Studio の Office 開発ツールを使用して 1900 年 1 月 1 日以降の日付の値を範囲に格納した場合、その値は OLE オートメーション (OA) 形式で格納されます。OLE オートメーション (OA) の日付の値を取得するには、FromOADate メソッドを使用する必要があります。1900 年 1 月 1 日より前の日付は文字列として格納されます。
[!メモ]
1900 年の最初の 2 か月については、Excel の日付と OLE オートメーションの日付は異なります。[1904 年から計算する] オプションがオンである場合も、この違いはあります。以下のコード例は、こうした違いには対応していません。
NamedRange コントロールの使用
- この例は、ドキュメント レベルのカスタマイズ用に作成されています。次のコードは、ThisWorkbook クラスではなくシート クラスに配置する必要があります。
名前付き範囲に日付の値を格納するには
NamedRange コントロールをセル A1 に作成します。
Dim NamedRange1 As Microsoft.Office.Tools.Excel.NamedRange = _ Me.Controls.AddNamedRange(Me.Range("A1"), "NamedRange1")
Microsoft.Office.Tools.Excel.NamedRange NamedRange1 = this.Controls.AddNamedRange(this.get_Range("A1"), "NamedRange1");
NamedRange1 の値として今日の日付を設定します。
Dim dt As DateTime = DateTime.Now NamedRange1.Value2 = dt
DateTime dt = DateTime.Now; NamedRange1.Value2 = dt;
名前付き範囲から日付の値を取得するには
NamedRange1 から日付の値を取得します。
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())
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 範囲オブジェクトに日付の値を格納するには
セル A1 を表す Range を作成します。
Dim rng As Excel.Range = Me.Application.Range("A1")
Excel.Range rng = this.Application.get_Range("A1");
rng の値として今日の日付を設定します。
Dim dt As DateTime = DateTime.Now rng.Value2 = dt
DateTime dt = DateTime.Now; rng.Value2 = dt;
ネイティブな Excel 範囲オブジェクトから日付の値を取得するには
rng から日付の値を取得します。
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())
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());
参照
処理手順
方法: プログラムによってコード内でワークシートの範囲を参照する
方法 : ワークシートに NamedRange コントロールを追加する