「連番を挿入」の版間の差分

提供: MeryWiki
ナビゲーションに移動 検索に移動
Masme (トーク | 投稿記録)
概要などに改行や空白を加筆
MSY-07 (トーク | 投稿記録)
変更履歴: 句点の除去
 
(2人の利用者による、間の16版が非表示)
1行目: 1行目:
__NOTOC__
== 概要 ==
連番を挿入するマクロです。


カーソル位置or選択範囲の行頭に連番(半角数字)を挿入するマクロです。<br>範囲選択している場合は、各行の行頭に連番を付加します。<br>範囲選択していない場合は、入力した「行数」分の連番を挿入します。
[[ファイル:InsertSequentialNumber_Popup.png]]


※アルファベット連番やカタカナ連番などには対応していません。
{|class="wikitable"
 
! 連番を挿入
[[ファイル:InsertSequentialNumber_Popup.png|left]]
| 連番の挿入を実行します。<br>非選択時は、個数分の連番行を挿入します。<br>通常選択/矩形選択時は、<b>論理行頭</b>に連番を挿入します。<br>複数選択時は、<b>範囲先頭</b>に連番を挿入します。
 
{| border="1" cellspacing="0"
!連番を挿入
|連番の挿入を実行します。
|-
|-
!(プレビュー)
! 設定の記憶
|挿入される連番の内容を事前に確認できます。
| 設定の一時的な記憶。<b style="color:#c00;">Mery 3.0.0 以降で表示・利用できます。</b><br>挿入実行時か <b>[今すぐ記憶]</b> で記憶され、<b>[記憶を消去]</b> で消去します。
|-
|-
!プリセット
! 形式
|あらかじめ登録しておいた内容に従い、設定を一括変更します。
| 連番の種類(スタイル)。<br>プリセット(あらかじめ用意した設定)の適応もここで行います。
|-
|-
!始値
! 開始
|開始番号。0以上の半角数字を入力してください。
| 開始番号(0以上の整数)。
|-
|-
!行数
! 個数
|連番の個数。1以上の半角数字を入力してください。<br>※範囲選択している場合は変更できません。
| 個数(1以上の整数)。<b style="color:#c00;">非選択時のみ変更できます。</b><br><code>..数値</code> と入力すると、数値を終了番号とみなします。<br>たとえば、<code>..9</code> なら9までで終わる連番になるよう個数を逆算します。
|-
|-
!増分
! 増分
|連番の増え方。0以上の半角数字を入力してください。<br>増分が 2 なら、1,3,5,7,9... のように2ずつ増える連番になります。
| 増加幅(0以上の整数)。
|-
|-
!桁数
! 桁数
|連番の最低桁数。1以上の半角数字を入力してください。<br>桁数が 3 なら、最低でも3桁以上になるよう桁埋めします。<br>※「桁埋め」が (無し) の場合、この設定は無視されます。
| 最低桁数(0以上の整数。0 で最長桁揃え)。<br>桁埋めしたくない場合、1 を指定してください。
|-
|-
!桁埋め
! 桁埋
|桁揃えに使用する文字列。半角1文字を入力してください。<br>※全角文字や2文字以上を入力することもできますが桁が揃わなくなります。
| 桁埋め文字(1文字)。<b>結合文字列には対応していません。</b><br>空欄にすると、スタイル既定の桁埋め文字が適用されます。
|-
|-
!接頭辞
! 接頭<br>接尾
|連番の前に付ける文字列。
| 連番の前後に付加する文字列。下記の特殊記法が使えます。<br><code>%t</code> (タブ)、<code>%%</code> (文字 %)、<code>%A</code> (始値)、<code>%Z</code> (終値)
|-
|-
!接尾辞
! (プレビュー)<br>もっと見る
|連番の後に付ける文字列。
| 連番の内容(最初と最後)の下見です。<br><b>[もっと見る]</b> で最初6個と最後6個を下見できます。
|}
|}


==注意点==
== 注意事項 ==
* ポップアップメニュー上での視認性を良くするため、半角空白は ␣ (U+2423)、水平タブは › (U+203A)の記号で代替表示されます。また、空欄の場合(何も入力されてない項目)は、(無し) と表示されます。
* 連番の限度は <b style="color:#c00;">9007兆</b>1992億5474万0991 (2<sup>53</sup>−1) です。JavaScript の仕様では、この数値を超えると整数の取り扱いに不都合が生じます。
* 桁埋め/接頭辞/接尾辞の文字入力時にキャンセルすると、入力前の状態に戻るのではなく、空欄あつかい=(無し) となります。
* 個数の限度は初期設定で<b style="color:#c00;">10万</b>個です。
* 桁埋・接頭・接尾の入力時にキャンセルすると、前の状態に戻るのではなく、空欄となります。これは仕様上解決できませんので、ご了承ください。
* 桁埋・接頭・接尾・プレビューでは、下記のような代替表示が行われます。
** 半角空白 (U+0020) → <code></code> (U+2423) と表示
** 全角空白 (U+3000) → <code>〼</code> (U+303C) と表示
** 水平タブ (U+0009) → <code>&nbsp;›&nbsp;</code> (U+203A) と表示
* プレビューでは、最長桁数を実際より少なく見積もることがあります。
* 設定の記憶は、同窓で記憶を共有・保持します(=別窓になると別記憶になる)。
** 個数については、非選択時のみ更新されます。


