OfficeスクリプトとVBAの違いを同じ処理で徹底比較

当ページのリンクには広告 (Amazonアソシエイト含む) が含まれています。
office script vs vba

※本記事の情報は 2026年6月時点 のものです。仕様・ライセンスは変わりやすいため、最新情報は本文中のMicrosoft Learn公式リンクをご確認ください。

サクッと結論

OfficeスクリプトとVBAの一番の違いは「動く場所と言語」です。VBAはデスクトップ版Excelの中でVisual Basic for Applicationsで動く昔ながらのマクロ。OfficeスクリプトはWeb版Excelを中心に、Windows/Mac版Excelでも使えるTypeScriptベースの新しい自動化です。

  • デスクトップで完結・1台で十分 → そのままVBAでOK
  • Web版Excelで動かしたい・人と共有したい・Power Automateで自動実行したい → Officeスクリプト

迷ったら「今あるVBAは残したまま、新しく作る自動化だけOfficeスクリプトで試す」が一番ラクです。

「VBAしか触ったことがないけど、最近Officeスクリプトってよく聞くな」「会社のExcelがブラウザ版になって、いつものマクロが動かなくなった」——この記事はそういう人のために書きました。

このブログではVBAの記事を多く扱ってきたので、Officeスクリプトも「VBAの新しい書き方」くらいに見てしまいがちでした。でも同じ処理の書き方を並べてみると、単なる後継ではなく「向いている場所が違う自動化」だと分かります。この記事では、その「住む世界の違い」を同じ処理のコードを並べて、できるだけ体感してもらえるように書いていきます。

よく使う度
難しさ
実務重要度
目次

OfficeスクリプトとVBAの違いを5つの軸で比較(言語・環境・料金)

OfficeスクリプトとVBAの違いを5つの軸で比較(言語・環境・料金)

まずは全体像から。細かいコードの前に、「そもそも何がどう違うのか」を5つの軸でまとめます。ここを押さえておくと、このあとのコード比較がぐっと分かりやすくなります。

下の表は、左がOfficeスクリプト、右がVBAです。あなたの状況に近いのはどちらか、見比べてみてください。

スクロールできます
比較する軸OfficeスクリプトVBA
言語TypeScript(JavaScript系)Visual Basic for Applications
主に動く場所Web版Excel(クラウド)中心。Windows/Mac版でも可デスクトップ版Excel(Windows/Mac)
Web版Excelで動くか動く動かない
料金・前提法人/教育機関向けMicrosoft 365が中心(個人向けは2026年6月時点プレビュー段階)Excelに標準搭載・追加費用なし
スクリプトの保存先OneDrive(ブックとは別に保存)ブックの中に埋め込み(.xlsm)
共有・共同編集との相性Excel for the webの共同編集と合わせやすいブック共有は可能だが、VBAマクロの実行・編集はデスクトップ版Excel前提
Power Automate連携できる(自動実行・定期実行)できない
イベント実行(セル変更時など)非対応対応
MsgBox・InputBox・ユーザーフォームVBAと同じ画面部品はなし(入力はmain関数の引数で代替可)あり

表だけ見ると違いだらけですが、ここから特に大事な3つを掘り下げます。

言語と「動く場所」の違い(TypeScript×クラウド vs Basic×デスクトップ)

一番の違いは、書く言語動く場所がまるごと違うことです。

VBAは「Visual Basic」という言語で、あなたのパソコンにインストールされたExcelの中で動きます。20年以上ほとんど変わっていない、良くも悪くも枯れた仕組みです。

Officeスクリプトは「TypeScript」という、Web開発で使われるJavaScript系の言語で書きます。そして動く主戦場は、ブラウザで開くWeb版Excel(Excel on the web)です。クラウド前提で設計されているので、ファイルを開いていなくてもPower Automateから動かせます。

もう一つ、Web版Excelを前提にするメリットとして共同編集との相性があります。Microsoft SupportのExcelブックの共同編集の説明では、同じExcelブックを複数人で開き、変更を数秒単位で確認できると説明されています。Officeスクリプト自体が共同編集機能を持つわけではありませんが、「Web版Excelで同じブックを見ながら、チームで使う処理を自動化したい」なら、導入を検討する価値があります。

