ノーツからエクセルを操作するにはエクセルオブジェクトを作成して操作します。
Dim アプリ As Variant
Set アプリ = CreateObject ({Excel.Application})
詳しくは次のリンクを参照してください。
![[Domino]エクセルを操作する](https://www.commuply.co.jp/technic/memo/wp-content/uploads/2024/10/ノーツ/ドミノ-1280-670.png)
ノーツからエクセルを操作するにはエクセルオブジェクトを作成して操作します。
Dim アプリ As Variant
Set アプリ = CreateObject ({Excel.Application})
詳しくは次のリンクを参照してください。
![[言語比較]検索される文字値の検索値より左側](https://www.commuply.co.jp/technic/memo/wp-content/uploads/2024/11/Rosetta_Stone_BW.jpeg)
○番目の検索値より左側を返すユーザー関数です
/// <summary>
/// ○番目のキーより左側
/// </summary>
/// <returns>さがす文字列より左側</returns>
/// <param name="source">検索される値</param>
/// <param name="key">検索値</param>
/// <param name="nth">何番目の検索値?(1-)</param>
string StrLeft(string source, string key, int nth = 1)
{
	string result = source;
	if(1 > nth)
	{
		result = @"";
		return result;
	}
	int start = 0;
	int next;
	for(int i = 1; i < nth; i++)
	{
		next = source.IndexOf(key, start, StringComparison.CurrentCultureIgnoreCase);
		if(0 > next)
		{
			break;
		}
		result = source.Substring(0, next);
		start = next + key.Length;
	}
	return result;
}
最初の検索値より左側を返す式はこちらです
=LET(VVALUE,検索される値,VKEY,検索値,VERROR,エラー時の値,IFERROR(LEFT(VVALUE,FIND(VKEY,VVALUE)-1),VERROR))
最後の検索値より左側を返す式はこちらです(LETでまとめていません)
=LEFT(検索される値,FIND(仮の検索値,SUBSTITUTE(検索される値,検索値,仮の検索値,LEN(検索される値)-LEN(SUBSTITUTE(検索される値,検索値,"")))-1)
左側から検索される値を検索します
文字値 = StrLeft (検索される値,検索値,比較方法,何番目の検索値?)
文字値 = StrLeft (検索される値,検索値,比較方法)
文字値 = StrLeft (検索される値,検索値)
右側から検索される値を検索します
文字値 = StrLeftBack (検索される値,検索値,比較方法,何番目の検索値?)
文字値 = StrLeftBack (検索される値,検索値,比較方法)
文字値 = StrLeftBack (検索される値,検索値)
比較方法
0 = 大文字小文字、全角半角を区別します
1 = 大文字小文字を区別しません
4 = 全角半角を区別しません
5 = 大文字小文字、全角半角を区別しません
戻り値には検索値を含みません
例: {ABCAB} = Strleft ({ABCABC},{c},1,2)
左側から検索される値を検索します
文字値 = @Left (検索される値,検索値)
右側から検索される値を検索します
文字値 = @LeftBack (検索される値,検索値)
戻り値には検索値を含みません
例: {AB} = @Left ({ABCABC},{C})
大文字小文字、全角半角を区別します
例: {ABCab} = @Left ({ABCabc},{c})
![[言語比較]切り上げ・切り捨て・四捨五入](https://www.commuply.co.jp/technic/memo/wp-content/uploads/2024/11/Rosetta_Stone_BW.jpeg)
=ROUNDUP(数値,桁数)
 「数値」:切り上げしたい数値または、セルの位置を指定します。
 「桁数」:切り上げしたい桁数を指定します。
=ROUNDDOWN(数値,桁数)
=TRUNK(数値,桁数)
 「数値」:切り捨てしたい数値またはセルの位置を指定します。
 「桁数」:切り捨てしたい桁数を指定します。※桁数のあつかいに関しては、ROUND 関数と同様です。
=INT(数値)
=TRUNK(数値)
 小数点以下の数値を切り捨てて整数にするときに使う関数です。
=ROUND(数値,桁数)
 「数値」:四捨五入したい数値または、セルの位置を指定します。
 「桁数」:四捨五入したい桁数を整数で指定します。指定した桁数のひとつ下の桁が四捨五入されます。
整数 = 整数 / 整数;
 整数(intやlong)同士の割り算(/)の結果は整数になります
整数 = Fix(数値)
 絶対値が小さい方向に丸めます
 (例)98 = Fix(98.7)
 (例)-98 = Fix(-98.7)
整数 = Int(数値)
 値が小さいほうに丸めます
 (例)98 = Fix(98.7)
 (例)-99 = Fix(-98.7)
数値 = 整数 ¥ 整数
 ¥(エンマーク)での割り算は、割り算をする前に値を整数にします
 3÷3.3は、3÷3としてから割り算されます
整数 = @Integer(数値)
ウェブやモバイルのエクセルでは CELL関数 がサポートされていないそうです
Excelのワークシート名をセルに表示するためにCELL関数を使います。CELL関数の戻り値にはファイルパスとワークシート名を含むため、ワークシート名を抽出する必要があります
=CELL("filename")
 または
=CELL("filename",A1)
 ↓
"https://・・・/一部のフォルダ名/[ファイル名.xls]シート名"
 上の式にある『A1』は範囲を表します。現在のワークシートのA1セルという意味です。A2でもB1でもOKです。現在のワークシートのどこかを指していれば何でもOKです
 範囲を省略することもできますが、別のワークシートで同じ式が使われると、こちらの計算結果も別のワークシートのものと同じになるそうです。きっとキャッシュが絡んだ問題なのでしょう
現在の Excel ファイルの名前、パス名、またはワークシート名をセルに挿入する - Microsoft
CELL(“filename”)の戻り値に含まれる最後の角括弧(])より右側がワークシート名になります
簡易に最初の角括弧より右側をとる式はこちら
=LET(FN,CELL("FILENAME",A1),MID(FN,FIND("]",FN)+1,LEN(FN)))
きちんと最後の角括弧より右側をとる式はこちら
=LET(FN,CELL("FILENAME",A1),IF(ISERROR(FIND("]",FN)),"",MID(FN,FIND(決して使われない記号,SUBSTITUTE(FN,"]",決して使われない記号,LEN(FN)-LEN(SUBSTITUTE(FN,"]",""))))+1,LEN(FN))))
 ※注:「決して使われない記号」はパスやワークシート名に含まれない1文字
きちんと最後の角括弧より右側をとる式はとても長いです。何をしているか説明します
こういった関数型の言語は「ローコード」とか言われて簡単に使えそうな雰囲気を醸し出すのに成功しています。でもこのように長いコードになると「読めない・理解できない」です。
![[Excel]年齢の計算](https://www.commuply.co.jp/technic/memo/wp-content/uploads/2024/10/beech-3700437_640.jpg)
 年齢に関しては『年齢のとなえ方に関する法律』『年齢計算ニ関スル法律』と『民法 第百四十三条』に記載があります。
 生まれた日が0歳になりますので、次の誕生日は1歳になります。
 そして生まれた時刻は関係ありません。日付がかわる深夜00:00から誕生日が始まります。
これらの法律の条文を読んでいる限りではわからなかったのですが、『年齢の計算に関する質問主意書 平成十四年七月二十五日』の1項には「法律上の満年齢計算では誕生日の前日に年齢を加算する」と記載があります。つまり4月1日生まれのひとは3月31日に年をとることになります。
これを踏まえて、年齢を求めるエクセルの計算式は次のようになりました。
=DATEDIF(誕生日-1,TODAY(),"Y")
 または
=DATEDIF(DATE(誕生日の年,誕生日の月,誕生日の日)-1,TODAY(),"Y")
日時値の整数部分は日付を表し、小数部分は時刻を表します。例えば日時値から1を差し引くと前日になります。