==プリセットについて==
== ダウンロード ==
プリセットは、設定項目を一発で変更する機能です。<br>「プリセット一覧」部分を各自で編集する必要がありますが、よく使う設定をプリセットに登録しておけば、使い勝手が向上します。
[[ファイル:連番を挿入.zip]]
; 内容
* 連番を挿入.ico
* 連番を挿入.js


※記述ミスがあると正しく機能しません。セミコロン ; や括弧の打ち忘れ、打ち間違いに注意してください。
== 変更履歴 ==
* rev.4 (2020-05-17)
** .zip 内の Macros フォルダを除去。ファイルのみ収録
** 複数選択に試験対応(Mery 3.0.1 以降)
*** 選択範囲の数を個数として、範囲先頭に連番を挿入します
** 元に戻すで選択範囲も戻すようにした(Mery 3.0.1 以降)
*** 都合上、<b style="color:#c00;">Mery 3.0.0 は動作対象外</b>とした
** 設定を一時的ながら記憶できるようにした(Mery 3.0.0 以降)
*** メニューに「設定の記憶」を追加
** 個数の限度を指定できるようにした(初期値10万個) ※個数が多いと PC の性能によってはクラッシュするため
*** 個数の入力ダイアログに限度の表示を追加
** 連番の挿入を実行後、ステータスバーに処理時間を表示するようにした
** スタイルの定義 range を廃止し、min と max に分離
** 指定した style が存在しない場合、初期設定の style に戻す仕様に変更
* rev.3 (2019-12-30)
** 1億以上の漢数字連番で万億の文字が出力されない場合がある不具合を修正
*** 例> 「一億二万三」が「一億二三」に、「一兆九億八万」が「一兆九八」になる
* rev.2 (2019-12-21)
** アイコンファイルを同梱し、読み込むようにした
** 連番の挿入を実行後、実行範囲を行選択するようにした
** 「プレビュー」を一番下に移動し、「もっと見る」を追加
** スタイルの概念を導入(英字・仮名・ローマ数字・漢数字連番などに対応)
*** メニューに「形式」を追加。「プリセット」は削除
** 個数で、<code>..数値</code> と入力すると終了番号とみなすようにした
** 指定した桁数までしか桁埋めしない仕様に変更
*** 桁数を 0 にすると最長桁揃えができるようにした
** 桁埋を空欄にした場合、スタイルの既定を適用する仕様に変更
** 接頭・接尾で、% による特殊記法を導入
** 入力ダイアログの見出しを「項目名:」→「項目名: 現在値」に変更
** 開始・個数・増分・桁数で、限度を超過した数値を受け付けないようにした
** 桁埋で、2文字以上を指定した場合、最初の1文字のみ受け付けるようにした
** 桁埋・接頭・接尾・プレビューで、文字 &amp; が正常に表示されないのを修正
** 代替表示の対象に全角空白を追加。空欄を除外
** サロゲートペアに対応
* rev.1 (2013-08-25)
** 初版公開


==ソースコード==
== 連番の形式 ==
<source lang="javascript">
「形式」の内容は、ソースコードの最初あたりで定義されています。
//■連番を挿入
<syntaxhighlight lang="javascript">
//・カーソル位置or選択範囲の行頭に連番(半角数字)を挿入します。
//■形式
//・範囲選択してない場合は、連番の行数(個数)を変更できます。
// ----------------- ↓ここより下に定義を追加
//▲注意点
/* スタイル切替の例 */
//・桁埋め/接頭辞/接尾辞の文字入力時にキャンセルすると、
,{text:"%{style.text}\t%{style.pad}埋", style:"dec"}
// 入力前の状態に戻るのではなく、空欄=(無し)となります。
,{text:"%{style.text}\t%{style.pad}埋", style:"up-roman"}
//  ※空欄でOKした時とキャンセルした時の返り値が同じなので、
,{text:"%{style.text}\t%{style.pad}埋", style:"up-latin"}
//   分岐処理することができません。求ム、解決法。
,{text:"%{style.text}\t%{style.pad}埋", style:"hira"}
,{text:"%{style.text}\t%{style.pad}埋", style:"kanji"}


//■初期設定 ●初期値
/* プリセットの例 */
var start = 1; //始値 ●1      ※半角数字/0以上の整数
,{text:"(1),(2),(3) ...", style:"dec", prefix:"(", suffix:")"}
var lines = 10; //行数 ●10    ※半角数字/1以上の整数
,{text:"1.␣,2.␣,3.␣ ...", style:"dec", prefix:"", suffix:". "}
var incre = 1; //増分 ●1      ※半角数字/0以上の整数
,{text:"1/Z › ,2/Z › ,3/Z › ... (Z:終値)", style:"dec", prefix:"", suffix:"/%Z%t"}
var digit = 1; //桁数 ●1      ※半角数字/1以上の整数
,{text:"A ... Z [%{count}個]", style:"up-latin", start:"1", count:"26", step:"1"}
var supply = "0"; //桁埋め ●"0" ※文字列/半角1文字を推奨
,{text:"あ ... ん [%{count}個]", style:"hira", start:"1", count:"48", step:"1"}
var prefix = ""; //接頭辞 ●""   ※文字列
,{text:"北海道 ... 沖縄県 [%{count}個]", style:"pref", start:"1", count:"47", step:"1"}
var suffix = ""; //接尾辞 ●""   ※文字列
</syntaxhighlight>


