読者です 読者をやめる 読者になる 読者になる

黙々とC#

"In a mad world of VBA, only the mad are sane" 『VBAという名の狂った世界で狂っているというのなら私の気は確かだ』


変数の型(クラス)

Excel C# Script入門講座 要加筆修正

本記事は、Excel C# Script入門講座の1記事です。

変数の型(クラス)

C# Scriptでは、宣言した変数には必ずデータの型(クラス)を指定する必要があります。データの型(クラス)とは、変数に格納できるデータの種類をいいます。

なお、var (型推論)は、何でも代入できる型ではなく、コンパイル時に右辺の値から型(クラス)を自動的に決定する仕組みです。コンパイル時に一意に型(クラス)が決定されます。このため、一度型が決定された後、異なる型のデータを代入することはできません。

数値を代入できる変数を宣言する場合

名称 格納できる値の範囲
int 32bit 整数型 -2,147,483,648 ~ 2,147,483,647
long 64bit 整数型 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
float 単精度浮動小数点型 精度7桁; ±1.5 × 10-45~ ±3.4 × 1038
double 倍精度浮動小数点型 精度15桁; ±5.0 × 10-324~ ±1.7 × 10308
decimal 10進小数 精度28桁; 1.0 × 10-28~ 7.9 × 1028

他、整数型に関しては、8,16,32,64bitのサイズそれぞれに符号有り無しが用意されています。

また、8バイト(64bit)より大きな整数値を扱いたい場合には、System.Numerics名前空間に属するBigInteger構造体を利用できます。

サンプルコード

数値に適宜suffixを付けることで、型を指定することができます。

var i = 351;     //32bit整数型 int
var j = 1879L;   //64bit整数型 long
var k = 2.7123f; //単精度浮動小数点型 float
var l = 2.233;   //倍精度浮動小数点型 double
var m = 6.02e23; //指数表記OK。(=6.02×10^23) 倍精度浮動小数点型 double
var n = 99.9m;   //10進小数 decimal

文字列を代入できる変数を宣言する場合

String型は、System.Char型のシーケンシャルコレクションとなっています。文字エンコーディングはUTF-16となります。

なお、stringオブジェクトはimmutableで、1度生成した後は変更ができません。変更を加えるようなメソッドを呼び出すと、変更が加えられた後の文字列を示す新たなstringオブジェクトが生成されます。

名称 格納できる値の範囲
string 文字列型 最大サイズ2GB。約10億文字
サンプルコード
var x = "hoge";

var y = @"C:\TEST\hoge\foo"; //@を先頭につけると \ をそのまま記載可能
var yy = @"
line1:
line2:
"; //複数行の記載も可能

var z = $"{x} is hoge"; //$ を先頭につけると文字列挿入。string.Formatと等価。
var i = 100;
var zz = $"{i,9:C}円の商品"; //書式指定も可能
var zzz = $@"
{x}
{y}
{z}
"; //$@ を先頭につけると複数行の文字列挿入が可能

日付・時刻を代入できる変数を宣言する場合

名称 格納できる値の範囲
DateTime 日時 を示すオブジェクト 西暦1年1/1 0:00 ~ 西暦9999年12/31 23:59。時刻は100ns単位。
TimeSpan 時間 を示すオブジェクト 日、時、分、秒、ミリ秒をintで指定が可能

日時の演算については、下記の記事を参照して下さい。

mokumokucsharp.hateblo.jp

オブジェクトを代入できる変数を宣言する場合

名称 格納できる値の範囲
object オブジェクト型 C#では全てのオブジェクトがobject型の派生のため、ボクシングによりobject型変数に代入可能。参照型。
dynamic ダイナミック型 静的な型に対する動的コード生成を行う型。型チェックやメンバの有無を、コンパイル時ではなく実行時にチェックする。

なお、ExcelCSXでは、デフォルトで#rやusing宣言なしにdynamic型を利用可能。

真偽値を代入できる変数を宣言する場合

名称 格納できる値の範囲
bool ブール型 true または false