ここで多くのVBAユーザーがつまずく現実的な問題があります。それが「VBA入りブックはWeb版Excelで開けるけれど、VBAマクロはWeb版Excel上では実行できない」ことです。

つまり、.xlsm ファイルをブラウザで開いたときに、ブックの中身を見たり編集したり、既存マクロを残したまま保存したりすることはできます。ただし、Web版Excel上でVBAマクロを作成・実行・編集することはできません。マクロを使う必要がある場合は、デスクトップ版Excelで開く必要があります。この扱いはMicrosoft公式のExcel for the webでVBAマクロを扱う説明(Microsoft Support)と、OfficeスクリプトとVBAの違い(Microsoft Learn)で確認できます。

Microsoft Supportの要点: Web版Excelでは、VBAマクロの作成・実行・編集はできません。
出典: Excel for the webでVBAマクロを扱う説明(Microsoft Support・確認日2026-06-20)

逆に言えば、ネットにつながらない環境やデスクトップだけで完結する作業なら、VBAのほうが手軽で速いことも多いです。どちらが上という話ではなく、動かしたい場所で選ぶのが正解です。

料金・ライセンス・保存場所・共有の違い

意外と見落とされがちですが、お金とファイルの扱いも大きく違います。

VBAはExcelに最初から入っているので、追加費用ゼロで誰でも使えます。マクロはブック(.xlsm)の中に埋め込まれるので、ファイルを渡せばマクロも一緒についていきます。

一方Officeスクリプトは、利用に法人向け・教育機関向けのMicrosoft 365プランが中心です(2026年6月時点で、個人・家庭向けプランはプレビュー段階)。Officeスクリプトの動作要件はOffice スクリプトのプラットフォーム制限(Microsoft Learn)にまとまっています。さらにスクリプトはブックの中ではなくOneDriveに別々に保存されます。

この「別々に保存される」のが、最初は戸惑うけれど慣れると便利なポイントです。スクリプトとデータが分かれているので、同じスクリプトを色々なブックに使い回せますし、Microsoft 365管理者が許可していれば、組織内のチームにも共有できます。VBAのように「マクロ入りファイルを取引先に送ったらセキュリティ警告で開いてもらえない…」という事故とは、考え方がかなり違います。

スクロールできます
観点OfficeスクリプトVBA
初期費用対応M365プランが必要不要(標準搭載)
保存場所OneDrive(独立保存)ブック内(.xlsm)
配布・共有組織内のリンク共有が得意ファイルを渡す
社外への共有基本は不可(組織内共有が前提)ファイル送付はできるがマクロ警告が出やすい

できること・できないことを早見表で(逆引き対応)

「結局、何ができて何ができないの?」をまとめます。特にVBAでできていたのにOfficeスクリプトでできないことは、移行を考える人にとって一番の地雷ポイントなので、逆引きできるようにしました。

スクロールできます
やりたいことOfficeスクリプトVBA
セルの読み書き・書式・並べ替えできるできる
Web版Excelで自動化できるできない
Power Automateで定期・自動実行できるできない
メッセージボックスで結果を表示できない(代替あり)できる
セル変更などのイベントで自動起動できないできる
別のブックを開いて操作単体では基本そのブックのみ。
Power Automate併用で複数ファイル処理は可能
できる
ローカルのファイル・フォルダ操作できないできる
他のソフト(Outlook等)をCOMで操作できないできる(主にWindows版VBA)

Officeスクリプトが「できないこと」は、ほとんどがセキュリティのためにわざと制限されているものです。Officeスクリプトは開いているブックの中だけを触れる“箱庭(サンドボックス)”の中で動くので、あなたのPCのファイルを勝手に書き換えたり、別のソフトを操作したりはできません。この制限の一覧はMicrosoft公式のOfficeスクリプトとVBAの違い(Microsoft Learn)に基づいています。

「できないこと」の具体的な回避策は、このあとの同じ処理をOfficeスクリプトとVBAで書いて比較移行と使い分けで詳しく説明します。

同じ処理をOfficeスクリプトとVBAで書いて比較(コード対訳)

