<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>日付が変わるごとに見出しを入れるJavaScriptマクロ（サクラエディタ） on ゆきんこの勉強法</title>
		<link>https://benkyosukisuki.com/tags/%E6%97%A5%E4%BB%98%E3%81%8C%E5%A4%89%E3%82%8F%E3%82%8B%E3%81%94%E3%81%A8%E3%81%AB%E8%A6%8B%E5%87%BA%E3%81%97%E3%82%92%E5%85%A5%E3%82%8C%E3%82%8Bjavascript%E3%83%9E%E3%82%AF%E3%83%AD%E3%82%B5%E3%82%AF%E3%83%A9%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF/</link>
		<description>Recent content in 日付が変わるごとに見出しを入れるJavaScriptマクロ（サクラエディタ） on ゆきんこの勉強法</description>
		<generator>Hugo</generator>
		<language>ja-jp</language>
		
		
		
		
			<lastBuildDate>Wed, 22 Jul 2026 04:11:34 +0900</lastBuildDate>
		
			<atom:link href="https://benkyosukisuki.com/tags/%E6%97%A5%E4%BB%98%E3%81%8C%E5%A4%89%E3%82%8F%E3%82%8B%E3%81%94%E3%81%A8%E3%81%AB%E8%A6%8B%E5%87%BA%E3%81%97%E3%82%92%E5%85%A5%E3%82%8C%E3%82%8Bjavascript%E3%83%9E%E3%82%AF%E3%83%AD%E3%82%B5%E3%82%AF%E3%83%A9%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>サクラエディタのJavaScriptマクロで、ツイートの絶対年月日がブレイクする位置に区切りの見出しをつける</title>
				<link>https://benkyosukisuki.com/software/2026-07-22-04-11-34-09-00/</link>
				<pubDate>Wed, 22 Jul 2026 04:11:34 +0900</pubDate>
				<guid>https://benkyosukisuki.com/software/2026-07-22-04-11-34-09-00/</guid>
				<description>&lt;h2 id=&#34;サクラエディタのjavascriptマクロでツイートの絶対年月日がブレイクする位置に区切りの見出しをつける&#34;&gt;サクラエディタのJavaScriptマクロで、ツイートの絶対年月日がブレイクする位置に区切りの見出しをつける&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;// datekaiseki.js&#xD;&#xA;// 全選択してテキストを取得&#xD;&#xA;Editor.SelectAll();&#xD;&#xA;var text = Editor.GetSelectedString();&#xD;&#xA;&#xD;&#xA;// 改行コードで分割して1行ずつ処理&#xD;&#xA;var lines = text.split(/\r?\n/);&#xD;&#xA;var result = [];&#xD;&#xA;&#xD;&#xA;// 英語の月名を数値に変換するマッピング&#xD;&#xA;var monthMap = {&#xD;&#xA;    &amp;#34;Jan&amp;#34;: 0, &amp;#34;Feb&amp;#34;: 1, &amp;#34;Mar&amp;#34;: 2, &amp;#34;Apr&amp;#34;: 3, &amp;#34;May&amp;#34;: 4, &amp;#34;Jun&amp;#34;: 5,&#xD;&#xA;    &amp;#34;Jul&amp;#34;: 6, &amp;#34;Aug&amp;#34;: 7, &amp;#34;Sep&amp;#34;: 8, &amp;#34;Oct&amp;#34;: 9, &amp;#34;Nov&amp;#34;: 10, &amp;#34;Dec&amp;#34;: 11&#xD;&#xA;};&#xD;&#xA;&#xD;&#xA;var lastDate = null; // 直前の行のDateオブジェクトを記録&#xD;&#xA;&#xD;&#xA;for (var i = 0; i &amp;lt; lines.length; i++) {&#xD;&#xA;    var line = lines[i];&#xD;&#xA;    &#xD;&#xA;    // 行内から「Nov 1, 2020」や「Nov 3, 2021」のような形式を正規表現で探す&#xD;&#xA;    var match = line.match(/([A-Z][a-z]{2})\s+(\d{1,2}),\s+(\d{4})/);&#xD;&#xA;    &#xD;&#xA;    if (match) {&#xD;&#xA;        var monthEn = match[1];&#xD;&#xA;        var dayNum  = parseInt(match[2], 10);&#xD;&#xA;        var yearNum = parseInt(match[3], 10);&#xD;&#xA;        var monthNum = monthMap[monthEn];&#xD;&#xA;        &#xD;&#xA;        if (monthNum !== undefined) {&#xD;&#xA;            // 現在の行の日付オブジェクトを作成 (時刻は00:00:00に統一)&#xD;&#xA;            var currentDate = new Date(yearNum, monthNum, dayNum);&#xD;&#xA;            &#xD;&#xA;            if (lastDate === null) {&#xD;&#xA;                // 初回のみ無条件で見出しを出力&#xD;&#xA;                var yearStr = currentDate.getFullYear();&#xD;&#xA;                var monthStr = (&amp;#34;0&amp;#34; + (currentDate.getMonth() + 1)).slice(-2);&#xD;&#xA;                result.push(&amp;#34;## &amp;#34; + yearStr + &amp;#34;-&amp;#34; + monthStr + &amp;#34;-&amp;#34;);&#xD;&#xA;            } else {&#xD;&#xA;                // 直前の日付からの経過日数を計算&#xD;&#xA;                var diffTime = currentDate.getTime() - lastDate.getTime();&#xD;&#xA;                var diffDays = Math.floor(diffTime / (1000 * 60 * 60 * 24));&#xD;&#xA;                &#xD;&#xA;                // 日付が未来に進んでいる場合、その日数分だけ見出しを出力する&#xD;&#xA;                if (diffDays &amp;gt; 0) {&#xD;&#xA;                    for (var d = 0; d &amp;lt; diffDays; d++) {&#xD;&#xA;                        var targetDate = new Date(lastDate.getTime());&#xD;&#xA;                        targetDate.setDate(targetDate.getDate() + d + 1);&#xD;&#xA;                        &#xD;&#xA;                        var yearStr = targetDate.getFullYear();&#xD;&#xA;                        var monthStr = (&amp;#34;0&amp;#34; + (targetDate.getMonth() + 1)).slice(-2);&#xD;&#xA;                        &#xD;&#xA;                        // ループの最後（＝現在の行と同じ日付）は実際のデータがあるので通常見出し、&#xD;&#xA;                        // それより前のループ（＝途中のスキップされた日付）は「｜なし」を付与&#xD;&#xA;                        if (d &amp;lt; diffDays - 1) {&#xD;&#xA;                            result.push(&amp;#34;## &amp;#34; + yearStr + &amp;#34;-&amp;#34; + monthStr + &amp;#34;-｜なし&amp;#34;);&#xD;&#xA;                        } else {&#xD;&#xA;                            result.push(&amp;#34;## &amp;#34; + yearStr + &amp;#34;-&amp;#34; + monthStr + &amp;#34;-&amp;#34;);&#xD;&#xA;                        }&#xD;&#xA;                    }&#xD;&#xA;                }&#xD;&#xA;            }&#xD;&#xA;            lastDate = currentDate; // 基準日を更新&#xD;&#xA;        }&#xD;&#xA;    }&#xD;&#xA;    &#xD;&#xA;    // 元の行を追加&#xD;&#xA;    result.push(line);&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;// 編集中のテキストを更新&#xD;&#xA;Editor.InsText(result.join(&amp;#34;\r\n&amp;#34;));&#xD;&#xA;&#xD;&#xA;// 選択状態を解除してクリップボードにコピー&#xD;&#xA;Editor.SelectAll(0);&#xD;&#xA;Editor.Copy(0);&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;欠点１月初あたりの初回ツイート日以前においてツイートなし見出しなしは人間が判断して補う必要がある&#34;&gt;【欠点１】：月初あたりの初回ツイート日以前において［ツイートなし＝見出しなし］は人間が判断して補う必要がある&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;例えば、## 2019-09-06が初回ツイートなしだとしたら、［## 2019-09-(01)｜なし］［## 2019-09-(02)｜なし］［## 2019-09-(03)｜なし］［## 2019-09-(04)｜なし］［## 2019-09-(05)｜なし］を人間が手動で補う。&lt;/li&gt;&#xA;&lt;li&gt;(01)～(05)は、連番マクロhiduke.jsを使うなら、打ち込む必要はない。［## 2019-09-］を５行分挿入しておくだけでよい。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;欠点２月末あたりの最終ツイート日以降においてツイートなし見出しなしは人間が判断して補う必要がある&#34;&gt;【欠点２】：月末あたりの最終ツイート日以降において［ツイートなし＝見出しなし］は人間が判断して補う必要がある&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;例えば、## 2019-09-30がツイートなしだとしたら、## 2019-09-29があれば、そこで見出しが止まっているので、## 2019-09-30を人間が手で補う必要がある。&lt;/li&gt;&#xA;&lt;li&gt;連番マクロhiduke.jsを使うなら、［## 2019-09-］までしか打ち込む必要がない。&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
			</item>
	</channel>
</rss>
