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

提供:MeryWiki
ナビゲーションに移動 検索に移動
(ZIPへのリンクを[メディア]に変更。ソースコードにCSS:overflowを設定。レイアウトを調整。)
(マクロ更新)
1行目: 1行目:
<div style="float:right">__TOC__</div>
<div style="float:right">__TOC__</div>


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


※アルファベット連番やカタカナ連番などには対応していません。
[[ファイル:InsertSequentialNumber_Popup.png]]


[[ファイル:InsertSequentialNumber_Popup.png|left]]
{|class="wikitable"
 
! 連番を挿入
{| class="wikitable"
| 連番の挿入を実行します。
!連番を挿入
|連番の挿入を実行します。
|-
!(プレビュー)
|挿入される連番の内容を事前に確認できます。
|-
|-
!プリセット
! 形式
|あらかじめ登録しておいた内容に従い、設定を一括変更します。
| 連番の種類(スタイル)。<br>プリセット(あらかじめ用意した設定)の適応もここで行います。
|-
|-
!始値
! 開始
|開始番号。0以上の半角数字を入力してください。
| 開始番号(0以上の整数)。
|-
|-
!行数
! 個数
|連番の個数。1以上の半角数字を入力してください。<br><span style="color:#c00;">※範囲選択している場合は変更できません。</span>
| 行数(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><span style="color:#c00;">※「桁埋め」が (無し) の場合、この設定は無視されます。</span>
| 最低桁数(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) です。超過した場合の動作は保証しません。<br>JavaScript の仕様では、この数値を超えると整数の取り扱いに不都合が生じます。
 
* 個数の限度は <b style="color:#c00;">42億</b>9496万7295 (2<sup>32</sup>−1) です。メモリ不足の場合の動作は保証しません。
==プリセットについて==
* 桁埋・接頭・接尾の入力時にキャンセルすると、前の状態に戻るのではなく、空欄となります。<br>これは仕様上解決できませんので、ご了承ください。
プリセットは、設定項目を一発で変更する機能です。<br>「プリセット一覧」部分を各自で編集する必要がありますが、よく使う設定をプリセットに登録しておけば、使い勝手が向上します。
* 桁埋・接頭・接尾・プレビューでは、下記のような代替表示が行われます。
 
** 半角空白 (U+0020) → <code></code> (U+2423) と表示
※記述ミスがあると正しく機能しません。セミコロン ; や括弧の打ち忘れ、打ち間違いに注意してください。
** 全角空白 (U+3000) → <code>〼</code> (U+303C) と表示
** 水平タブ (U+0009) → <code>&nbsp;›&nbsp;</code> (U+203A) と表示
* プレビューでは、最長桁数を実際より少なく見積もることがあります。


==ソースコード==
==ソースコード==
ダウンロード→ [[メディア:連番を挿入.zip|連番を挿入.zip]]
ダウンロード→ [[メディア:連番を挿入.zip|連番を挿入.zip]]


<source lang="javascript" style="height:40em; overflow:auto;">
* 拙作ですがアイコンファイル (連番を挿入.ico) を同梱してあります。<br>Mery 2.4.7 以降の場合、マクロ (連番を挿入.js) と同じフォルダに、<br>Mery 2.4.6 以前の場合、Mery.exe と同じフォルダに、<br>アイコンファイルを配置しておくとツールバーにアイコンが読み込まれます。
//■連番を挿入
// 2013/08/25
//
//・カーソル位置or選択範囲の行頭に連番(半角数字)を挿入します。
//・範囲選択してない場合は、連番の行数(個数)を変更できます。
//▲注意点
//・桁埋め/接頭辞/接尾辞の文字入力時にキャンセルすると、
// 入力前の状態に戻るのではなく、空欄=(無し)となります。
// ※空欄でOKした時とキャンセルした時の返り値が同じなので、
//  分岐処理することができません。求ム、解決法。


//■初期設定 ●初期値
==更新履歴==
var start = 1; //始値 ●1      ※半角数字/0以上の整数
[[ファイル:連番を挿入.zip]]
var lines = 10; //行数 ●10    ※半角数字/1以上の整数
var incre = 1; //増分 ●1      ※半角数字/0以上の整数
var digit = 1; //桁数 ●1      ※半角数字/1以上の整数
var supply = "0"; //桁埋め ●"0"  ※文字列/半角1文字を推奨
var prefix = ""; //接頭辞 ●""  ※文字列
var suffix = ""; //接尾辞 ●""  ※文字列


//■プリセット一覧
; 2019/12/21 (rev.2)
var last = start+(lines-1)*incre; //終値を計算
* アイコンファイルを同梱し、読み込むようにした。
var f = [];
* 連番の挿入を実行後、実行範囲を行選択するようにした。
// ----------------- ↓ここより下にプリセットを記述
* 「プレビュー」を一番下に移動し、「もっと見る」を追加。
* スタイルの概念を導入(英字・仮名・ローマ数字・漢数字連番などに対応)。
** 「形式」を追加。「プリセット」は削除。
* 個数で、<code>..数値</code> と入力すると終了番号とみなすようにした。
* 指定した桁数までしか桁埋めしない仕様に変更。
** 桁数を 0 にすると、最長桁揃えができるようにした。
* 桁埋を空欄にした場合、スタイルの既定を適用する仕様に変更。
* 接頭・接尾で、% による特殊記法を導入。
* 入力ダイアログの見出しを「項目名:」→「項目名: 現在値」に変更。
* 開始・個数・増分・桁数で、限度を超過した数値を受け付けないようにした。
* 桁埋で、2文字以上を指定した場合、最初の1文字のみ受け付けるようにした。
* 桁埋・接頭・接尾・プレビューで、文字 &amp; が正常に表示されないのを修正。
* 代替表示の対象に全角空白を追加。空欄を除外。
* サロゲートペアに対応。
; 2013/08/25 (rev.1)
* 初版公開。


f.push(["桁埋め=(無し)",{cmd:function(){
==連番の形式==
  supply="";
「形式」の内容は、ソースコードの最初あたりで定義されています。
  }}]);
<source lang="javascript">
//■形式
// ----------------- ↓ここより下に定義を追加
/* スタイル切替の例 */
,{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"}


f.push(["桁埋め= ",{cmd:function(){
/* プリセットの例 */
  supply=" ";
,{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"}
</source>


f.push(["桁埋め=0",{cmd:function(){
<pre>
  supply="0";
,{text:"表示文", style:"スタイル", start:"開始", count:"個数", step:"増分", digit:"桁数", pad:"桁埋", prefix:"接頭", suffix:"接尾"}
  }}]);
</pre>


f.push("----");
; style, start, count, step, digit, pad, prefix, suffix
: 適用する設定。
: ※<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(["(n~nn)",{cmd:function(){
===定義済みスタイル===
  supply="";
初期状態で定義されているスタイルです。
  prefix="(";
{|class="wikitable"
  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 ... ||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-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([" n~nn. ",{cmd:function(){
===スタイルの定義===
  supply=" ";
スタイルについては HTML / CSS の @counter-style を一部参考にしています。
  prefix="";
* [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 非公式日本語訳]
  suffix=". ";
<source lang="javascript">
  }}]);
//■スタイル
// ----------------- ↓ここより下に定義を追加
/* system:"numeric" の例 */
,"dec":{label:"1,2,3", text:"1,2,3 ... 9,10,11 ...",
system:"numeric", pad:"0", zero:"0", symbols:"0123456789".split("")}


f.push(["第0n~nn章",{cmd:function(){
/* system:"alphabetic" の例 */
  supply="0";
,"up-latin":{label:"A,B,C", text:"A,B,C ... Z,AA,AB ... (26種)",
  prefix="";
system:"alphabetic", pad:" ", symbols:"ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("")}
  suffix="";
  }}]);


f.push(["第0n~nn位",{cmd:function(){
/* system:"cyclic" の例 */
  supply="0";
,"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)", range:[1,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="/"+ last;
  }}]);


// ----------------- ↑ここより上にプリセットを記述
/* system:"kanji" の例 */
 
,"daiji":{label:",,", text:",,参 ... ,,拾壱 ...",
//■実行コード
system:"kanji", pad:" ", zero:"", symbols:[["","","弐","","","","","","",""],["","","",""],["","","",""]]}
(function(){
  var sel = document.Selection;
  var cmd = [], cid = 101; //コマンド格納用,ID
 
  //選択範囲orカーソル位置の調整
  var meP = mePosLogical;
  var ty = sel.GetTopPointY(meP); //範囲開始行
  var by = sel.GetBottomPointY(meP); //範囲終了行
  if (sel.Text) {
    //◆範囲選択している場合:選択範囲を行頭行末まで拡張
    if (ty!=by && sel.GetBottomPointX(meP)==1) by--; //行選択時、次の行を含めない
    sel.SetActivePoint(meP, 1, by);
    sel.EndOfLine(false, meP);
    sel.SetAnchorPoint(meP, 1, ty);
    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>
</source>


==開発者メモ==
<pre>
;半角数字以外の連番 ⇒未定
,"スタイル名":{label:"形式表示", text:"表示文", range:[下限値,上限値],
:「プリセット一覧」のような「連番タイプ一覧」を作る案がありましたが、繰上がり処理・桁埋め処理・メニュー処理が複雑になり、仕様がまとまらなくて頓挫しました。<br>個人的に、アルファベットやひらがなの連番は使用頻度が低く、開発意欲が湧きません。
system:"生成方式", pad:"桁埋", zero:"ゼロの表現", symbols:配列}
;文字入力時キャンセルすると (無し) になる仕様
</pre>
:現状、「仕様です」と言う他ありません。<br>キャンセルすると入力前の状態に戻る事を期待するのが自然だろうと思うのですが、空欄で OK した時とキャンセルした時の返り値が同じらしく、対処しようがありません。<br>解決法があれば、ご教授ください。
; label
: 形式表示。メニューの「形式: ○○○」の ○○○ 部分に使用されます。
; text
: 表示文。<code>%{style.text}</code> で表示される文章。
; range
: 生成できる連番の範囲。範囲を超えると算用数字の連番に移行します。
; pad
: スタイル既定の桁埋め文字。
; zero
: ゼロの表現。省略するとゼロ非対応とみなし、算用数字の <code>0</code> を出力します。
; system, symbols
:{|class="wikitable"
! system !! 説明・例示
|-
| 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 ...
|-
| 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 ...
|-
| cyclic || 巡回する連番を生成します。<br><code>symbols:["a","b","c"]</code> → a, b, c, a, b, c, a ...
|-
| symbolic || 段々重ねとなる連番を生成します。<br><code>symbols:["a","b","c"]</code> → a, b, c, aa, bb, cc, aaa ...
|-
| additive || ローマ数字式の連番を生成します。
|-
| kanji || 漢数字式の連番を生成します。
|}

2019年12月21日 (土) 21:56時点における版

カーソル行頭 or 選択範囲行頭に連番を挿入するマクロです。

InsertSequentialNumber Popup.png

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

注意点

  • 範囲選択時は行全体を選択してから、論理行頭(論理座標)に連番を挿入します。
  • 連番の限度は 9007兆1992億5474万0991 (253−1) です。超過した場合の動作は保証しません。
    JavaScript の仕様では、この数値を超えると整数の取り扱いに不都合が生じます。
  • 個数の限度は 42億9496万7295 (232−1) です。メモリ不足の場合の動作は保証しません。
  • 桁埋・接頭・接尾の入力時にキャンセルすると、前の状態に戻るのではなく、空欄となります。
    これは仕様上解決できませんので、ご了承ください。
  • 桁埋・接頭・接尾・プレビューでは、下記のような代替表示が行われます。
    • 半角空白 (U+0020) → (U+2423) と表示
    • 全角空白 (U+3000) → (U+303C) と表示
    • 水平タブ (U+0009) →  ›  (U+203A) と表示
  • プレビューでは、最長桁数を実際より少なく見積もることがあります。

ソースコード

ダウンロード→ 連番を挿入.zip

  • 拙作ですがアイコンファイル (連番を挿入.ico) を同梱してあります。
    Mery 2.4.7 以降の場合、マクロ (連番を挿入.js) と同じフォルダに、
    Mery 2.4.6 以前の場合、Mery.exe と同じフォルダに、
    アイコンファイルを配置しておくとツールバーにアイコンが読み込まれます。

更新履歴

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

2019/12/21 (rev.2)
  • アイコンファイルを同梱し、読み込むようにした。
  • 連番の挿入を実行後、実行範囲を行選択するようにした。
  • 「プレビュー」を一番下に移動し、「もっと見る」を追加。
  • スタイルの概念を導入(英字・仮名・ローマ数字・漢数字連番などに対応)。
    • 「形式」を追加。「プリセット」は削除。
  • 個数で、..数値 と入力すると終了番号とみなすようにした。
  • 指定した桁数までしか桁埋めしない仕様に変更。
    • 桁数を 0 にすると、最長桁揃えができるようにした。
  • 桁埋を空欄にした場合、スタイルの既定を適用する仕様に変更。
  • 接頭・接尾で、% による特殊記法を導入。
  • 入力ダイアログの見出しを「項目名:」→「項目名: 現在値」に変更。
  • 開始・個数・増分・桁数で、限度を超過した数値を受け付けないようにした。
  • 桁埋で、2文字以上を指定した場合、最初の1文字のみ受け付けるようにした。
  • 桁埋・接頭・接尾・プレビューで、文字 & が正常に表示されないのを修正。
  • 代替表示の対象に全角空白を追加。空欄を除外。
  • サロゲートペアに対応。
2013/08/25 (rev.1)
  • 初版公開。

連番の形式

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

//■形式
// ----------------- ↓ここより下に定義を追加
/* スタイル切替の例 */
,{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":{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)", range:[1,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:"表示文", range:[下限値,上限値],
 system:"生成方式", pad:"桁埋", zero:"ゼロの表現", symbols:配列}
label
形式表示。メニューの「形式: ○○○」の ○○○ 部分に使用されます。
text
表示文。%{style.text} で表示される文章。
range
生成できる連番の範囲。範囲を超えると算用数字の連番に移行します。
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 漢数字式の連番を生成します。
スポンサーリンク