ここがこの記事の本番です。言葉で「違う違う」と言われてもピンと来ないので、VBAでよく書く定番処理を、そのままOfficeスクリプトで書くとどうなるかを並べていきます。

先に、書き方が変わる「理由」を3つだけ知っておくと、丸暗記せずに読めます。

  1. セルは必ず getRange() で取る
    • VBAの Range("A1")Cells(1,1) の代わりに、Officeスクリプトは sheet.getRange("A1") のように毎回シートから範囲を取得します。
  2. 値の取得と設定が「メソッド」になる
    • .Value = ではなく .setValue() / .getValue() のように、カッコ付きの命令(メソッド)で読み書きします。
  3. 大量データは配列でまとめて処理する
    • 1セルずつループで触ると遅いので、getValues() で表をまるごと配列に取り込み、計算してから書き戻すのが定石です。

この3つさえ頭に入れば、あとは「VBAのあの書き方は、OSではこう」と置き換えるだけです。

VBAの定番コードをOfficeスクリプトで書くとこうなる

まずは基本中の基本から。VBA側→Officeスクリプト側の順で並べます。VBAは標準モジュールへそのまま貼って実行できるよう、すべて Sub ... End Sub の形にしています。

Officeスクリプトは function main(workbook: ExcelScript.Workbook): void { ... } という決まった形の中に書きます。Microsoft LearnのOffice Scriptsの基礎でも、各スクリプトは ExcelScript.Workbook 型の workbook を最初の引数に持つ main 関数が入口だと説明されています。さらに、セル値を扱う場合はTypeScriptに期待する型を伝えることが重要なので、この記事のOfficeスクリプト例では ExcelScript.WorksheetExcelScript.Rangenumber(string | number | boolean)[][] などの型も書いておきます。

セルの値を取得・入力する

VBA:

Sub SetValueSample()
    Dim ws As Worksheet
    Set ws = ActiveSheet

    ws.Range("A1").Value = "売上"
    MsgBox ws.Range("A1").Value
End Sub
VBAでセルの値を取得・入力した結果

Officeスクリプト:

function main(workbook: ExcelScript.Workbook): void {
  const sheet: ExcelScript.Worksheet = workbook.getActiveWorksheet();
  const targetCell: ExcelScript.Range = sheet.getRange("A1");

  targetCell.setValue("売上");

  const value: string | number | boolean = targetCell.getValue();
  console.log(value);
}
Office scriptでセルの値を取得・入力した結果

VBAの MsgBox がOfficeスクリプトでは console.log(コードエディター下部のログに出力)に変わっているのがポイントです。Officeスクリプトには画面に出るメッセージボックスがないので、確認は基本ログで行います。セルの値取得・設定をもっと詳しく知りたい人は、Officeスクリプトでのセル操作の基本(Officeスクリプトでセルの値を取得・設定する方法)もあわせてどうぞ。

最終行を取得する

VBAユーザーの魂のコード、最終行取得です。考え方がけっこう変わります。

VBA:

Sub GetLastRowSample()
    Dim ws As Worksheet
    Dim lastRow As Long
    Set ws = ActiveSheet

    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
    MsgBox lastRow
End Sub
VBAで最終行を取得する

Officeスクリプト:

function main(workbook: ExcelScript.Workbook): void {
  const sheet: ExcelScript.Worksheet = workbook.getActiveWorksheet();
  const used: ExcelScript.Range | undefined = sheet.getUsedRange();

  if (used === undefined) {
    console.log("データがありません");
    return;
  }

  // 0始まりの行番号 + 行数 - 1 で最終行(0始まり)
  const lastRowIndex: number = used.getRowIndex() + used.getRowCount() - 1;
  const lastRowNumber: number = lastRowIndex + 1;

  console.log(lastRowNumber); // 1始まりの行番号に直すと人間に分かりやすい
}
Office script最終行を取得する

VBAの End(xlUp) のような便利技がない代わりに、getUsedRange()(使われている範囲)から行数を計算します。シートが完全に空の場合は undefined になるため、上のコードでは先にデータ有無を確認しています。注意点として、Officeスクリプトの行番号は0始まりです(A1の行は0)。ここはVBA脳のまま書くと1行ズレるので要注意。最終行・最終列の取り方は奥が深いので、Officeスクリプトで最終行・最終列を取得する方法で深掘りしています。

