OfficeScript(オフィススクリプト)でワークシート上のテーブルを操作する方法をまとめて紹介します。
テーブルの作成・解除からコピー、フィルター、並べ替え、スタイル変更などテーブル操作のスクリプトを解説します。
スクリプト内のシート名・テーブル名・セル範囲・列名などは状況に応じて変更して使用してください。
テーブルの作成・テーブル名の設定
まずはテーブルの作成とテーブル名の設定について紹介します。
そのままコピペで試せるようにシート名・セル範囲・テーブル名などには例となる値を入れていますので、状況に応じて変更して使ってください。
テーブル化 (テーブル名設定)
function main(workbook: ExcelScript.Workbook) {
// 指定したシート名のワークシートを取得します
const sheet = workbook.getWorksheet("Sheet1"); // 任意のシート名に変更してください(例: "Sheet1")
// テーブル化したい範囲を指定します
const range = sheet.getRange("A1:C4"); // 任意の範囲に変更してください(例: "A1:C4")
// 指定した範囲をテーブル化します
const table = sheet.addTable(range, true); // 第2引数 "true" は、範囲の最初の行をヘッダーとして使用することを意味します
// テーブルの名前を設定します
table.setName("MyTable"); // 必要に応じてテーブル名を変更してください(例: "MyTable")
}
テーブル名の変更
function main(workbook: ExcelScript.Workbook) {
// テーブル名を指定してテーブル名を変更するテーブルを取得します
const table = workbook.getTable('MyTable'); // 任意のテーブル名に変更してください(例: "MyTable")
// 新しいテーブルの名前を設定します
table.setName("NewTable"); // 必要に応じてテーブル名を変更してください(例: "NewTable")
}
Sponsored link
テーブルの取得
次にテーブルの取得方法について紹介します。ブック内すべてのテーブル、シート内すべてのテーブル、テーブル名指定と3つの取得方法を紹介しています。
スクリプト内のシート名・テーブル名・セル範囲・列名などは状況に応じて変更して使用してください。
すべてのテーブルを取得(ブック内)
function main(workbook: ExcelScript.Workbook) {
// ブック内のすべてのテーブルを取得します
const tables = workbook.getTables();
}
すべてのテーブルを取得(ワークシート内)
function main(workbook: ExcelScript.Workbook) {
// シート名を指定してワークシートを取得します
const sheet = workbook.getWorksheet("Sheet1"); // 任意のシート名に変更してください(例: "Sheet1")
// シート内のすべてのテーブルを取得します
const tables = sheet.getTables();
}
テーブル名指定でテーブルを取得
function main(workbook: ExcelScript.Workbook) {
// テーブル名を指定してテーブルを取得します
const table = workbook.getTable('MyTable'); // 任意のテーブル名に変更してください(例: "MyTable")
}
Sponsored link
テーブルの解除(範囲へ変換)
次にテーブルの解除方法について紹介します。ブック内すべてのテーブル、シート内すべてのテーブル、テーブル名指定と3つの解除方法を紹介しています。
スクリプト内のシート名・テーブル名・セル範囲・列名などは状況に応じて変更して使用してください。
すべてのテーブルを解除(ブック内)
function main(workbook: ExcelScript.Workbook) {
// ブック上のすべてのテーブルを取得
const tables = workbook.getTables();
// 各テーブルを通常の範囲に変換
tables.forEach(table => {
table.convertToRange();
});
}
すべてのテーブルを解除(ワークシート内)
function main(workbook: ExcelScript.Workbook) {
// シートを取得
const sheet = workbook.getWorksheet("Sheet1"); // 任意のシート名に変更してください(例: "Sheet1")
// シート上のすべてのテーブルを取得
const tables = sheet.getTables();
// 各テーブルを通常の範囲に変換
tables.forEach(table => {
table.convertToRange();
});
}
テーブル名指定でテーブルを解除
function main(workbook: ExcelScript.Workbook) {
// テーブル名を指定してテーブルを取得します
const table = workbook.getTable('MyTable'); // 任意のテーブル名に変更してください(例: "MyTable")
table.convertToRange();
}
Sponsored link
テーブルの削除
次にテーブルの削除方法について紹介します。ブック内すべてのテーブル、シート内すべてのテーブル、テーブル名指定と3つの削除方法を紹介しています。
スクリプト内のシート名・テーブル名・セル範囲・列名などは状況に応じて変更して使用してください。
すべてのテーブルを削除(ブック内)
function main(workbook: ExcelScript.Workbook) {
// ブック上のすべてのテーブルを取得
const tables = workbook.getTables();
// 各テーブルを通常の範囲に変換
tables.forEach(table => {
table.delete();
});
}
すべてのテーブルを削除(ワークシート内)
function main(workbook: ExcelScript.Workbook) {
// シートを取得
const sheet = workbook.getWorksheet("Sheet1"); // 任意のシート名に変更してください(例: "Sheet1")
// シート上のすべてのテーブルを取得
const tables = sheet.getTables();
// 各テーブルを通常の範囲に変換
tables.forEach(table => {
table.delete();
});
}
テーブル名指定でテーブルを削除
function main(workbook: ExcelScript.Workbook) {
// テーブル名を指定してテーブルを取得します
const table = workbook.getTable('MyTable'); // 任意のテーブル名に変更してください(例: "MyTable")
table.delete();
}
Sponsored link
テーブルの列追加・列削除
次にテーブルの列追加および列削除方法について紹介します。具体例として、列名ありで値は空の列追加の方法も載せてあります。
スクリプト内のシート名・テーブル名・セル範囲・列名などは状況に応じて変更して使用してください。
列の追加
function main(workbook: ExcelScript.Workbook) {
// テーブル名を指定してテーブルを取得します
const table = workbook.getTable('MyTable'); // 任意のテーブル名に変更してください(例: "MyTable")
// --- 列の追加 ---
// 第1引数: 列の挿入位置(例: -1 または null は列の最後に追加)
// 第2引数: 列のデータ
// 第3引数: 列の名前
table.addColumn(-1, ["NewColumn", "data1", "data2", "data3"],"NewColumn");
}
列の追加(列名指定、値は空)
function main(workbook: ExcelScript.Workbook) {
// テーブル名を指定してテーブルを取得します
const table = workbook.getTable('MyTable'); // 任意のテーブル名に変更してください(例: "MyTable")
// --- 列の追加 ---
table.addColumn(null,null,"NewColumn");
}
列の削除(列名指定)
function main(workbook: ExcelScript.Workbook) {
// テーブル名を指定してテーブルを取得します
const table = workbook.getTable('MyTable'); // 任意のテーブル名に変更してください(例: "MyTable")
// 列名指定で列削除
table.getColumnByName('Column1').delete(); // 任意の列名に変更してください(例: "Column1")
}
列の削除(列インデックス指定)
function main(workbook: ExcelScript.Workbook) {
// テーブル名を指定してテーブルを取得します
const table = workbook.getTable('MyTable'); // 任意のテーブル名に変更してください(例: "MyTable")
// 列インデックス指定で列削除
table.getColumnById(1).delete(); // 任意の列インデックスに変更してください(例: 1)
}
Sponsored link
テーブルの行追加・行削除
次にテーブルの行追加および行削除方法について紹介します。
スクリプト内のシート名・テーブル名・セル範囲・列名などは状況に応じて変更して使用してください。
行の追加
function main(workbook: ExcelScript.Workbook) {
// テーブル名を指定してテーブルを取得します
const table = workbook.getTable('MyTable'); // 任意のテーブル名に変更してください(例: "MyTable")
// --- 行の追加 ---
// 第1引数: 行の挿入位置(例: -1 または null は行の最後に追加)
// 第2引数: 行のデータ ※省略した場合は空白行となります
table.addRow(-1, ["data1", "data2", "data3"]);
}
行の追加(空白行)
function main(workbook: ExcelScript.Workbook) {
// テーブル名を指定してテーブルを取得します
const table = workbook.getTable('MyTable'); // 任意のテーブル名に変更してください(例: "MyTable")
// --- 行の追加 ---
// 第1引数: 行の挿入位置(例: -1 または null は行の最後に追加)
// 第2引数: 行のデータ ※省略した場合は空白行となります
table.addRow();
}
行の削除(行インデックス指定)
function main(workbook: ExcelScript.Workbook) {
// テーブル名を指定してテーブルを取得します
const table = workbook.getTable('MyTable'); // 任意のテーブル名に変更してください(例: "MyTable")
// --- 行の削除 ---
// 第1引数: 行の削除位置(例:null または0 は一番上の行)
// 第2引数: 削除する行数 ※省略した場合は1行となります
table.deleteRowsAt(0,1); // 任意の行インデックスと行数に変更してください
}
Sponsored link
テーブルの重複削除
次にテーブルの重複削除方法について紹介します。
スクリプト内のシート名・テーブル名・セル範囲・列名などは状況に応じて変更して使用してください。
重複の削除(列インデックス指定)
function main(workbook: ExcelScript.Workbook) {
// テーブル名を指定してテーブルを取得します
const table = workbook.getTable('MyTable'); // 任意のテーブル名に変更してください(例: "MyTable")
// テーブルの範囲と行数を取得
const tableRange = table.getRange();
const tableRowCount = table.getRowCount() ;
// 列インデックス指定で重複を削除
const removedResults: ExcelScript.RemoveDuplicatesResult = tableRange.removeDuplicates([0]); // 任意の列インデックスに変更してください(例: 0)
const removeRowCount = removedResults.getRemoved(); //削除した行数を取得
//削除した行数があれば、削除によりできた空白行をテーブルの下から削除する
if (removeRowCount > 0){
table.deleteRowsAt(tableRowCount - removeRowCount, removeRowCount);
}
}
複数列の重複の削除(列インデックス指定)
function main(workbook: ExcelScript.Workbook) {
// テーブル名を指定してテーブルを取得します
const table = workbook.getTable('MyTable'); // 任意のテーブル名に変更してください(例: "MyTable")
// テーブルの範囲と行数を取得
const tableRange = table.getRange();
const tableRowCount = table.getRowCount();
// 複数列の列インデックス指定して重複を削除
const removedResults: ExcelScript.RemoveDuplicatesResult = tableRange.removeDuplicates([0,1,2]); // 任意の列インデックスに変更してください(例: 0,1,2)
const removeRowCount = removedResults.getRemoved(); //削除した行数を取得
//削除した行数があれば、削除によりできた空白行をテーブルの下から削除する
if (removeRowCount > 0) {
table.deleteRowsAt(tableRowCount - removeRowCount, removeRowCount);
}
}
重複の削除(列名指定)
function main(workbook: ExcelScript.Workbook) {
// テーブル名を指定してテーブルを取得します
const table = workbook.getTable('MyTable'); // 任意のテーブル名に変更してください(例: "MyTable")
// テーブルの範囲と行数を取得
const tableRange = table.getRange();
const tableRowCount = table.getRowCount() ;
// 列名から列のインデックスを取得する
const columnIndex = table.getColumnByName('Column1').getIndex(); // 任意の列名に変更してください(例: "Column1")
// 列インデックス指定で重複を削除
const removedResults: ExcelScript.RemoveDuplicatesResult = tableRange.removeDuplicates([columnIndex]); // 任意の列インデックスに変更してください(例: 0)
const removeRowCount = removedResults.getRemoved(); //削除した行数を取得
//削除した行数があれば、削除によりできた空白行をテーブルの下から削除する
if (removeRowCount > 0){
table.deleteRowsAt(tableRowCount - removeRowCount, removeRowCount);
}
}
Sponsored link
フィルターの操作と解除
次にテーブルのフィルター方法について紹介します。
スクリプト内のシート名・テーブル名・セル範囲・列名などは状況に応じて変更して使用してください。
指定列でフィルター設定(単一値)
function main(workbook: ExcelScript.Workbook) {
// テーブル名を指定してテーブルを取得します
const table = workbook.getTable('MyTable'); // 任意のテーブル名に変更してください(例: "MyTable")
// 列名指定で列を取得
const column = table.getColumnByName("Column1"); // 任意の列名に変更してください(例: "Column1")
// フィルターする値を設定
const filterCriteria: string[] = ["data1"]; // 任意の値に変更してください(例: "data1")
// 列にフィルターを適用
column.getFilter().applyValuesFilter(filterCriteria);
}
日付列をフィルターする
function main(workbook: ExcelScript.Workbook) {
// テーブル名を指定してテーブルを取得します
const table = workbook.getTable('MyTable'); // 任意のテーブル名に変更してください(例: "MyTable")
// 列名指定で列を取得
const column = table.getColumnByName("Column1"); // 任意の列名に変更してください(例: "Column1")
// 日付のフィルターコンテキストを定義
const filterCriteria: ExcelScript.FilterDatetime = {
date: "2024-04-01", // 任意の日付に変更してください(例: "2024-04-01")
specificity: ExcelScript.FilterDatetimeSpecificity.day
};
// 列にフィルターを適用
column.getFilter().applyValuesFilter([filterCriteria]);
}
指定列でフィルター設定(以上&以下)
function main(workbook: ExcelScript.Workbook) {
// テーブル名を指定してテーブルを取得します
const table = workbook.getTable('MyTable'); // 任意のテーブル名に変更してください(例: "MyTable")
// 列名指定で列を取得
const column = table.getColumnByName("Column1"); // 任意の列名に変更してください(例: "Column1")
// フィルター条件を設定します(0以上)
const filterCriteria: ExcelScript.FilterCriteria = {
criterion1: ">=0", // 任意の条件に変更してください(例: ">=0")
filterOn: ExcelScript.FilterOn.custom
};
// 列にフィルターを適用
column.getFilter().apply(filterCriteria);
}
すべてのフィルターの解除
function main(workbook: ExcelScript.Workbook) {
// テーブル名を指定してテーブルを取得します
const table = workbook.getTable('MyTable'); // 任意のテーブル名に変更してください(例: "MyTable")
// すべてのフィルターを解除
table.clearFilters()
}
指定列のフィルターの解除
function main(workbook: ExcelScript.Workbook) {
// テーブル名を指定してテーブルを取得します
const table = workbook.getTable('MyTable'); // 任意のテーブル名に変更してください(例: "MyTable")
// 列名指定で列を取得
const column = table.getColumnByName("Column1"); // 任意の列名に変更してください(例: "Column1")
// 列にフィルターを解除
column.getFilter().clear();
}
Sponsored link
並べ替え(ソート)の設定
次にテーブルのソート方法について紹介します。複数列での並べ替えでは2列の例を載せていますが、3列4列の並べ替えも同様のスクリプトを追加することで可能です。
スクリプト内のシート名・テーブル名・セル範囲・列名などは状況に応じて変更して使用してください。
指定列で並べ替え(昇順&降順)
function main(workbook: ExcelScript.Workbook) {
// テーブル名を指定してテーブルを取得します
const table = workbook.getTable("MyTable"); // 任意のテーブル名に変更してください(例: "MyTable")
// 列名から列のインデックスを取得する
const columnIndex = table.getColumnByName('Column1').getIndex(); // 任意の列名に変更してください(例: "Column1")
// 並べ替え条件を設定します
const sortFields: ExcelScript.SortField[] = [{
key: columnIndex, // 並べ替えの基準となる列インデックス
ascending: true // 昇順に並べ替え(降順の場合は false)
}];
// テーブル全体を並べ替えます
table.getRangeBetweenHeaderAndTotal().getSort().apply(sortFields);
}
複数列で並べ替え
function main(workbook: ExcelScript.Workbook) {
// テーブル名を指定してテーブルを取得します
const table = workbook.getTable("MyTable"); // 任意のテーブル名に変更してください(例: "MyTable")
// 列名から列のインデックスを取得する
const columnIndex1 = table.getColumnByName('Column1').getIndex(); // 任意の列名に変更してください(例: "Column1")
const columnIndex2 = table.getColumnByName('Column2').getIndex(); // 任意の列名に変更してください(例: "Column2")
// 複数の並べ替え条件を設定します
const sortFields: ExcelScript.SortField[] = [
{
// 1つ目の列を並べ替え
key: columnIndex1,
ascending: true // 昇順に並べ替え(降順の場合は false)
},
{
// 2つ目の列を並べ替え
key: columnIndex2,
ascending: false // 降順に並べ替え(昇順の場合は true)
}
];
// テーブル全体を並べ替えます
table.getRangeBetweenHeaderAndTotal().getSort().apply(sortFields);
}
Sponsored link
テーブルのコピー&ペースト
最後にテーブルをコピーして別の場所に貼り付ける方法を紹介します。
スクリプト内のシート名・テーブル名・セル範囲・列名などは状況に応じて変更して使用してください。
function main(workbook: ExcelScript.Workbook) {
// コピー元のテーブルの情報を取得
const table = workbook.getTable("MyTable"); // 任意のテーブル名に変更してください(例: "MyTable")
const sourceRange = table.getRange();
const sourceValues = sourceRange.getValues();
// コピー先の場所を指定
const destinationSheet = workbook.getWorksheet("Sheet2"); // コピー先のシート名を指定してください
const destinationCell = destinationSheet.getRange("A1"); // コピー先の開始セルを指定してください
const destinationRange = destinationCell.getResizedRange(
sourceRange.getRowCount() - 1,
sourceRange.getColumnCount() - 1
)
// コピー先にデータをペースト
destinationRange.setValues(sourceValues);
//コピー先をテーブル化
const destinationtable = destinationSheet.addTable(destinationRange, true);
}
コメント