タグ: Excel

  • [言語比較]検索される文字値の検索値より左側

    [言語比較]検索される文字値の検索値より左側

    C#

    ○番目の検索値より左側を返すユーザー関数です

    /// <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;
    }

    Excel

    最初の検索値より左側を返す式はこちらです

    =LET(VVALUE,検索される値,VKEY,検索値,VERROR,エラー時の値,IFERROR(LEFT(VVALUE,FIND(VKEY,VVALUE)-1),VERROR))

    最後の検索値より左側を返す式はこちらです(LETでまとめていません)

    =LEFT(検索される値,FIND(仮の検索値,SUBSTITUTE(検索される値,検索値,仮の検索値,LEN(検索される値)-LEN(SUBSTITUTE(検索される値,検索値,"")))-1)

    Lotus Script 言語

    左側から検索される値を検索します
    文字値 = StrLeft (検索される値,検索値,比較方法,何番目の検索値?)
    文字値 = StrLeft (検索される値,検索値,比較方法)
    文字値 = StrLeft (検索される値,検索値)

    右側から検索される値を検索します
    文字値 = StrLeftBack (検索される値,検索値,比較方法,何番目の検索値?)
    文字値 = StrLeftBack (検索される値,検索値,比較方法)
    文字値 = StrLeftBack (検索される値,検索値)

    比較方法
    0 = 大文字小文字、全角半角を区別します
    1 = 大文字小文字を区別しません
    4 = 全角半角を区別しません
    5 = 大文字小文字、全角半角を区別しません

    戻り値には検索値を含みません
    例: {ABCAB} = Strleft ({ABCABC},{c},1,2)

    Lotus 式言語

    左側から検索される値を検索します
    文字値 = @Left (検索される値,検索値)

    右側から検索される値を検索します
    文字値 = @LeftBack (検索される値,検索値)

    戻り値には検索値を含みません
    例: {AB} = @Left ({ABCABC},{C})

    大文字小文字、全角半角を区別します
    例: {ABCab} = @Left ({ABCabc},{c})

  • [言語比較]切り上げ・切り捨て・四捨五入

    [言語比較]切り上げ・切り捨て・四捨五入

    Excel

     切り上げ

    =ROUNDUP(数値,桁数)
     「数値」:切り上げしたい数値または、セルの位置を指定します。
     「桁数」:切り上げしたい桁数を指定します。

    切り捨て

    =ROUNDDOWN(数値,桁数)
    =TRUNK(数値,桁数)
     「数値」:切り捨てしたい数値またはセルの位置を指定します。
     「桁数」:切り捨てしたい桁数を指定します。※桁数のあつかいに関しては、ROUND 関数と同様です。
    
    =INT(数値)
    =TRUNK(数値)
     小数点以下の数値を切り捨てて整数にするときに使う関数です。

    四捨五入

    =ROUND(数値,桁数)
     「数値」:四捨五入したい数値または、セルの位置を指定します。
     「桁数」:四捨五入したい桁数を整数で指定します。指定した桁数のひとつ下の桁が四捨五入されます。

    Java

    整数除算

    整数 = 整数 / 整数;
     整数(intやlong)同士の割り算(/)の結果は整数になります

    Lotus Script

    切り捨て

    整数 = Fix(数値)
     絶対値が小さい方向に丸めます
     (例)98 = Fix(98.7)
     (例)-98 = Fix(-98.7)
    整数 = Int(数値)
     値が小さいほうに丸めます
     (例)98 = Fix(98.7)
     (例)-99 = Fix(-98.7)

    整数除算

    数値 = 整数 ¥ 整数
     ¥(エンマーク)での割り算は、割り算をする前に値を整数にします
     3÷3.3は、3÷3としてから割り算されます

    Lotus 式言語

    切り捨て

    整数 = @Integer(数値)
  • [Domino]エクセルを操作する

    [Domino]エクセルを操作する

     ノーツからエクセルを操作するにはエクセルオブジェクトを作成して操作します。

    Dim アプリ As Variant
    Set アプリ = CreateObject ({Excel.Application})

     詳しくは次のリンクを参照してください。

    [中級][LotusScript]ノーツからエクセルを操作するには

    オブジェクト モデル (Excel)

  • [Excel]ワークシート名を取得

     ウェブやモバイルのエクセルでは CELL関数 がサポートされていないそうです

    ワークシート名を取得する関数

     Excelのワークシート名をセルに表示するためにCELL関数を使います。CELL関数の戻り値にはファイルパスとワークシート名を含むため、ワークシート名を抽出する必要があります

    =CELL("filename")
     または
    =CELL("filename",A1)
    
     ↓
    "https://・・・/一部のフォルダ名/[ファイル名.xls]シート名"

     上の式にある『A1』は範囲を表します。現在のワークシートのA1セルという意味です。A2でもB1でもOKです。現在のワークシートのどこかを指していれば何でもOKです
     範囲を省略することもできますが、別のワークシートで同じ式が使われると、こちらの計算結果も別のワークシートのものと同じになるそうです。きっとキャッシュが絡んだ問題なのでしょう

    現在の Excel ファイルの名前、パス名、またはワークシート名をセルに挿入する - Microsoft

    CELL 関数 - 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文字

     きちんと最後の角括弧より右側をとる式はとても長いです。何をしているか説明します

    1. CELL(“FILENAME”,A1)」で、ワークシート名を含む値を取得して値の名前をFNにします
    2. IF(ISERROR(FIND(“]”,FN)),””,」で、FN値に角括弧が含まれていないときはブランクを返して終わります
    3. LEN(FN)-LEN(SUBSTITUTE(FN,”]”,””))」で、角括弧の数を調べます。角括弧をすべて取り除いたFN値の長さと、元のFN値の長さを比べることで、角括弧の数を調べています
    4. SUBSTITUTE(FN,”]”,決して使われない記号,角括弧の数)」で、一番最後の角括弧を決して使われない記号に置き換えます
    5. FIND(決して使われない記号,一番最後の角括弧を決して使われない記号に置換したFN値)」で、一番最後の角括弧の位置を特定します
    6. MID(FN,一番最後の角括弧の位置+1,LEN(FN))」で、一番最後の角括弧よりも右側を取得します

    感想

     こういった関数型の言語は「ローコード」とか言われて簡単に使えそうな雰囲気を醸し出すのに成功しています。でもこのように長いコードになると「読めない・理解できない」です。

  • [Excel]年齢の計算

    [Excel]年齢の計算

     年齢に関しては『年齢のとなえ方に関する法律』『年齢計算ニ関スル法律』と『民法 第百四十三条』に記載があります。
     生まれた日が0歳になりますので、次の誕生日は1歳になります。
     そして生まれた時刻は関係ありません。日付がかわる深夜00:00から誕生日が始まります。

     これらの法律の条文を読んでいる限りではわからなかったのですが、『年齢の計算に関する質問主意書 平成十四年七月二十五日』の1項には「法律上の満年齢計算では誕生日の前日に年齢を加算する」と記載があります。つまり4月1日生まれのひとは3月31日に年をとることになります。

     これを踏まえて、年齢を求めるエクセルの計算式は次のようになりました。

    =DATEDIF(誕生日-1,TODAY(),"Y")
     または
    =DATEDIF(DATE(誕生日の年,誕生日の月,誕生日の日)-1,TODAY(),"Y")
    日付に整数を加減算することの意味

     日時値の整数部分は日付を表し、小数部分は時刻を表します。例えば日時値から1を差し引くと前日になります。