表を1行ずつループ処理する

「2行目から最終行まで回して、条件で書き込む」——実務で一番使うやつです。

VBA:

Sub MarkAchievedSample()
    Dim ws As Worksheet
    Dim i As Long
    Dim lastRow As Long
    Set ws = ActiveSheet

    lastRow = ws.Cells(ws.Rows.Count, 2).End(xlUp).Row

    For i = 2 To lastRow
        If ws.Cells(i, 2).Value >= 100 Then
            ws.Cells(i, 3).Value = "達成"
        End If
    Next i
End Sub
VBAを表を1行ずつループ処理する

Officeスクリプト:

function main(workbook: ExcelScript.Workbook): void {
  const sheet: ExcelScript.Worksheet = workbook.getActiveWorksheet();
  const used: ExcelScript.Range | undefined = sheet.getUsedRange();

  if (used === undefined) {
    return;
  }

  const lastRowNumber: number = used.getRowIndex() + used.getRowCount();
  if (lastRowNumber < 2) {
    return;
  }

  const amountRange: ExcelScript.Range = sheet.getRange(`B2:B${lastRowNumber}`);
  const values: (string | number | boolean)[][] = amountRange.getValues();

  for (let i: number = 0; i < values.length; i++) {
    const amount: number = Number(values[i][0]);

    if (amount >= 100) {
      sheet.getCell(i + 1, 2).setValue("達成"); // C列。i=0 はExcelの2行目
    }
  }
}
Office scriptで表を1行ずつループ処理する

VBAは「セルを1個ずつ見にいく」のに対し、Officeスクリプトは「まず表を配列に取り込んでからループする」のが基本です。上の例ではB列の金額だけを getValues() でまとめて読み取り、条件に合う行だけC列へ書き込んでいます。クラウド越しにセルを何百回も触ると遅くなるため、本格的な大量データでは setValues() でまとめて書き戻す形も検討します。ループの書き方はOfficeスクリプトのfor文・繰り返し処理forEachでの配列処理も参考にしてください。

条件分岐でセルを色付けする

VBA:

Sub ColorNegativeValuesSample()
    Dim ws As Worksheet
    Dim i As Long
    Dim lastRow As Long
    Set ws = ActiveSheet

    lastRow = ws.Cells(ws.Rows.Count, 2).End(xlUp).Row

    For i = 2 To lastRow
        If ws.Cells(i, 2).Value < 0 Then
            ws.Cells(i, 2).Interior.Color = RGB(255, 199, 206)
        End If
    Next i
End Sub
VBAで条件分岐でセルを色付けする

Officeスクリプト:

function main(workbook: ExcelScript.Workbook): void {
  const sheet: ExcelScript.Worksheet = workbook.getActiveWorksheet();
  const used: ExcelScript.Range | undefined = sheet.getUsedRange();

  if (used === undefined) {
    return;
  }

  const lastRowNumber: number = used.getRowIndex() + used.getRowCount();
  if (lastRowNumber < 2) {
    return;
  }

  const amountRange: ExcelScript.Range = sheet.getRange(`B2:B${lastRowNumber}`);
  const values: (string | number | boolean)[][] = amountRange.getValues();

  for (let i: number = 0; i < values.length; i++) {
    const amount: number = Number(values[i][0]);

    if (amount < 0) {
      sheet.getCell(i + 1, 1).getFormat().getFill().setColor("#FFC7CE"); // B列
    }
  }
}
Office scriptで条件分岐でセルを色付けする

VBAの RGB(255,199,206) は、OfficeスクリプトではHTMLカラーコードの文字列 "#FFC7CE" のように指定します。.Interior.Color.getFormat().getFill().setColor() と、命令を点でつないでいく形になるのもJavaScript系らしいところ。色付けの詳しいやり方はOfficeスクリプトでセルに色を付ける方法にまとめています。

シートを追加・コピーする

VBA:

Sub AddSummarySheetSample()
    Dim ws As Worksheet
    Set ws = Worksheets.Add

    ws.Name = "集計_" & Format(Now, "hhmmss")
