「数値を増減」の版間の差分
ナビゲーションに移動
検索に移動
(ページの作成:「カーソル付近or選択範囲に半角数字列があれば 1 増やし/減らします。 * カーソル位置は、数字の左端・中間・右端どこでも...」) |
細 (指数の数値を変更) |
||
19行目: | 19行目: | ||
|<code>9<span style="border-right:2px solid; background:#bfdfff;">100,100</span>9</code> | |<code>9<span style="border-right:2px solid; background:#bfdfff;">100,100</span>9</code> | ||
|} | |} | ||
* 先頭の 0 埋め (ゼロパディング/ゼロサプライ) は考慮されます。<br>負数 (-1)/小数 (0.1)/指数 ( | * 先頭の 0 埋め (ゼロパディング/ゼロサプライ) は考慮されます。<br>負数 (-1)/小数 (0.1)/指数 (1.2e3) などは考慮されません。 | ||
:{| class="wikitable" style="text-align:center;" | :{| class="wikitable" style="text-align:center;" | ||
! ゼロなし !! ゼロあり !! ※負数 !! ※負数 !! ※小数 !! ※指数 | ! ゼロなし !! ゼロあり !! ※負数 !! ※負数 !! ※小数 !! ※指数 | ||
50行目: | 50行目: | ||
// 2014/06/17 | // 2014/06/17 | ||
//・カーソル付近or選択範囲の10進数値(半角)を 1 増やす。 | //・カーソル付近or選択範囲の10進数値(半角)を 1 増やす。 | ||
//▲負数(-1)/小数(0.1)/指数( | //▲負数(-1)/小数(0.1)/指数(1.2e3)などは考慮しない。 | ||
var sel = Document.Selection; | var sel = Document.Selection; | ||
87行目: | 87行目: | ||
// 2014/06/17 | // 2014/06/17 | ||
//・カーソル付近or選択範囲の10進数値(半角)を 1 減らす。 | //・カーソル付近or選択範囲の10進数値(半角)を 1 減らす。 | ||
//▲負数(-1)/小数(0.1)/指数( | //▲負数(-1)/小数(0.1)/指数(1.2e3)などは考慮しない。 | ||
var sel = Document.Selection; | var sel = Document.Selection; |
2014年6月17日 (火) 23:04時点における版
カーソル付近or選択範囲に半角数字列があれば 1 増やし/減らします。
- カーソル位置は、数字の左端・中間・右端どこでもかまいません。
範囲選択時は、範囲内の数字列が対象となります。
※マクロの仕様上、矩形選択には対応していません。
左端 中間 右端 範囲選択時 元値 999
999
999
999
999,999
増やす 1000
1000
1000
1000
9100,1009
- 先頭の 0 埋め (ゼロパディング/ゼロサプライ) は考慮されます。
負数 (-1)/小数 (0.1)/指数 (1.2e3) などは考慮されません。
ゼロなし ゼロあり ※負数 ※負数 ※小数 ※指数 99
0099
-1
-0
0.9
9.8e1
100
0100
-1
-1
0.10
10.9e2
101
0101
-1
-2
0.11
11.10e3
数値を増やす (インクリメント)
//■数値を増やす(インクリメント)
// 2014/06/17
//・カーソル付近or選択範囲の10進数値(半角)を 1 増やす。
//▲負数(-1)/小数(0.1)/指数(1.2e3)などは考慮しない。
var sel = Document.Selection;
var anp = sel.GetAnchorPos();
var acp = sel.GetActivePos();
var isAcp = (acp<anp)? true: false; //範囲終点が前方にあるか?
var isSel = !sel.isEmpty; //範囲選択しているか?
if (!isSel) { //未選択時、文字を探索して範囲選択
var meP = mePosLogical, meGL = 0;
var px = sel.GetActivePointX(meP);
var py = sel.GetActivePointY(meP);
var ln = Document.GetLine(py,meGL);
var tx = 1 + (ln.slice(0,px-1).match(/[0-9]*$/)).index;
var bx = px + (ln.slice(px-1).match(/^[0-9]*/))[0].length;
sel.SetActivePoint(meP,bx,py);
sel.SetAnchorPoint(meP,tx,py);
isAcp = (px==tx)? true: false; //カーソルが左端(前方)にあるか?
}
var carry = 0; //文字数(桁)変動量
sel.Text = sel.Text.replace(/[0-9]+/g,function(s){
return (/9$/.test(s))?
//◆繰り上がる場合
s.replace(/([0-8]?)(9+)$/,function(s0,s1,s2){
if (!s1) carry++; //◆桁上がり
return (parseInt(s1||0)+1)+(new Array(s2.length+1)).join("0")}):
//◆繰り上がらない場合
s.replace(/[0-8]$/,function(s0){return parseInt(s0)+1});
});
sel.SetAnchorPos(isAcp? anp+carry: anp); //範囲始点を再設定
sel.SetActivePos(isAcp? acp: acp+carry, isSel); //範囲終点(カーソル位置)を再設定
数値を減らす (デクリメント)
//■数値を減らす(デクリメント)
// 2014/06/17
//・カーソル付近or選択範囲の10進数値(半角)を 1 減らす。
//▲負数(-1)/小数(0.1)/指数(1.2e3)などは考慮しない。
var sel = Document.Selection;
var anp = sel.GetAnchorPos();
var acp = sel.GetActivePos();
var isAcp = (acp<anp)? true: false; //範囲終点が前方にあるか?
var isSel = !sel.isEmpty; //範囲選択しているか?
if (!isSel) { //未選択時、文字を探索して範囲選択
var meP = mePosLogical, meGL = 0;
var px = sel.GetActivePointX(meP);
var py = sel.GetActivePointY(meP);
var ln = Document.GetLine(py,meGL);
var tx = 1 + (ln.slice(0,px-1).match(/[0-9]*$/)).index;
var bx = px + (ln.slice(px-1).match(/^[0-9]*/))[0].length;
sel.SetActivePoint(meP,bx,py);
sel.SetAnchorPoint(meP,tx,py);
isAcp = (px==tx)? true: false; //カーソルが左端(前方)にあるか?
}
var carry = 0; //文字数(桁)変動量
sel.Text = sel.Text.replace(/[0-9]+/g,function(s){
return (/0$/.test(s))?
//◆繰り下がる場合
s.replace(/([0-9]?)([1-9])(0+)$/,function(s0,s1,s2,s3){
if (!s1&&s2==1) {carry--; s1=s2="";} //◆桁下がりする >100 → /1/00→ / /99→99
else {s2 = s2-1;} //◆ しない >1100→1/1/00→1/0/99→1099
return s1+s2+(new Array(s3.length+1)).join("9")}):
//◆繰り下がらない場合
s.replace(/[1-9]$/,function(s0){return parseInt(s0)-1});
});
sel.SetAnchorPos(isAcp? anp+carry: anp); //範囲始点を再設定
sel.SetActivePos(isAcp? acp: acp+carry, isSel); //範囲終点(カーソル位置)を再設定
位取り対応
var bx = px + (ln.slice(px-1).match(/^[0-9]*/))[0].length;
↓
var bx = (px!=tx)? px: px + (ln.slice(px-1).match(/^[0-9]*/))[0].length;
- マクロの中盤(17行目)を上記のように書き換えると、カーソル左側を基準に増減するようになります。
※カーソルが数字の左端にある場合/範囲選択時は、通常どおり増減します。
※左端 千の位 百の位 十の位 一の位 ※範囲選択時 999
0000
900
990
999
999,999
1000
1000
1000
1000
1000
9100,1009
1001
2000
1100
1010
1001
9101,1019
スポンサーリンク