「小数点以下の桁数」を揃える(お教えくNo.10114
konnchan さん 23/04/06 08:06
 
文書中に、「小数点以下の桁数が不揃い」な数値が幾つもあるとき、
「選択範囲内」または「文書全体」の数値について、
「指定した桁数」で「四捨五入」または「切り上げ、切り下げ」をして、
小数点以下の桁数を揃えたい。

このようなとき、マクロコードはどのようになるのでしょうか?
お教えください!
尚、下記を想定しています。
(1) 整数(小数点以下を含まない)は、処理対象外とする(あえて、小数点以下を付
けることはしない
(2) その数値に「%、°、m、度、歳」等の単位が続くときも小数部を処理する
(3) 小数点以下は、少なくとも任意の[1〜3]桁で処理できるものであること 他です

[ ]
RE:10114 「小数点以下の桁数」を揃える(No.10115
こみやんま さん 23/04/06 09:59
 
>文書中に、「小数点以下の桁数が不揃い」な数値が幾つもあるとき、
> ......
>(3) 小数点以下は、少なくとも任意の[1〜3]桁で処理できるものであること 他です

JavaScriptがマクロとして利用できるバージョンの秀丸なら以下みたいなのでいける
んじゃないでしょうか。

以下、 aaaaa.mac などとして保存して実行。

js {

// 計算関数そのものの配列
var math_method_arr = [Math.round, Math.ceil, Math.floor];

// メニューで選択するための日本語の配列
var math_method_jp_arr = ["四捨五入", "切り上げ", "切り捨て"];

// メニュー項目として選択
var select_math_method_item = menuarray(math_method_jp_arr);

// 何も選ばなかったら四捨五入を計算関数とする
var math_method = Math.round;

// なにか選んでいたら、計算関数としてそれを採用する
if (select_math_method_item > 0) {
    var selected_method_index = select_math_method_item-1; // 1からの数値を0
からに直す
    math_method = math_method_arr[selected_method_index];
}


var fixed = 2;
var keta_menu_arr_jp = ["1桁", "2桁", "3桁", "4桁", "5桁", "0桁"];
var select_keta_item = menuarray(keta_menu_arr_jp); // 小数点以下何桁なの?
if (select_keta_item > 0) {
    var selected_keta_index = select_keta_item-1; // 1からの数値を0からに直す
    var keta_num = parseInt(keta_menu_arr_jp[selected_keta_index]);
    if (keta_num >= 0) {
        fixed = keta_num; // 数値として但しそうなら採用
    }
}

// 選択テキストがあればそれ、なければ全体 (矩形選択は含まず)
var text = hidemaru.getSelectedText() || hidemaru.getTotalText();
debuginfo(2);
function roundNumber(num, decimalPlaces, func) {
  var factor = Math.pow(10, decimalPlaces);
  num = func(num * factor) / factor;
  return num;
}

var regex = /(\d+\.\d+)/g;

// 対象の文字列に対して「発見」と「置き換え」を反復する
var replaced_text = text.replace(regex, function(all, float_num) {
  var modify_float_num = roundNumber(float_num, fixed, math_method); // 指定
の方法と指定の桁数でまるめ
  modify_float_num = modify_float_num.toFixed(fixed); // 桁数が足りてない時
のために桁数表記を揃えておく
  console.log(float_num + "⇒" + modify_float_num + "\r\n"); // これはデバッ
グ表示
  return modify_float_num; 少数
});


disabledraw();
// テキスト選択中なら、そこに挿入すれば良い。
if (selecting()) {
    insert(replaced_text);

// 選択中でないなら全部選択して、挿入。
} else {
    selectall();
    insert(replaced_text)
}
enabledraw();

}

[ ]
RE:10115 「小数点以下の桁数」を揃える(No.10116
konnchan さん 23/04/06 17:24
 
>>文書中に、「小数点以下の桁数が不揃い」な数値が幾つもあるとき、
> ......
>}


こみやんま様

早速の対応、ご教示有り難うございました。
数件のデータでテストしてみましたが、
期待通りの処理ができ、大変ありがたくお礼申しあげます。

当方、今年、喜寿を迎える高齢者ですが、
マクロの素養がなく、ご指導を仰いだ次第です。
重ねてお礼申し上げます。

私も若ければ、プログラミングを勉強してみたいと思う気持ちがありますが
何処から入ればいいのか分からず、…
若い人の頭脳には、感服します。
有り難うございました。

  //  konnchan













[ ]
RE:10116 「小数点以下の桁数」を揃える(No.10117
こみやんま さん 23/04/06 22:07
 
>有り難うございました。
>
>  //  konnchan

konnchanさん、お役に立てたようで何よりです。

先述の投稿の最後付近の
----------------------------
} else {
    selectall();
    insert(replaced_text)
}
----------------------------



----------------------------
} else {
    begingroupundo();
    selectall();
    insert(replaced_text)
    endgroupundo();
}
----------------------------

に修正した方が便利に使えるかと思います。
(間違ったと思った時などに CTRL+Zを1回押せば戻せるので)


[ ]
RE:10117 「小数点以下の桁数」を揃える(No.10118
konnchan さん 23/04/07 17:25
 
>>有り難うございました。
> ......
>

こみやんま様

重ね重ねのご親切有り難うございます。
早速、ご連絡いただきました事項を使用させて頂きます。

有り難うございました。



[ ]