End Sub
VBAでシートを追加・コピーする

Officeスクリプト:

function main(workbook: ExcelScript.Workbook): void {
  const sheetName: string = `集計_${Date.now()}`;
  const newSheet: ExcelScript.Worksheet = workbook.addWorksheet(sheetName);

  newSheet.getRange("A1").setValue("集計シート");
}
Office scriptでシートを追加・コピーする

ここはむしろOfficeスクリプトのほうがスッキリ書けます。なお、Excelのシート名は同じブック内で重複できないため、上の例ではVBAもOfficeスクリプトも時刻付きの名前にして、コピペ後に何度実行しても止まりにくい形にしています。

VBAのMsgBox・InputBox・ユーザーフォームはどうなる?

VBAから移ってきた人が最初に「えっ、ないの!?」と驚くのが、MsgBoxInputBox・ユーザーフォームをVBAと同じ感覚では使えないことです。OfficeスクリプトにはVBAのようなメッセージボックスやユーザーフォームはありません。一方で、実行時の入力は main 関数のパラメーターで受け取れるため、InputBox 的な用途は別の形で代替できます。

困りますが、ちゃんと代わりがあります。

スクロールできます
VBAでやっていたことOfficeスクリプトでの代わり
MsgBoxで結果や進捗を表示console.log() でログに出力して確認する
MsgBoxで処理完了を知らせるシートに結果を書き込む/Power Automateで通知(Teams・メール)に回す
InputBoxでユーザーに値を入れさせるmain関数のパラメーターで実行時入力を受け取る/Power Automate側で入力させる
ユーザーフォームで入力画面シート自体を入力フォーム代わりにする

つまり「人とのやりとり」は、Officeスクリプト単体ではなくPower Automateと組み合わせて外側で行うのが基本設計です。最初は不便に感じますが、慣れると「自動化はExcelの外でやる」という考え方に頭が切り替わります。

つまずきやすい違いと対策(失敗例)

私が実際にVBAの感覚のまま書いて転んだポイントを、失敗例としてまとめます。先に知っておくと回避できます。

  • 失敗1:行番号が1個ズレる
    起きること:VBAの癖で「2行目だから2」と書くと、Officeスクリプトでは1行ズレます。
    対策:Officeスクリプトの行・列番号は0始まりと覚えます。getCell(0, 0) がA1です。
  • 失敗2:セルを1個ずつ触って激遅になる
    起きること:getRange().setValue() をループの中で何百回も呼ぶと、体感で分かるほど遅くなります。
    対策:getValues() で配列に取り込み、計算してから setValues() で一気に書き戻します。
  • 失敗3:getValue() の中身が文字列で来て計算がおかしい
    起きること:セルの値を取ると、数値のつもりが文字列扱いになり、比較がおかしくなることがあります。
    対策:Number(...) で数値に変換してから比較します。上のコードでも Number(values[i][0]) としています。

このあたりは、VBAという母語があるからこそ「方言の違い」に戸惑う部分です。逆に言えば、VBAでロジックが組める人なら、つまずくのは文法の細部だけ。土台はそのまま活きます。

VBAからOfficeスクリプトへの移行と使い分け・Power Automate活用

「違いは分かった。で、自分はどうすればいいの?」に答えるパートです。結論から言うと、VBAを捨てる必要はありません。大事なのは順番と使い分けです。

VBA資産を捨てない移行ステップと共存のロードマップ

いきなり全部のマクロをOfficeスクリプトに書き換えるのは、現実的ではないしリスクも高いです。私のおすすめは「今あるVBAは触らず、新規だけOSで試す」段階的な進め方です。

  1. 今動いているVBAはそのまま使う
    • 壊れていないものを急いで直す必要はありません。
  2. 次に作る小さな自動化を1個だけOSで書く
    • 例えば「表を整形して色を付ける」程度の処理から。
  3. Web版で動かす必要が出たものからOSへ移す
    • 共有・クラウド・Power Automateが絡むものを優先。
  4. VBAとOSを役割分担させる
    • デスクトップ完結=VBA、クラウド/共有/自動実行=OS、と棲み分ける。