//■プリセット一覧
<pre>
var last = start+(lines-1)*incre; //終値を計算
,{text:"表示文", style:"スタイル", start:"開始", count:"個数", step:"増分", digit:"桁数", pad:"桁埋", prefix:"接頭", suffix:"接尾"}
var f = [];
</pre>
// ----------------- ↓ここより下にプリセットを記述


f.push(["桁埋め=(無し)",{cmd:function(){
; style, start, count, step, digit, pad, prefix, suffix
  supply="";
: 適用する設定。
  }}]);
: ※<code>style</code> に存在しないスタイル名を指定すると、適用時にエラーになります。
: ※範囲選択時は個数が固定されるため、<code>count</code> の指定は無視されます。
; text
: メニューに表示する文章。下記の特殊記法が使えます。
:* <code>%{xxx}</code>:適用する設定 xxx の値。たとえば、<code>%{start}</code> など。
:* <code>%{style.xxx}</code>:適用する style の xxx の値。たとえば、<code>%{style.text}</code> など。
: ※ xxx が存在しない場合、<code>%{...}</code> 部分は置換されず、そのまま表示されます。
: ※<code>pad</code>, <code>prefix</code>, <code>suffix</code> の値には代替表示が適用されます。


f.push(["桁埋め= ",{cmd:function(){
=== 定義済みスタイル ===
  supply=" ";
初期状態で定義されているスタイルです。
  }}]);
{|class="wikitable"
! style !! 形式表示 !! 例 !! 説明
|-
| dec || 1,2,3 || 0,1,2,3 ... 9,10,11 ... || 算用数字(アラビア数字)。
|-
| dec-full || 1,2,3 || 0,1,2,3 ... 9,10,11 ... || 全角算用数字。
|-
| dec-kanji || 一,二,三 || 〇,一,二,三 ... 九,一〇,一一 ... || 漢数字・位取り表記。
|-
| up-roman || I,II,III || I,II,III ... IX,X,XI ... ||rowspan="2"| ローマ数字(英字表記)。1から3999まで。<br>0と4000以上は算用数字になります。
|-
| lo-roman || i,ii,iii || i,ii,iii ... ix,x,xi ...
|-
| up-latin || A,B,C || A,B,C ... Z,AA,AB ... ||rowspan="2"| 英字(ラテン・アルファベット)。26種。
|-
| lo-latin || a,b,c || a,b,c ... z,aa,ab ...
|-
| up-latin-full || A,B,C || A,B,C ... Z,AA,AB ... ||rowspan="2"| 全角英字。
|-
| lo-latin-full || a,b,c || a,b,c ... z,aa,ab ...
|-
| up-greek || Α,Β,Γ || Α,Β,Γ ... Ω,ΑΑ,ΑΒ ... ||rowspan="2"| ギリシャ文字。24種。
|-
| lo-greek || α,β,γ || α,β,γ ... ω,αα,αβ ...
|-
| hira || あ,い,う || あ,い,う ... ん,ああ,あい ... ||rowspan="2"| 仮名文字・五十音順。48種。
|-
| kata || ア,イ,ウ || ア,イ,ウ ... ン,アア,アイ ...
|-
| kata-half || ア,イ,ウ || ア,イ,ウ ... ン,アア,アイ ... || 半角カタカナ・五十音順。46種(「ヰヱ」が無い)。
|-
| hira-iroha || い,ろ,は || い,ろ,は ... す,いい,いろ ... ||rowspan="2"| 仮名文字・いろは順。47種(「ン」が無い)。
|-
| kata-iroha || イ,ロ,ハ || イ,ロ,ハ ... ス,イイ,イロ ...
|-
| kanji || 一,十,百 || 〇,一,二,三 ... 九,十,十一 ... || 漢数字。
|-
| daiji || 壱,拾,百 || 零,壱,弐,参 ... 九,拾,拾壱 ... || 漢数字・大字。
|-
| circled-num || ①,②,③ || ①,②,③ ... ⑨,⑩,⑪ ... || 丸数字。1から20まで。
|-
| stem || 十干 || 甲,乙,丙 ... 癸,甲,乙 ... || 十干(天干 / Heavenly Stems)。10種ループ。
|-
| branch || 十二支 || 子,丑,寅 ... 亥,子,丑 ... || 十二支(地支 / Earthly Branches)。12種ループ。
|-
| stem-branch || 六十干支 || 甲子,乙丑,丙寅 ... || 六十干支。60種ループ。
|-
| pref || 都道府県 || 北海道,青森県,岩手県 ... || 都道府県(prefecture)。47種ループ。
|-
| hitotsu || 一 || 一,一,一 ... || 一つ書き。1種ループ。
|-
| naka || ・ || ・,・,・ ... || 中黒・中点。和文の箇条書きで用いられる。
|-
| disc || • || •,•,• ... || Bullet(ビュレット)。欧文の箇条書きで用いる。
|-
| none || 無し || || 連番無し。
<!--
|-
| up-hex || 1,F,10 || 0,1,2,3 ... F,10,11 ... ||rowspan="2"| 十六進数(hexadecimal)。
|-
| lo-hex || 1,f,10 || 0,1,2,3 ... f,10,11 ...
|-
| up-latin-add || A,Z,ZA || A,B,C ... Z,ZA,ZB ... ||rowspan="2"| 英字(ローマ数字式)。260まで。
|-
| lo-latin-add || a,z,za || a,b,c ... z,za,zb ...
|-
| up-roman-full || I,M || I,II,III ... ||rowspan="2"| ローマ数字(全角英字表記)。
|-
| lo-roman-full || i,m || i,ii,iii ...
|-
| up-roman-num || Ⅰ,Ⅹ || Ⅰ,ⅠⅠ,ⅠⅠⅠ ... ||rowspan="2"| ローマ数字。1から39まで。
|-
| lo-roman-num || ⅰ,ⅹ || ⅰ,ⅰⅰ,ⅰⅰⅰ ...
|-
| up-roman-lig || Ⅰ,Ⅱ,Ⅲ || Ⅰ,Ⅱ,Ⅲ ... Ⅸ,Ⅹ,ⅩⅠ ... ||rowspan="2"| ローマ数字(合字表記)。1から39まで。
|-
| lo-roman-lig || ⅰ,ⅱ,ⅲ || ⅰ,ⅱ,ⅲ ... ⅸ,ⅹ,ⅹⅰ ...
|-
| circled-num || ①,②,③ || ⓪,①,②,③ ... ⑨,⑩,⑪ ... || 丸数字。0から50まで。⓪と㉑以上は Unicode 文字。
-->
|}


