piapia123
ja

VBScript コード整形

整形

処理はすべてブラウザ内で完結します。データは送信されません

入力
ファイルをここにドロップすると読み込めます
出力

VBScript コードのインデントを整えます。`Sub` / `If … End If` / `For … Next` / `Do … Loop` / `Select Case … End Select` といったブロックキーワードの対応関係から各行の深さを求めます。 ⚠️ はっきり書いておきます:このページには構文木がありません。 当サイトの他の 7 つの言語ツール(Python / Ruby / Java / C / C# / PHP / Perl)は tree-sitter で実際に構文解析し、ブロックの境界はパーサーが与えます。VBScript にはそれができません —— 既成の文法が存在しないからです。公開されている tree-sitter の文法集に VBScript は無く、npm にある唯一の VBA 文法はネイティブアドオンでブラウザでは動きません。 そこでキーワードの対応で代用しています。括弧を数える方式よりはずっと賢く、文字列やコメントの中の偽物(`"End If"` は終端ではない)、単行 `If`(`If x Then y = 1` に `End If` は無い)、行末 `_` の継続行を理解します。ただし「この `}` はどのブロックに属するか」といった問いには答えられません。構文自体が誤っているコードでは、ここのインデントが意図と合わないことがあります —— 他の 7 つは構文エラーがあってもブロック境界はパーサーから得られます。この点は隠さずここに書きます。 ⚠️ 変更するのは各行の先頭の空白だけで、行内の文字には一切触れません。 継続行・文字列・コメントの中身は触れません。 利点は何もダウンロードしないことです(他の 7 つはそれぞれ数百 KB〜5 MB の文法ファイルを取得します)。開いた瞬間に使えます。

機能

  • Sub / Function / If / For / Do / While / Select Case / With / Class の対応で整形します
  • 単行 If を認識します(`If x Then y = 1` はブロックの開始ではありません)
  • 文字列やコメントの中の `End If` などは対応判定に使いません
  • 行末 `_` の継続行はそのまま保持し、途中で切りません
  • 変えるのは行頭の空白だけで、行内の文字には触れません
  • インデントはスペース 2 / 4 / タブから選択
  • キーワードの大文字小文字は区別しません(VBScript 自体が区別しないため)
  • シンタックスハイライト表示に対応
  • すべて端末内で完結し、コードは送信されません(文法ファイルの取得も不要)

使い方

  1. コードを左側に貼り付けます
  2. インデント幅を選びます
  3. Ctrl/⌘ + Enter か「実行」を押します
  4. 「コピー」で結果を取得します

よくある質問

同じサイトの Python / Java の整形ツールと同じものですか?
いいえ。能力差は実際にありますので、はっきり書きます。 それらは tree-sitter で構文木を作り、各行の深さはそれが属する文法構造で決まります —— パーサーはどの `}` がどのブロックを閉じるかを知っています。 VBScript には使える文法が存在しないため(公開の tree-sitter 文法集に無く、npm にある唯一の VBA 文法はネイティブアドオンでブラウザでは動きません)、ここではキーワードの対応を使います。`If … End If` や `For … Next` といった対を見つけ、そこから深さを求めます。 差が出るのは構文が誤っているコードです:構文木なら構文が誤っていてもブロック境界は分かりますが、キーワード対応はその行の最初の語が何かしか分かりません。したがってコード自体が壊れている場合、ここのインデントは意図と合わないことがあります。
単行 If を使っていますが、崩れませんか?
崩れません。VBScript では `If x Then y = 1` に `End If` はありません。これをブロックの開始と見なすと、以降の行がどんどん深くなってしまいます。 ここの判定基準はその行が `Then` で終わるかです:`If x Then` はブロック、`If x Then y = 1` は単行です。`If x Then ' 説明` のように Then の後ろがコメントの場合はブロック扱いのままです —— 判定の前にコメントを取り除いているためです。
文字列やコメントの中のキーワードを構造と誤認しませんか?
誤認しません。構造を判定する前にコメントを外し、文字列リテラルも理解しています:`s = "End If"` の中の `End If` はキーワードではなく、`' End Sub` は行全体がコメントです。 文字列内の連続する引用符(`"彼は ""はい"" と言った"`)は VBScript の規則どおり 1 つのエスケープ引用符として扱うので、文字列が途中で終わることもありません。
コードの中身は変わりますか?
変わりません。触るのは各行の先頭の空白だけです —— 行内の 1 文字も動かさず、並べ替え・折り返し・行削除・文字列やコメントへの介入も行いません。行末 `_` の継続行はまるごと保持します。あのインデントはあなたが決めたもので、組み直すと 1 つの文が 2 つに割れてしまうからです。 同じ理由で、欠けた構文を補うことはできません。これはインデントのツールであり、修復のツールではありません。

関連ツール