Officeスクリプトには、VBAのマクロ記録と同じ「操作レコーダー(アクションレコーダー)」があります。Excelの操作を記録するとTypeScriptのコードが自動生成されるので、まずはこれで「VBAのマクロ記録と同じノリ」で始めると挫折しにくいです。公式の始め方はExcelのオフィススクリプト概要(Microsoft Learn)が分かりやすいです。

なお、VBAのコードをOfficeスクリプトに自動変換するツールは、2026年6月時点で公式には用意されていません。基本は手作業での書き換えになりますが、この記事の対訳を見れば分かるとおり、ロジックはそのまま流用できるので「文法の翻訳」だけの作業になります。

VBAにはできないPower Automate連携の実例

Officeスクリプト最大の武器が、Power Automateと組み合わせた自動実行です。Microsoft Learnでも、VBAにはPower Automateコネクタがない一方で、OfficeスクリプトはPower Automateから実行できると説明されています。ここに価値を感じるかが移行の分かれ目になります。

たとえば、こんな自動化がノーコードに近い形で組めます。

  • 毎朝8時に、売上ブックをOfficeスクリプトで集計し、結果をTeamsに自動投稿する
  • 特定のメールが届いたら、添付Excelの中身をOfficeスクリプトで整形してOneDriveに保存する
  • フォーム回答が入ったら、Officeスクリプトで一覧に追記してグラフを更新する

ポイントは「Excelを開いていなくても、クラウド側のフローから動かせる」こと。VBAは基本的に誰かがデスクトップ版Excelでファイルを開き、マクロを実行する前提です。一方、Officeスクリプト+Power Automateなら、スケジュール実行やイベント起点のフローに組み込めます。Power Automateからの呼び出し方は公式のOfficeスクリプトとVBAの違い(Microsoft Learn)でも、VBAにはないコネクタ連携として紹介されています。

TypeScriptの学習コストと、どっちを選ぶべきか

「TypeScriptって難しそう…」と身構える人が多いですが、VBAでIf文やFor文が書ける人なら、新しく覚えるのは文法の上澄みだけです。変数・条件分岐・ループ・配列という幹はVBAと同じ。違うのは枝葉(getRangeの作法、0始まり、メソッド記法、配列での一括処理)くらいです。

状況別に、私のおすすめをはっきり書いておきます。

スクロールできます
あなたの状況おすすめ
デスクトップExcelだけで完結。共有もしないVBAのままでOK。無理に移行しなくていい
会社のExcelがWeb版に移行した/する予定Officeスクリプトを今から触り始めるのが正解
自動実行・定期実行・他サービス連携をしたいOfficeスクリプト+Power Automate
同じブックを複数人で共同編集しながら使いたいOfficeスクリプトを検討。Web版Excelの共同編集と自動化を合わせやすい
チームでマクロを共有・運用したいOfficeスクリプト(組織内のリンク共有がラク)
プログラミング自体が初めてまずは情報量の多いVBAから入り、必要になったらOSへ
動画で学ぶなら PR・アフィリエイト

対訳で違いは掴めた。次は「自分の業務で書ける」まで動画で体系化

この記事の対訳でVBAとの違いはイメージできても、いざ自分の表に当てはめると手が止まりがちです。getRange()やメソッド記法、0始まりの行番号、Power Automate連携まで、つまずきポイントを画面で追いながら順番に進めたい人は、動画講座が近道になります。

見るべきポイント Office ScriptsとPower Automate連携まで扱っているか
失敗しにくい選び方 更新日・無料プレビュー・返金条件を確認
向いている人 文字だけだと型や接続設定でつまずきやすい人

※価格・割引・返金条件・講座内容は変わる場合があります。購入前にUdemy上で最新情報をご確認ください。

そしてもう一つ、声を大にして言いたいことがあります。VBAにせよOfficeスクリプトにせよ、これからの自動化はAIと組み合わせるとさらに速くなるということです。コードの叩き台をAIに書かせて、自分は意図の確認と修正に集中する。私自身、最近はこのスタイルでVBAもOfficeスクリプトも書くスピードが大きく変わりました。「Excel自動化×AI」で残業を減らす具体的な進め方は、ExcelをAI(Claude)で自動化する方法にまとめているので、移行とあわせてのぞいてみてください。

