blog
ブログ

必見!数式で「カンマ区切り」「千円」「円銭」を表現するソースを公開します!

お金

こんにちは!

今回はSalesforceの数式について最近使った小ネタを紹介します。

帳票などを作成するときに、 Salesforceで「1,890千円」「1,200円68銭」といった「カンマ区切り」「千円」「円銭」を表現しなくてはいけない時に参考にしてみてください。

数式を軽く振り返る

その前に今回使う関数について軽くおさらいをしておきましょう。

関数 概要
CEILING(number) 数値をもっとも近い整数に丸めます → 切り上げ ・CEILING( 100.555 ) = 101 ・CEILING( 100.444 ) = 101
FLOOR(number) 数値を切り捨てて、0 にもっとも近い整数に丸めます → 切り捨て ・FLOOR( 100.555 ) = 100 ・FLOOR( 100.444 ) = 100
ROUND(number,num_digits) 数値を指定した桁数に丸めます → 四捨五入 ・ROUND( 100.555, 0 ) = 101 ・ROUND( 100.444, 0 ) = 100
MOD(number,divisor) 数値を因数で除算した余りを返します → 除算は正の値だけ行われます ・MOD( 10, 3 ) = 1 ・MOD( 100.555, 5 ) = 0.555
LEN(text) テキスト文字列の文字数の文字を返します ・LEN( TEXT(100.555) ) = 7

数値項目(15,3)を「カンマ区切り」かつ「千円」単位で表示する

千円で表示するために一度、1/1000にしてから四捨五入します。

状況によって切り上げ、切り捨てに変更してください。

※数値が格納されているオブジェクトの項目は「Price__c」です。


IF(
    ROUND(Price__c / 1000,0) < 1, 
    ROUND(Price__c) + "円", 
    MID( 
        TEXT(Price__c / 1000), 
        1, 
        IF( 
            MOD(
                LEN(TEXT(ROUND(Price__c / 1000,0))),3)=0, 
                3, 
                LEN(TEXT(ROUND(Price__c / 1000,0)))-(ROUND((LEN(TEXT(ROUND(Price__c / 1000,0)))-1)/3,0)*3) 
            ) 
        ) & 
        IF( 
            LEN(TEXT(ROUND(Price__c / 1000,0)))>3,
            "," &
        MID(
            TEXT(ROUND(Price__c / 1000,0)),
            IF(
                MOD(LEN(TEXT(ROUND(Price__c / 1000,0))),3)=0,
                4,
                LEN(TEXT(ROUND(Price__c / 1000,0)))-(ROUND((LEN(TEXT(ROUND(Price__c / 1000,0)))-1)/3,0)*3-1)
            ),
            3
        ),
        ""
    ) &
    IF(
        LEN(TEXT(ROUND(Price__c / 1000,0)))>6,
        "," &
        MID(
            TEXT(ROUND(Price__c / 1000,0)),
            IF(
                MOD(LEN(TEXT(ROUND(Price__c / 1000,0))),3)=0,
                7,
                LEN(TEXT(ROUND(Price__c / 1000,0)))-(ROUND((LEN(TEXT(ROUND(Price__c / 1000,0)))-1)/3,0)*3-4)
            ),
            3
        ),
        ""
    ) &
    IF(
        LEN(TEXT(ROUND(Price__c / 1000,0)))>9,
        "," &
        MID(
            TEXT(ROUND(Price__c / 1000,0)),
            IF(
                MOD(LEN(TEXT(ROUND(Price__c / 1000,0))),3)=0,
                10,
                LEN(TEXT(ROUND(Price__c / 1000,0)))-(ROUND((LEN(TEXT(ROUND(Price__c / 1000,0)))-1)/3,0)*3-7)
            ),
            3
        ),
        ""
    ) & "千円"
)

数値項目(15,3)を「カンマ区切り」かつ整数部分を「円」単位、小数点以下を「銭」単位で表示する

銭まで表示する場合小数点第3位で四捨五入を行うため、円表記部分には小数点以下を切り捨てた値を使用します。

※こちらも、数値が格納されているオブジェクトの項目は「Price__c」です。


IF(
    ROUND(Price__c,0) < 1,
    "0", 
    MID( 
        TEXT(FLOOR(Price__c)), 
        1, 
        IF( 
            MOD(
                LEN(TEXT(ROUND(Price__c,0))),3)=0, 
                3, 
                LEN(TEXT(ROUND(Price__c,0)))-(ROUND((LEN(TEXT(ROUND(Price__c,0)))-1)/3,0)*3) 
            ) 
        ) & 
        IF( 
        LEN(TEXT(ROUND(Price__c,0)))>3,
        ," &
        MID(
            TEXT(FLOOR(Price__c)),
            IF(
                MOD(LEN(TEXT(ROUND(Price__c,0))),3)=0,
                4,
                LEN(TEXT(ROUND(Price__c,0)))-(ROUND((LEN(TEXT(ROUND(Price__c,0)))-1)/3,0)*3-1)
            ),
            3
        ),
        ""
    ) &
    IF(
        LEN(TEXT(ROUND(Price__c,0)))>6,
        "," &
        MID(
            TEXT(FLOOR(Price__c)),
            IF(
                MOD(LEN(TEXT(ROUND(Price__c,0))),3)=0,
                7,
                LEN(TEXT(ROUND(Price__c,0)))-(ROUND((LEN(TEXT(ROUND(Price__c,0)))-1)/3,0)*3-4)
            ),
            3
        ),
        ""
    ) &
    IF(
        LEN(TEXT(ROUND(Price__c,0)))>9,
        "," &
        MID(
            TEXT(FLOOR(Price__c)),
            IF(
                MOD(LEN(TEXT(ROUND(Price__c,0))),3)=0,
                10,
                LEN(TEXT(ROUND(Price__c,0)))-(ROUND((LEN(TEXT(ROUND(Price__c,0)))-1)/3,0)*3-7)
            ),
            3
        ),
        ""
    )
)
& "円" &
IF(
    FIND('.', TEXT(Price__c)) = 0,"00",RPAD(MID(TEXT(Price__c), FIND('.', TEXT(Price__c))+1, 2), 2, "0")
)
& "銭"

今回の数式を使う際には、小数点第3位に関して切り上げ切り捨てをする必要がある場合は100倍したり、テキストとして評価したりして、うまく工夫してみてください。

文字数の制限さえクリアすれば、数式って色々できるもんなんですよね。

 

では、また次回。

contact

ご相談・ご質問等ございましたら、お気軽にお問い合わせください。

翻訳

SFA/CRMに蓄積されている情報を活用する方法ガイド