MENU
IT
PR

【OfficeScripts】セルの基本操作 Range:セルの値を取得・代入

OfficeScript Range セル
ほし
記事内に商品プロモーションを含む場合があります

皆さんお疲れ様です。 ほしコラムの管理人のほしです。

今回はOfficeScriptsで、Excelのセル「Range」を操作する方法について紹介していきます。

前回の記事でも紹介させていただきましたが、ExcelOnlineは、ExeclVBAが実行できないので

ExcelOnlineを自動化する方法が、OfficeScriptsになっています!!

はじめに

今回は、OfficeScriptsでセルの範囲操作「Range」について紹介していきます。

本記事で解決できること
  • アクティブセルの取得 getActiveCell()
  • セル内の値を取得 get.Value()
  • セル内の値を変更 set.Value()
  • 選択範囲の取得 getSelectedRange()
  • 複数セルの値を取得 getValues()
  • 複数セルの値を変更 setValues()
  • インデックスでセルの取得 getCell()
  • インデックスで範囲を選択する getRangeByIndexes()

上記の内容について、実際のサンプルコードを用いて説明していきます!

OfficeScripts実行の事前準備

実際にOfficeScriptを実行する前に事前準備をしましょう。

  1. Excelの立ち上げ
  2. コードエディタの準備

OfficeScriptを実行したい「サンプルブック」を立ち上げてください。

また、「自動化」タブから「新しいスクリプト」をクリックしてください。

下記のような画面が準備できれば問題ありません!

OfficeScript Excel 準備

OfficeScriptsでセル( Range )の操作

これから実際に、OfficeScriptsでセルを操作する方法について紹介していきます。

セルの操作は、OfficeScriptsの基礎知識になりますので、本記事を通して身につけましょう!

get.ActiveCell()

<<Workbook>>.get.ActiveCell() ※Workbookオブジェクトから呼び出し

選択中のセルの要素を取得する処理です。

実行する際は、Workbookクラスのオブジェクトから呼び出すことができます。

get.ActiveCell() の実行結果は、<<Range>>クラスのオブジェクトが返されます。

<<Workbook>>.get.ActiveCell() 実行した結果は、以下のようになります。

get.ActiveCell()  OfficeScript 実行結果

ソースコードは以下になります。

1function main(workbook: ExcelScript.Workbook) {
2  
3    //選択中のセルの値を取得 
4   let range = workbook.getActiveCell().getValue()
5   console.log(range)
6}

get.Cell()

<<Worksheet>>.getCell() ※Worksheetオブジェクトから呼び出し

getCell() は、インデックスを指定して、セルの要素を取得します。

Worksheetオブジェクトから呼び出すことができます。

この際に、getCell()の実行結果は、<<Range>>クラスのオブジェクトが返されます。

取得した<<Range>>クラスのオブジェクトに対して、.getValue()などを実施するとセルの値が取得できます。

get.Cell()  OfficeScript 実行結果
1function main(workbook: ExcelScript.Workbook) {
2  
3    //選択中のシートの取得
4   let sheet = workbook.getActiveWorksheet()
5    //インデックスを指定してセルの値を取得 indexが0から始まるので注意!!
6   let range = sheet.getCell(0,1)
7 //rangeの情報を出力 rangeが「Rangeクラス」の変数か確認しています。
8   console.log(range)
9 //選択中のセルの値を取得
10   console.log(range.getValue())
11}

getSelectedRange()

<<Workbook>>.SelectedRange() ※Workbookオブジェクトから呼び出し

ActiveCellと挙動が似ていますが、違いとしては選択中の複数セルを取得することができます。

実行結果は、Rangeオブジェクトの変数が返ってきます。

上記に対して、getValueなどを行えば値を取得することができます。

get.ActiveCell()の結果

Excel OfficeScript get.ActiveCell() 実行結果
Excel選択範囲

※以下は、getValues()をした結果になります

Excel OfficeScript get.ActiveCell() 実行結果
get.ActiveCell() 実行結果

getSelectedRange()の結果

Excel OfficeScript SelectedRange() 実行結果
Excel選択範囲

※以下は、getValues()をした結果になります

Excel OfficeScript SelectedRange() 実行結果
getSelectedRange() 実行結果
1function main(workbook: ExcelScript.Workbook) {
2  
3    //選択中の複数セルの値を取得 
4   let range = workbook.getSelectedRange()
5   let vals  = range.getValues()
6   console.log(vals)
7
8}

get.Value()

<<Range>>.getValue() ※Rangeオブジェクトから呼び出し

事前に、get.ActiveCell()、getCell() のソースコードで使用しています。

そのため、すでに気づいているかもしれませんが、セルの値を取得することができます。

<<Range>>クラスのオブジェクトは、get.Cell()や get.ActiveCellを実行すると取得できます。

上記の使用できると、セルの値をもとに条件分岐などができるようになります。