f.push(["桁埋め=0",{cmd:function(){
=== スタイルの定義 ===
  supply="0";
スタイルについては HTML / CSS の @counter-style を一部参考にしています。
  }}]);
* [https://www.w3.org/TR/css-counter-styles-3/ W3C - CSS Counter Styles Level 3] / [https://triple-underscore.github.io/css-counter-styles-ja.html 非公式日本語訳]
<syntaxhighlight lang="javascript">
//■スタイル
// ----------------- ↓ここより下に定義を追加
/* system:"numeric" の例 */
,"dec-full":{label:"1,2,3", text:"1,2,3 ... 9,10,11 ...",
system:"numeric", pad:"0", zero:"0", symbols:"0123456789".split("")}


f.push("----");
/* system:"alphabetic" の例 */
,"up-latin":{label:"A,B,C", text:"A,B,C ... Z,AA,AB ... (26種)",
system:"alphabetic", pad:" ", symbols:"ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("")}


f.push(["(n~nn)",{cmd:function(){
/* system:"cyclic" の例 */
  supply="";
,"stem":{label:"十干", text:"甲,乙,丙 ... 癸,甲,乙 ... (10種)",
  prefix="(";
system:"cyclic", pad:" ", symbols:"甲乙丙丁戊己庚辛壬癸".split("")}
  suffix=")";
  }}]);


f.push([" n~nn. ",{cmd:function(){
/* system:"additive" の例 */
  supply=" ";
,"up-roman":{label:"I,II,III", text:"I,II,III ... IX,X,XI ... (~3999)", max:3999,
  prefix="";
system:"additive", pad:" ", symbols:[1000,"M",900,"CM",500,"D",400,"CD",100,"C",90,"XC",50,"L",40,"XL",10,"X",9,"IX",5,"V",4,"IV",1,"I"]}
  suffix=". ";
  }}]);


f.push(["第0n~nn章",{cmd:function(){
/* system:"kanji" の例 */
  supply="0";
,"daiji":{label:"壱,拾,百", text:"壱,弐,参 ... 九,拾,拾壱 ...",
  prefix="";
system:"kanji", pad:" ", zero:"零", symbols:[["","壱","弐","参","四","五","六","七","八","九"],["","拾","百","千"],["","万","",""]]}
  suffix="";
</syntaxhighlight>
  }}]);


f.push(["第0n~nn位",{cmd:function(){
<pre>
  supply="0";
,"スタイル名":{label:"形式表示", text:"表示文", min:下限値, max:上限値,
  prefix="";
system:"生成方式", pad:"桁埋", zero:"ゼロの表現", symbols:配列}
  suffix="";
</pre>
  }}]);
; label
 
: 形式表示。メニューの「形式: ○○○」の ○○○ 部分に使用されます。
f.push(["n~nn/終値",{cmd:function(){
; text
  supply="";
: 表示文。<code>%{style.text}</code> で表示される文章。
  prefix="";
; min, max
  suffix="/"+ last;
: 生成できる連番の限度。限度を超えると算用数字の連番に移行します。
  }}]);
; pad
 
: スタイル既定の桁埋め文字。
// ----------------- ↑ここより上にプリセットを記述
; zero
 
: ゼロの表現。省略するとゼロ非対応とみなし、算用数字の <code>0</code> を出力します。
//■実行コード
; system, symbols
(function(){
:{|class="wikitable"
  var sel = document.Selection;
! system !! 説明・例示
  var cmd = [], cid = 101; //コマンド格納用,ID
|-
 
| numeric || 位取り記数法式の連番を生成します。<br><code>symbols:["0","1","2"]</code> → 1, 2, 10, 11, 12, 20, 21 ...<br><code>symbols:["a","b","c"]</code> → b, c, ba, bb, bc, ca, cb ...
  //選択範囲orカーソル位置の調整
|-
  var meP = mePosLogical;
| alphabetic || アルファベット式の連番を生成します。<br><code>symbols:["a","b","c"]</code> → a, b, c, aa, ab, ac, ba ...<br><code>symbols:["0","1","2"]</code> → 0, 1, 2, 00, 01, 02, 10 ...
  var ty = sel.GetTopPointY(meP); //範囲開始行
|-
  var by = sel.GetBottomPointY(meP); //範囲終了行
| cyclic || 巡回する連番を生成します。<br><code>symbols:["a","b","c"]</code> → a, b, c, a, b, c, a ...
  if (sel.Text) {
|-
    //◆範囲選択している場合:選択範囲を行頭行末まで拡張
| symbolic || 段々重ねとなる連番を生成します。<br><code>symbols:["a","b","c"]</code> → a, b, c, aa, bb, cc, aaa ...
    if (ty!=by && sel.GetBottomPointX(meP)==1) by--; //行選択時、次の行を含めない
|-
    sel.SetActivePoint(meP, 1, by);
| additive || ローマ数字式の連番を生成します。
    sel.EndOfLine(false, meP);
|-
    sel.SetAnchorPoint(meP, 1, ty);
| kanji || 漢数字式の連番を生成します。
    lines = 1 + by - ty; //行数を自動設定
|}
  } else {
    //◆範囲選択していない場合:カーソルを行頭に移動
    sel.SetActivePoint(meP, 1, ty);
  }
  //プリセット一覧からメニュー生成
  var preset = CreatePopupMenu();
  ListToMenu(f, preset);
  //ポップアップメニュー
  var tr = 10;
  while (tr>1) { //実行(1)orキャンセル(0)するまで繰り返す
    last = start+(lines-1)*incre; //終値を再計算
    //メニューを生成
    var popup = CreatePopupMenu();
    popup.Add("連番を挿入", 1);
    popup.Add(Naming(prefix+Padding(start)+suffix)+"", 0, meMenuGrayed);
    popup.Add(Naming(prefix+Padding(last)+suffix), 0, meMenuGrayed);
    popup.Add("----", 0, meMenuSeparator);
    popup.AddPopup("プリセット", preset);
    popup.Add("----", 0, meMenuSeparator);
    popup.Add("始値: "+ start, 2);
    popup.Add("行数: "+ lines, 3, ((sel.Text)? meMenuGrayed:0));
    popup.Add("増分: "+ incre, 4);
    popup.Add("桁数: "+ digit +"桁以上", 5, (supply? 0:meMenuGrayed));
    popup.Add("桁埋め: "+ Naming(supply), 6);
    popup.Add("接頭辞: "+ Naming(prefix), 7);
    popup.Add("接尾辞: "+ Naming(suffix), 9);
    //メニューを表示して処理
    tr = popup.Track(0);
    if (tr>100) {
      cmd[tr]["cmd"](); //プリセットの実行
      if (sel.Text) lines = 1 + by - ty; //範囲選択時、行数は固定させる
    }
    switch (tr) {
    case 1: sel.Text = Numbering(); Quit();
    case 2: start = PromptEx("始値: ※半角数字/0 以上の整数",start,0); break;
    case 3: lines = PromptEx("行数: ※半角数字/1 以上の整数",lines,1); break;
    case 4: incre = PromptEx("増分: ※半角数字/0 以上の整数",incre,0); break;
    case 5: digit = PromptEx("桁数: ※半角数字/1 以上の整数",digit,1); break;
    case 6: supply = Prompt("桁埋め: ※半角1文字を推奨",supply); break;
    case 7: prefix = Prompt("接頭辞:",prefix); break;
    case 9: suffix = Prompt("接尾辞:",suffix); break;
    }
  }
 
  //▼桁埋め関数:現在値との桁数差を求め、桁埋めする
  function Padding(num) {
    var sup = "";
    var diff = (digit > String(last).length)? digit : String(last).length;
    diff = diff - String(num).length;
    for (var i=0; i<diff; i++) sup += supply;
    return sup + num;
  };
  //▼連番を挿入する関数
  function Numbering() {
    var num = start;
    var output = [];
    if (sel.Text) {
      //◆範囲選択している場合
      var input = sel.Text.split("\n");
      for (var i=0; i<input.length; i++) {
        var text = prefix + Padding(num) + suffix + input[i];
        output.push(text);
        num += incre;
      }
      return output.join("\n");
    } else {
      //◆範囲選択していない場合
      for (var i=0; i<lines; i++) {
        var text = prefix + Padding(num) + suffix + "\n";
        output.push(text);
        num += incre;
      }
      return output.join("");
    }
  };
 
  //▼プロンプト拡張:入力文字を簡易判定
  function PromptEx(text,input,mode) {
    var p = Prompt(text,input);
    switch (mode) {
    case 0: //0以上の整数
    case 1: //1以上の整数
      return (parseInt(p) >= mode)? parseInt(p) : input;
    }
    return p;
  };
  //▼メニュー表示補助関数
  function Naming(str) {
    if (!str) return "(無し)"; //空欄の場合 (無し) と表示
    str = str.replace(/ /g,"\u2423"); //半角空白をU+2423に
    str = str.replace(/\t/g," \u203A "); //水平タブを U+203A に
    return str;
  };
  //▼メニュー生成用関数
  function ListToMenu(List, M) {
    for (var i=0; i<List.length; i++) {
      var L = List[i];
      //セパレータ
      if (typeof L == "string" && /^-+$/.test(L)) {
        M.Add(L, 0, meMenuSeparator);
      //サブメニュー
      } else if (typeof L[1] == "function") {
        var sub_popup = CreatePopupMenu();
        M.AddPopup(L[0], sub_popup);
        var sub_f = [];
        L[1](sub_f);
        ListToMenu(sub_f, sub_popup); //再帰処理:サブメニュー作成
      //コマンド
      } else if (typeof L[1] == "object") {
        cmd[cid] = L[1];
        M.Add(Naming(L[0]), cid++);
      }
    }
  };
})();
</source>
 
==開発者メモ==
* 半角数字以外の連番 →未定
「プリセット一覧」のような「連番タイプ一覧」を作る案がありましたが、繰上がり処理・桁埋め処理・メニュー処理が複雑になり、仕様がまとまらなくて頓挫しました。<br>個人的に、アルファベットやひらがなの連番は使用頻度が低く、開発意欲が湧きません。
* 文字入力時キャンセルすると(無し)になる仕様
現状、「仕様です」と言う他ありません。<br>キャンセルすると入力前の状態に戻る事を期待するのが自然だろうと思うのですが、空欄で OK した時とキャンセルした時の返り値が同じらしく、対策しようがありません。<br>解決法があれば、ご教授ください。

2024年9月3日 (火) 11:04時点における最新版

概要[編集]

連番を挿入するマクロです。

連番を挿入 連番の挿入を実行します。
非選択時は、個数分の連番行を挿入します。
通常選択/矩形選択時は、論理行頭に連番を挿入します。
複数選択時は、範囲先頭に連番を挿入します。
設定の記憶 設定の一時的な記憶。Mery 3.0.0 以降で表示・利用できます。
挿入実行時か [今すぐ記憶] で記憶され、[記憶を消去] で消去します。
形式 連番の種類(スタイル)。
プリセット(あらかじめ用意した設定)の適応もここで行います。
開始 開始番号(0以上の整数)。
個数 個数(1以上の整数)。非選択時のみ変更できます。
..数値 と入力すると、数値を終了番号とみなします。
たとえば、..9 なら9までで終わる連番になるよう個数を逆算します。
増分 増加幅(0以上の整数)。
桁数 最低桁数(0以上の整数。0 で最長桁揃え)。
桁埋めしたくない場合、1 を指定してください。
桁埋 桁埋め文字(1文字)。結合文字列には対応していません。
空欄にすると、スタイル既定の桁埋め文字が適用されます。
接頭
接尾
連番の前後に付加する文字列。下記の特殊記法が使えます。
%t (タブ)、%% (文字 %)、%A (始値)、%Z (終値)
(プレビュー)
もっと見る
連番の内容(最初と最後)の下見です。
[もっと見る] で最初6個と最後6個を下見できます。

注意事項[編集]

  • 連番の限度は 9007兆1992億5474万0991 (253−1) です。JavaScript の仕様では、この数値を超えると整数の取り扱いに不都合が生じます。
  • 個数の限度は初期設定で10万個です。
  • 桁埋・接頭・接尾の入力時にキャンセルすると、前の状態に戻るのではなく、空欄となります。これは仕様上解決できませんので、ご了承ください。
  • 桁埋・接頭・接尾・プレビューでは、下記のような代替表示が行われます。
    • 半角空白 (U+0020) → (U+2423) と表示
    • 全角空白 (U+3000) → (U+303C) と表示
    • 水平タブ (U+0009) →  ›  (U+203A) と表示
  • プレビューでは、最長桁数を実際より少なく見積もることがあります。
  • 設定の記憶は、同窓で記憶を共有・保持します(=別窓になると別記憶になる)。
    • 個数については、非選択時のみ更新されます。

ダウンロード[編集]

ファイル:連番を挿入.zip

内容
  • 連番を挿入.ico
  • 連番を挿入.js

変更履歴[編集]

  • rev.4 (2020-05-17)
    • .zip 内の Macros フォルダを除去。ファイルのみ収録
    • 複数選択に試験対応(Mery 3.0.1 以降)
      • 選択範囲の数を個数として、範囲先頭に連番を挿入します
    • 元に戻すで選択範囲も戻すようにした(Mery 3.0.1 以降)
      • 都合上、Mery 3.0.0 は動作対象外とした
    • 設定を一時的ながら記憶できるようにした(Mery 3.0.0 以降)
      • メニューに「設定の記憶」を追加
    • 個数の限度を指定できるようにした(初期値10万個) ※個数が多いと PC の性能によってはクラッシュするため
      • 個数の入力ダイアログに限度の表示を追加
    • 連番の挿入を実行後、ステータスバーに処理時間を表示するようにした
    • スタイルの定義 range を廃止し、min と max に分離
    • 指定した style が存在しない場合、初期設定の style に戻す仕様に変更
  • rev.3 (2019-12-30)
    • 1億以上の漢数字連番で万億の文字が出力されない場合がある不具合を修正
      • 例> 「一億二万三」が「一億二三」に、「一兆九億八万」が「一兆九八」になる
  • rev.2 (2019-12-21)
    • アイコンファイルを同梱し、読み込むようにした
    • 連番の挿入を実行後、実行範囲を行選択するようにした
    • 「プレビュー」を一番下に移動し、「もっと見る」を追加
    • スタイルの概念を導入(英字・仮名・ローマ数字・漢数字連番などに対応)
      • メニューに「形式」を追加。「プリセット」は削除
    • 個数で、..数値 と入力すると終了番号とみなすようにした
    • 指定した桁数までしか桁埋めしない仕様に変更
      • 桁数を 0 にすると最長桁揃えができるようにした
    • 桁埋を空欄にした場合、スタイルの既定を適用する仕様に変更
    • 接頭・接尾で、% による特殊記法を導入
    • 入力ダイアログの見出しを「項目名:」→「項目名: 現在値」に変更
    • 開始・個数・増分・桁数で、限度を超過した数値を受け付けないようにした
    • 桁埋で、2文字以上を指定した場合、最初の1文字のみ受け付けるようにした
    • 桁埋・接頭・接尾・プレビューで、文字 & が正常に表示されないのを修正
    • 代替表示の対象に全角空白を追加。空欄を除外
    • サロゲートペアに対応
  • rev.1 (2013-08-25)
    • 初版公開

連番の形式[編集]

「形式」の内容は、ソースコードの最初あたりで定義されています。

//■形式
// ----------------- ↓ここより下に定義を追加
/* スタイル切替の例 */
,{text:"%{style.text}\t%{style.pad}埋", style:"dec"}
,{text:"%{style.text}\t%{style.pad}埋", style:"up-roman"}
,{text:"%{style.text}\t%{style.pad}埋", style:"up-latin"}
,{text:"%{style.text}\t%{style.pad}埋", style:"hira"}
,{text:"%{style.text}\t%{style.pad}埋", style:"kanji"}

/* プリセットの例 */
,{text:"(1),(2),(3) ...", style:"dec", prefix:"(", suffix:")"}
,{text:"1.␣,2.␣,3.␣ ...", style:"dec", prefix:"", suffix:". "}
,{text:"1/Z › ,2/Z › ,3/Z › ... (Z:終値)", style:"dec", prefix:"", suffix:"/%Z%t"}
,{text:"A ... Z [%{count}個]", style:"up-latin", start:"1", count:"26", step:"1"}
,{text:"あ ... ん [%{count}個]", style:"hira", start:"1", count:"48", step:"1"}
,{text:"北海道 ... 沖縄県 [%{count}個]", style:"pref", start:"1", count:"47", step:"1"}
,{text:"表示文", style:"スタイル", start:"開始", count:"個数", step:"増分", digit:"桁数", pad:"桁埋", prefix:"接頭", suffix:"接尾"}
style, start, count, step, digit, pad, prefix, suffix
適用する設定。
style に存在しないスタイル名を指定すると、適用時にエラーになります。
※範囲選択時は個数が固定されるため、count の指定は無視されます。
text
メニューに表示する文章。下記の特殊記法が使えます。
  • %{xxx}:適用する設定 xxx の値。たとえば、%{start} など。
  • %{style.xxx}:適用する style の xxx の値。たとえば、%{style.text} など。
※ xxx が存在しない場合、%{...} 部分は置換されず、そのまま表示されます。
pad, prefix, suffix の値には代替表示が適用されます。

定義済みスタイル[編集]

初期状態で定義されているスタイルです。

style 形式表示 説明
dec 1,2,3 0,1,2,3 ... 9,10,11 ... 算用数字(アラビア数字)。
dec-full 1,2,3 0,1,2,3 ... 9,10,11 ... 全角算用数字。
dec-kanji 一,二,三 〇,一,二,三 ... 九,一〇,一一 ... 漢数字・位取り表記。
up-roman I,II,III I,II,III ... IX,X,XI ... ローマ数字(英字表記)。1から3999まで。
0と4000以上は算用数字になります。
lo-roman i,ii,iii i,ii,iii ... ix,x,xi ...
up-latin A,B,C A,B,C ... Z,AA,AB ... 英字(ラテン・アルファベット)。26種。
lo-latin a,b,c a,b,c ... z,aa,ab ...
up-latin-full A,B,C A,B,C ... Z,AA,AB ... 全角英字。
lo-latin-full a,b,c a,b,c ... z,aa,ab ...
up-greek Α,Β,Γ Α,Β,Γ ... Ω,ΑΑ,ΑΒ ... ギリシャ文字。24種。
lo-greek α,β,γ α,β,γ ... ω,αα,αβ ...
hira あ,い,う あ,い,う ... ん,ああ,あい ... 仮名文字・五十音順。48種。
kata ア,イ,ウ ア,イ,ウ ... ン,アア,アイ ...
kata-half ア,イ,ウ ア,イ,ウ ... ン,アア,アイ ... 半角カタカナ・五十音順。46種(「ヰヱ」が無い)。
hira-iroha い,ろ,は い,ろ,は ... す,いい,いろ ... 仮名文字・いろは順。47種(「ン」が無い)。
kata-iroha イ,ロ,ハ イ,ロ,ハ ... ス,イイ,イロ ...
kanji 一,十,百 〇,一,二,三 ... 九,十,十一 ... 漢数字。
daiji 壱,拾,百 零,壱,弐,参 ... 九,拾,拾壱 ... 漢数字・大字。
circled-num ①,②,③ ①,②,③ ... ⑨,⑩,⑪ ... 丸数字。1から20まで。
stem 十干 甲,乙,丙 ... 癸,甲,乙 ... 十干(天干 / Heavenly Stems)。10種ループ。
branch 十二支 子,丑,寅 ... 亥,子,丑 ... 十二支(地支 / Earthly Branches)。12種ループ。
stem-branch 六十干支 甲子,乙丑,丙寅 ... 六十干支。60種ループ。
pref 都道府県 北海道,青森県,岩手県 ... 都道府県(prefecture)。47種ループ。
hitotsu 一,一,一 ... 一つ書き。1種ループ。
naka ・,・,・ ... 中黒・中点。和文の箇条書きで用いられる。
disc •,•,• ... Bullet(ビュレット)。欧文の箇条書きで用いる。
none 無し 連番無し。

スタイルの定義[編集]

スタイルについては HTML / CSS の @counter-style を一部参考にしています。

//■スタイル
// ----------------- ↓ここより下に定義を追加
/* system:"numeric" の例 */
,"dec-full":{label:"1,2,3", text:"1,2,3 ... 9,10,11 ...",
 system:"numeric", pad:"0", zero:"0", symbols:"0123456789".split("")}

/* system:"alphabetic" の例 */
,"up-latin":{label:"A,B,C", text:"A,B,C ... Z,AA,AB ... (26種)",
 system:"alphabetic", pad:" ", symbols:"ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("")}

/* system:"cyclic" の例 */
,"stem":{label:"十干", text:"甲,乙,丙 ... 癸,甲,乙 ... (10種)",
 system:"cyclic", pad:" ", symbols:"甲乙丙丁戊己庚辛壬癸".split("")}

/* system:"additive" の例 */
,"up-roman":{label:"I,II,III", text:"I,II,III ... IX,X,XI ... (~3999)", max:3999,
 system:"additive", pad:" ", symbols:[1000,"M",900,"CM",500,"D",400,"CD",100,"C",90,"XC",50,"L",40,"XL",10,"X",9,"IX",5,"V",4,"IV",1,"I"]}

/* system:"kanji" の例 */
,"daiji":{label:"壱,拾,百", text:"壱,弐,参 ... 九,拾,拾壱 ...",
 system:"kanji", pad:" ", zero:"零", symbols:[["","壱","弐","参","四","五","六","七","八","九"],["","拾","百","千"],["","万","億","兆"]]}
,"スタイル名":{label:"形式表示", text:"表示文", min:下限値, max:上限値,
 system:"生成方式", pad:"桁埋", zero:"ゼロの表現", symbols:配列}
label
形式表示。メニューの「形式: ○○○」の ○○○ 部分に使用されます。
text
表示文。%{style.text} で表示される文章。
min, max
生成できる連番の限度。限度を超えると算用数字の連番に移行します。
pad
スタイル既定の桁埋め文字。
zero
ゼロの表現。省略するとゼロ非対応とみなし、算用数字の 0 を出力します。
system, symbols
system 説明・例示
numeric 位取り記数法式の連番を生成します。
symbols:["0","1","2"] → 1, 2, 10, 11, 12, 20, 21 ...
symbols:["a","b","c"] → b, c, ba, bb, bc, ca, cb ...
alphabetic アルファベット式の連番を生成します。
symbols:["a","b","c"] → a, b, c, aa, ab, ac, ba ...
symbols:["0","1","2"] → 0, 1, 2, 00, 01, 02, 10 ...
cyclic 巡回する連番を生成します。
symbols:["a","b","c"] → a, b, c, a, b, c, a ...
symbolic 段々重ねとなる連番を生成します。
symbols:["a","b","c"] → a, b, c, aa, bb, cc, aaa ...
additive ローマ数字式の連番を生成します。
kanji 漢数字式の連番を生成します。
スポンサーリンク