VBA → Officeスクリプト → AI

自動化は「AIに書かせて、自分は確認に集中」でもう一段ラクになる

コードの叩き台をAIに任せ、自分は意図の確認と修正だけ——私が残業を減らせた一番の転機がこれでした。VBAでもOfficeスクリプトでも使える、Excel×AIの具体的な進め方をまとめています。

よくある質問とまとめ(VBAは廃止される?Web版・Macは?)

最後に、検索でよく見かける疑問に答えてから、要点をまとめます。

VBAは廃止されるんですか?

2026年6月時点で、VBA自体の廃止アナウンスはありません。よく混同されるのは「VBScript」という別物のスクリプト言語で、こちらは廃止予定です。ExcelやWordに入っているVBAとは別物なので、いま必要以上に怖がる必要はありません。詳しくはMicrosoftの開発者ブログVBScript廃止に向けたVBAプロジェクトの準備(Microsoft 365 Developer Blog)を参照してください。

個人のMicrosoft 365でOfficeスクリプトは使えますか?

中心は法人向け・教育機関向けプランです。個人・家庭向けプランでの提供は2026年6月時点でプレビュー段階なので、会社のM365で使うのが基本になります。対応プランはOffice スクリプトのプラットフォーム制限(Microsoft Learn)で確認できます。

Web版・Mac・iPhoneのExcelで動きますか?

OfficeスクリプトはWeb版・Windows版・Mac版で動作しますが、iOS(iPhone/iPad)は非対応です。逆にVBAはWeb版で動きません。デバイスをまたいで使いたいならOfficeスクリプトが有利です。

OfficeスクリプトでVBAのマクロをそのまま実行できますか?

できません。両者は別物で、自動変換ツールも公式にはありません。移行する場合は、この記事の対訳のように手作業で書き換えることになります(ただしロジックは流用できます)。

初心者はどっちから学ぶべき?

ネット上の情報量とつまずいたときの解決しやすさでは、まだVBAに分があります。プログラミングが完全に初めてならVBAから、すでにWeb版や共有が前提ならOfficeスクリプトからでOKです。

まとめ
  • OfficeスクリプトとVBAの違いは「言語(TypeScript / VBA)」「動く場所(Web/クラウド連携 / デスクトップ)」「利用条件(対応M365プラン中心 / デスクトップExcel標準)」の3点が核
  • VBAでできてOfficeスクリプト単体では苦手なこと(MsgBox・イベント・別ブック操作・ローカル操作)は、Power Automateやログ、シート入力で代替を考える
  • 同じ処理でも書き方は変わるが、ロジックはそのまま流用できるので、VBA経験者の移行コストは文法だけ
  • 移行は全部やり直さず、今あるVBAは残して新規からOSで試すのが安全
  • 「Web版で動かす・共有する・自動実行する」ならOfficeスクリプト、デスクトップ完結ならVBAで十分

VBAで培った「処理を分解して組み立てる力」は、Officeスクリプトでもそのまま武器になります。言語が変わっても、あなたの経験は無駄になりません。まずは操作レコーダーで小さな自動化を1個、Officeスクリプトで作ってみるところから始めてみてください。

この記事で「AIも気になった」なら、次はここから

VBAもOfficeスクリプトも、これからはAIと組み合わせると一気に速くなります。「Excel×AIで残業を減らす」具体的な手順を、続けて読んでみてください。

PR・自社製品

毎回の工程表、コードで作り込まず「専用ツール」に切り出す手もあります

対象がガントチャート・工程表の手直しなら、毎回VBA/Officeスクリプトを書くより、ローカルで動く買い切りアプリに任せた方がラクな場面があります。Schedikaは、HTMLをPCブラウザで開いて工程表を編集し、CSV・PNG・Excel補助ブックへ戻せるツールです。

そのほかの深掘り記事(必要になったときに開く)

変数・繰り返し・最終行など、コードを書き始めたときに具体的な疑問が出てから読むと吸収しやすい記事群です。一度に全部読む必要はありません。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次