1function main(workbook: ExcelScript.Workbook) {
2  
3    //選択中のシートの取得
4   let sheet = workbook.getActiveWorksheet()
5    //インデックスを指定してセルの値を取得 indexが0から始まるので注意!!
6   let range = sheet.getCell(0,1)
7 //rangeの情報を出力 rangeが「Rangeクラス」の変数か確認しています。
8   console.log(range)
9 //選択中のセルの値を取得
10   console.log(range.getValue())
11}

getValues()

<<Range>>.getValues() ※Rangeオブジェクトから呼び出し

getValue()と似ていますが、違いとしては複数セルの値を個々に取得できることです。

取得した結果は、2次元配列として扱われるのでセル毎に値を設定するなどできるようになります。

1function main(workbook: ExcelScript.Workbook) {
2  
3    //選択中の複数セルの値を取得 
4   let range = workbook.getSelectedRange()
5   let vals  = range.getValues()
6   console.log(vals)
7
8}

3行3列の2次元配列が取得されます。

Excel OfficeScript SelectedRange() 実行結果
getSelectedRange() 実行結果

set.Value()

<<Range>>.setValue() ※Rangeオブジェクトから呼び出し

ここまでは、セルの値を取得するまでを紹介してきましたが、set.Value()はセルに値を設定する処理です。

取得したセルに対して実行できるので、getCell,getActiveCellなどとセットで利用します。

set.Value()実行前

OfficeScript setValue() 実行結果

set.Value()実行後

OfficeScript setValue() 実行結果
1function main(workbook: ExcelScript.Workbook) {
2  
3    //選択中の複数セルの値を取得 
4   let sheet = workbook.getActiveWorksheet()
5   let range = sheet.getCell(1,1) 
6   range.setValue("A1")
7   console.log(range.getValue())
8}

setValues()

<<Range>>.setValues() ※Rangeオブジェクトから呼び出し

setValue()とsetValuesは似たような内容ですが、setValues()はgetValues()と同様で

セルを2次元配列として扱われるので、複数範囲の取得した内容をセル毎に値を設定するなどできるようになります。

setValues(2次元配列)で実行することができます。setValues(“A”)などの文字列を渡すことはできません!!

今回サンプル内で、繰り返し処理を使用しており、indexの初期値が0になるので注意してください!

setValues() 実行前

OfficeScript setValues() 実行結果
setValues() 実行前のExcel

setValues() 実行後

OfficeScript setValues() 実行結果
setValues() 実行後のExcel
1function main(workbook: ExcelScript.Workbook) {
2  
3    //選択中の複数セルの値を取得 
4   let range = workbook.getSelectedRange()
5   let vals  = range.getValues()
6   for (let i in vals){
7      for (let k in vals[i]){
8
9        vals[i][k] = i + ' + '+  k + '=' +vals[i][k]
10      }
11   }
12   range.setValues(vals)
13   // range.setValues("A")  ←これは実行できません!!
14}

getRangeByIndexes()、getRange()

<<Range>>.getRangeByIndexes() ※Rangeオブジェクトから呼び出し

<<Range>>.getRange() ※Rangeオブジェクトから呼び出し

getRangeByIndexes()、getRange()では、範囲を指定してセルの情報を取得します。

この際に、セルを指定する方法として、「R1C1形式」と「A1形式」があります。

R1C1形式は、簡単にいうと数値で開始位置の行・列と選択する行・列を指定する方法です。

ex ) getRangeByIndexes(開始行, 開始列 , 行数 , 列数)

A1形式は、文字列による指定をする方法です。

ex ) getRange(A1:C1)

下記のように記入されているExcelがあった際にB2〜D3まで選択する方法になります。

下記の実行結果を見ても、どちらでも同様の結果が取得できていますね。

getRangeByIndexes() getRange()
実行結果 OfficeScript
Excelサンプル ( getRangeByIndexes()、getRange() )
getRangeByIndexes() getRange()
実行結果 OfficeScript
OfficeScripts実行結果
1function main(workbook: ExcelScript.Workbook) {
2  
3    //選択中の複数セルの値を取得 
4   let sheet = workbook.getActiveWorksheet()
5    // <<sheet>>.getRangeByIndexes(開始行,開始列,行数,列数)
6   let range = sheet.getRangeByIndexes(1,1,2,3)
7    // <<sheet>>.getRange(A1形式)
8   let range2 = sheet.getRange('B1:D3')
9   let val = range.getValues()
10   let val2 = range.getValues()
11     // 選択したセルの値を出力
12   console.log(val)
13   console.log(val2)
14}

最後に

上記を利用すれば、セルの値を取得して新しい値を設定することなどすることができましたね!

これらを利用してExcelの自動化を試してみてください。

これからも、PowerAutomateやOfficeScriptsの自動化に関する記事を投稿していきますので、ぜひ読んでみてください。

ABOUT ME
ほし
ほし
エンジニア
ほしコラム管理人のほしです。 20代のITエンジニアです。 PowerAutomateで業務効率化の方法を中心に紹介していきます! たまに日常生活についても記事にしていきます! ほしコラム - にほんブログ村
記事URLをコピーしました