【OfficeScripts】セルの基本操作 Range:セルの値を取得・代入
皆さんお疲れ様です。 ほしコラムの管理人のほしです。
今回はOfficeScriptsで、Excelのセル「Range」を操作する方法について紹介していきます。
前回の記事でも紹介させていただきましたが、ExcelOnlineは、ExeclVBAが実行できないので
ExcelOnlineを自動化する方法が、OfficeScriptsになっています!!
はじめに
今回は、OfficeScriptsでセルの範囲操作「Range」について紹介していきます。
- アクティブセルの取得 getActiveCell()
- セル内の値を取得 get.Value()
- セル内の値を変更 set.Value()
- 選択範囲の取得 getSelectedRange()
- 複数セルの値を取得 getValues()
- 複数セルの値を変更 setValues()
- インデックスでセルの取得 getCell()
- インデックスで範囲を選択する getRangeByIndexes()
上記の内容について、実際のサンプルコードを用いて説明していきます!
OfficeScripts実行の事前準備
実際にOfficeScriptを実行する前に事前準備をしましょう。
- Excelの立ち上げ
- コードエディタの準備
OfficeScriptを実行したい「サンプルブック」を立ち上げてください。
また、「自動化」タブから「新しいスクリプト」をクリックしてください。
下記のような画面が準備できれば問題ありません!
OfficeScriptsでセル( Range )の操作
これから実際に、OfficeScriptsでセルを操作する方法について紹介していきます。
セルの操作は、OfficeScriptsの基礎知識になりますので、本記事を通して身につけましょう!
get.ActiveCell()
選択中のセルの要素を取得する処理です。
実行する際は、Workbookクラスのオブジェクトから呼び出すことができます。
get.ActiveCell() の実行結果は、<<Range>>クラスのオブジェクトが返されます。
<<Workbook>>.get.ActiveCell() 実行した結果は、以下のようになります。
ソースコードは以下になります。
1function main(workbook: ExcelScript.Workbook) {
2
3 //選択中のセルの値を取得
4 let range = workbook.getActiveCell().getValue()
5 console.log(range)
6}
get.Cell()
getCell() は、インデックスを指定して、セルの要素を取得します。
Worksheetオブジェクトから呼び出すことができます。
この際に、getCell()の実行結果は、<<Range>>クラスのオブジェクトが返されます。
取得した<<Range>>クラスのオブジェクトに対して、.getValue()などを実施するとセルの値が取得できます。
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()
ActiveCellと挙動が似ていますが、違いとしては選択中の複数セルを取得することができます。
実行結果は、Rangeオブジェクトの変数が返ってきます。
上記に対して、getValueなどを行えば値を取得することができます。
get.ActiveCell()の結果
※以下は、getValues()をした結果になります
getSelectedRange()の結果
※以下は、getValues()をした結果になります
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()
事前に、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()
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次元配列が取得されます。
set.Value()
ここまでは、セルの値を取得するまでを紹介してきましたが、set.Value()はセルに値を設定する処理です。
取得したセルに対して実行できるので、getCell,getActiveCellなどとセットで利用します。
set.Value()実行前
set.Value()実行後
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()
setValue()とsetValuesは似たような内容ですが、setValues()はgetValues()と同様で
セルを2次元配列として扱われるので、複数範囲の取得した内容をセル毎に値を設定するなどできるようになります。
setValues(2次元配列)で実行することができます。setValues(“A”)などの文字列を渡すことはできません!!
今回サンプル内で、繰り返し処理を使用しており、indexの初期値が0になるので注意してください!
setValues() 実行前
setValues() 実行後
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()
getRangeByIndexes()、getRange()では、範囲を指定してセルの情報を取得します。
この際に、セルを指定する方法として、「R1C1形式」と「A1形式」があります。
R1C1形式は、簡単にいうと数値で開始位置の行・列と選択する行・列を指定する方法です。
A1形式は、文字列による指定をする方法です。
下記のように記入されているExcelがあった際にB2〜D3まで選択する方法になります。
下記の実行結果を見ても、どちらでも同様の結果が取得できていますね。
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の自動化に関する記事を投稿していきますので、ぜひ読んでみてください。