Translate

ラベル .Sheets の投稿を表示しています。 すべての投稿を表示
ラベル .Sheets の投稿を表示しています。 すべての投稿を表示
Post Date:2021年10月10日 

VLOOKUPを使わない方法(INDIRECT+MATCH)

ゾウでもわかるGoogleスプレッドシート

GoogleスプレッドシートやEXCELで、他の表とキーが一致する行の値を取得するときにはVLOOKUP関数を使うのが定石です。

VLOOKUPはとっても便利な関数なんですが、不便なところもあります。

  • 検索できるのは指定した範囲の先頭列のみ
  • 取得する列は列番号で指定する

一番の問題は、VLOOKUP関数で検索できるのは先頭列のみで、取得する値がある列は検索する列よりも右側になければなりません。

もちろん表の列を移動させれば解決できますが、Google Sheetsで IMORTRANGE関数 で他のスプレッドシートを読み込んでいる場合などは致命的です。

また取得する値を列番号で指定するのも、AD列なら30と指定しなければならないので、列数が多くなるとわからなくなってしまいます。

ということで、VLOOKUP の代わりとなる方法(関数)の紹介です。


サンプルで使用するデータ

サンプルの表は「国番号一覧」と「国コード一覧」2つのシートです。

国番号一覧に2桁の国コードを取得するために、「国番号一覧」シートの「国名(日本語)」で「国コード一覧」シートの「日本語名」を検索して国名が一致する「2文字」から2桁の国コードを取得します。

下記の2表をコピペしてシートに貼り付けてください。

国番号一覧
国番号(電話) エリア 国名(日本語) 国名(英語) 国コード
60 アジア マレーシア Malaysia  
61 太平洋諸国 オーストラリア Australia  
62 アジア インドネシア共和国 Indonesia  
63 アジア フィリピン共和国 Philippines  
64 太平洋諸国 ニュージーランド New Zealand  
65 アジア シンガポール共和国 Singapore  
66 アジア タイ王国 Thailand  
81 アジア 日本国 Japan  
82 アジア 大韓民国 Republic of Korea  
84 アジア ベトナム社会主義共和国 Viet Nam  
86 アジア 中華人民共和国 Chaina  
90 アジア トルコ共和国 Turkey  
91 アジア インド India  
92 アジア パキスタン・イスラム共和国 Pkistan  
93 アジア アフガニスタン・イスラム共和国 Afghanistan  
94 アジア スリランカ民主社会主義共和国 Srilanka  
95 アジア ミャンマー連邦 Myanmar  
98 アジア イラン・イスラム共和国 Iran  

国コード一覧
2文字 3文字 英語名 日本語名
AF AFG Afghanistan アフガニスタン・イスラム共和国
AU AUS Australia オーストラリア
CN CHN China 中華人民共和国
IN IND India インド
ID IDN Indonesia インドネシア共和国
IR IRN Iran イラン・イスラム共和国
JP JPN Japan 日本国
KR KOR Republic of Korea 大韓民国
MY MYS Malaysia マレーシア
MM MMR Myanmar ミャンマー連邦
NZ NZL New Zealand ニュージーランド
PK PAK Pakistan パキスタン・イスラム共和国
PH PHL Philippines フィリピン共和国
SG SGP Singapore シンガポール共和国
LK LKA Sri Lanka スリランカ民主社会主義共和国
TH THA Thailand タイ王国
TR TUR Turkey トルコ共和国
VN VNM Viet Nam ベトナム社会主義共和国

EXCELならXLOOKUPを使う

Microsoft365(EXCEL)であれば VLOOKUP の上位互換である XLOOKUP があります。XLOOKUP関数を使えば、VLOOKUP の不便さが解消できます。

XLOOKUP 関数 に詳細の説明がありますが、今回のケースであれば、とってもシンプルに記載できます。

XLOOKUPの使い方

上図の国番号一覧シートの ”E2” に下記のように記載します。

=XLOOKUP(C2, 国コード一覧!D:D, 国コード一覧!A:A)

上式で国番号一覧シートのC2(国名=マレーシア)で、国コード一覧のD列(日本語名)を検索して、国名が一致する国コード一覧のA列の値が取得できます。

検索する値(C2)、検索する列(国コード一覧!D:D)、取得する値の列(国コード一覧!A:A)と、理解しやすい表記ができます。

国コード一覧シートは下記のようになっています。

国コード一覧シート(サンプル)

優れもののXLOOKUPですが、残念ながらMicrosoft365(旧Office365)でしか使えません。

Excel2019/2016では、後述するGoogleスプレッドシートで説明する方法を使ってください。


Google Sheets なら関数を組み合わせる

GoogleスプレッドシートにはXLOOKUP関数に対応する関数はありません。

しかし、関数を組み合わせることによってVOOKUPより便利にキーが一致する別表の値を取得することができます。


INDEX関数+MATCH関数

INDEX関数とMATCH関数の組み合わせる方法については、INDEX - ドキュメント エディタ ヘルプ にも記載されています。

VLOOKUPではできなかった検索する列が参照範囲の左端(1列目)になくても検索が可能になります。しかし、キーが一致する行の値を取得する列については列番号(数字)で指定する必要があります。

INDEX関数とMATCH関数を組み合わせる

上図の国番号一覧シートの ”E2” に下記のように記載します。

=INDEX('国コード一覧'!A:D, MATCH(C2, '国コード一覧'!D:D,0), 1)

先ずは、INDEX関数 の説明です。

=INDEX(参照範囲, 行番号, 列番号)

上の式を分解すると、

参照範囲 '国コード一覧'!A:D
行番号 MATCH(C2,'国コード一覧'!D:D,0)
列番号 1

となります。

行番号で指定しているMATC関数については後述しますが、'国コード一覧'!A:Dの中から1列目つのデータ(A列「2文字」の国コード)の値を取得するということを意味します。

続いて MATCH関数 の部分です。

構文は、

=MATCH(検索キー, 検索範囲, 検索種類)

です。検索キーで検索範囲の中で一致するものを探します。

MATCH(C2, '国コード一覧'!D:D,0)を分解すると、

検索キー C2 マレーシア
検索範囲 国コード一覧'!D:D 国コード一覧のD列
検索種類 0 完全一致

国コードシートのD列から「マレーシア」と完全一致するものを探してきます。戻り値は、一致するものが何番目に見つかったです。

=MATCH(C2, '国コード一覧'!D:D, 0)

とすると、D1から10個目で「マレーシア」と一致するので戻り値は10となります。

検索範囲は、'国コード一覧'!D:Dの部分を、D1:D19 としても戻り値は ”10” で表の行番号と一致します。

しかし、データが入っているのがD2からだといって

=MATCH(C2, '国コード一覧'!D2:D19, 0)

とすると、D2からマレーシアは9番目となるので戻り値が “9” となってしまいます。これだと行番号と一致しなくなってしまうので、INDEX関数で違う場所を参照してしまいます。

行番号は指定せずに D:D のように検索範囲を列だけにすれば必ず行番号と一致します。

国コード一覧シート(サンプル)

検索種類は、完全一致である 0 を必ず指定してください。省略してしまうと正しい答えが求められません。詳細は INDEXのヘルプ を参照してください。


INDIRECT関数+MATCH関数

INDEX+MATCH関数では、値を取得する列を列番号で指定しなければなりませんが、INDIRECT関数を使うと文字列として列を指定することができます。

百聞は一見に如かずです。

=INDIRECT("A" & 10)

これで、A10セルの値を取得できます。

INDIRECT関数を使って、国番号一覧シートの ”E2” に下記のように記載します。

INDIRECT関数とMATCH関数を組み合わせる

列番号は、上で説明したMATCH関数で取得します。

=INDIRECT("'国コード一覧'!A" & MATCH(C2,'国コード一覧'!D:D,0))

このように書くと、国コード一覧シートのD列の中でC2と完全一致する行の A列の値を取得することができます。

INDIRECTを分解すると下記のようになります。

行名 "'国コード一覧'!A" 文字列として指定
結合記号 &  
列番行 MATCH(C2,'国コード一覧'!D:D,0) 戻り値は列番号

国コード一覧のA列という指定は文字列なので、国コード一覧シートで列が変更されると式も変更しなければなりません。

それは、INDEX+MATCH関数の列番号でも同じなので、INDIRECTを使った方が、視覚的に理解しやすい式となります。

VLOOKを使わずにINDIRECT関数とMATCH関数を使ってみてはいかがでしょうか。

Post Date:2021年5月4日 

Googleスプレッドシートの更新された値を知る

ゾウでもわかる Google Apps Script

Googleスプレッドシートの特定セルの値が更新されたらかを知る方法についての説明です。

スプレッドシートでのプロジェクト計画管理については、スプレッドシートでプロジェクト計画を作成する方法 - Google Workspace ラーニング センター に説明があります。またこの中で更新を通知する方法として、通知を追加する でスプレッドシートの通知設定についての説明もあります。

これだけでも便利なのですが、ステータスが更新されたときなど特定のセルが更新されたときだけ通知をするなどは GoogleAppsScript での作成が必要となります。


onEdit()

GoogleAppsScriptではトリガーの設定をしなくても、特定のイベントに応じて動くシンプルトリガーという関数があります。詳細の説明は、Simple Triggers | Apps Script | Google Developers にありますが、スプレッドシートでは下記の3つの関数が使えます。

関数名 イベント
onOpen(e) スプレッドシートを開いたとき
onEdit(e) セルの値を変更したとき
onSelectionChange(e) 範囲選択をしたとき

onEdit を使えば、シートの値が変更されたときに実行されて、引数として変更された内容を取得することができます。慣習としてイベント時の引数として e を使っていますが、onEdit(parm) とすれば、parm を引数として使うことができます。引数で何が取得できるかの詳細は、Event Objects の Editに記載があります。

単一セルの変更なら、

  • e.oldValue
  • e.value

で、変更前の値、変更後の値も取得できますが、コピペで複数セルの値が変更された場合には使えません(残念)。但し、e.range で変更された場所を確認することができるので、行と列を指定して変更後の値であれば取得することができます。


変更されたシート名と変更内容を取得する

下記は、変更されたシート名と変更された範囲、変更内容を表示する簡単な例です。

sourceはスプレッドシートオブジェクトで、e.source.getActiveSheet() で変更イベントが発生したシートを取得できます。

function onEdit(e) {
  var sheet = e.source.getActiveSheet()
  console.log('シート名  =', sheet.getName())
  console.log('変更範囲  =', e.range)
  console.log('変更前の値 =', e.oldValue)
  console.log('変更後の値 =', e.value)
}

シート1のA1セル(空白セル)にaaaと入力してログを確認すると、下記のようにログが出力されます。

シート名 = シート1
変更範囲 = {columnEnd:1, columnStart:1, rowEnd:1, rowStart:1}
変更前の値 = undefined
変更後の値 = aaa

e.range の中身は、

  • columnEnd(終了列)
  • columnStart(開始列)
  • rowEnd(終了行)
  • rowStart(開始行)

となっています。順番が不思議な感じがしますが、全て1なので1行目1列の値が更新されたことを示しています。

※rangeを出力すると、"toString:" から "rowStart:" までの長い出力となります。次例のように必要な項目だけを指定すると出力内容を特定できます。(2022/05/05 追記)

function onEdit(e) {
  var sheet = e.source.getActiveSheet()
  console.log('シート名  =', sheet.getName())
  console.log('変更範囲(開始行)  =', e.range.rowStart)
  console.log('変更範囲(終了行)  =', e.range.rowEnd)
  console.log('変更範囲(開始列)  =', e.range.columnStart)
  console.log('変更範囲(終了列)  =', e.range.columnEnd)
  console.log('変更前の値 =', e.oldValue)
  console.log('変更後の値 =', e.value)
}

変更前の値はないので、undefined となって、変更後の値は、入力した aaa がセットされています。

次にA1セルの値を aaa から bbb に変更すると、ログは下記のように出力されて aaa が bbb に変更されたことがわかります。

シート名  = シート1
変更範囲  = {columnEnd:1, columnStart:1, rowEnd:1, rowStart:1}
変更前の値 = aaa
変更後の値 = bbb

では次に B1に AAA, B2に BBB がある状態で、この値をA1-A2にコピペします。

複数セルが更新されたので、更新前も更新後の値も取得できません。変更の範囲は rowEnd が2になったので、1から2行目の1列目の値(A1,A2)が更新されたことがわかります。

シート名  = シート1
変更範囲  = {columnEnd:1, columnStart:1, rowEnd:2, rowStart:1}
変更前の値 = undefined
変更後の値 = undefined

【注意】シンプルトリガーは、スクリプトエディターから手動でも実行できますが、手動で実行した場合には当然ですが、引数には何も入っていません。動作を確認する場合にはシートの値を変更して確認してください。


複数範囲の変更された値を取得する

前のサンプルコードで rangeでどの範囲が変更されたかは行と列の開始と終了でわかるのでこの値を使って変更内容を表示させる例となります。

変更行と変更列で二重ループにして個々の値を取得します。

3-6行目は、変更開始/終了行、変更開始/終了列をそれぞれ取得しています。

また10行目の sheet.getRange(row, col).getValue() で指定した行と列のセルの値を取得しています。

function onEdit(e) {
  var sheet = e.source.getActiveSheet()
  var rowStart = e.range.rowStart //変更開始行
  var rowEnd = e.range.rowEnd //変更終了行
  var columnStart = e.range.columnStart //変更開始列
  var columnEnd = e.range.columnEnd //変更終了列

  //変更行の確認
  for (var row = rowStart; row <= rowEnd; row++) {
    //変更列の確認
    for (var col = columnStart; col <= columnEnd; col++) {
      console.log(row + '行' + col + '列目 =', sheet.getRange(row, col).getValue())
    }
  }
}

上の例と同じく B1に AAA, B2に BBB がある状態で、この値をA1-A2にコピペします。ログを確認すると、

1行1列目= AAA
2行1列目= BBB

A1セル(1行1列目)に AAA が、A2セル(2行1列目)がセットされたことがわかります。


onEditの限界

とってな便利なonEditですが、シンプルエティターとしての限界があります。例えば、特定のセルが更新された場合にメールを送信するなどをしようとすると、

Exception: スクリプトにはその操作を行う権限がありません。

と、メール送信の権限がないと言われてエラーとなってしまいます。

メールやチャットルールに投稿するなどをする場合には、onEdit関数ではなく、トリガーを設定する必要があります。


シート変更時に関数を実行する

トリガーを選択すると、スプレッドシートの起動時、変更時などに特定の関数を実行することができます。スプレッドシートで使えるイベントは下記の4種類です。

イベントの種類 関数が実行される条件
起動時 スプレッドシートを起動したとき
編集時 スプレッドシートを編集したとき
変更時 スプレッドシートを変更したとき
フォーム送信時 フォームを送信したとき

編集時と変更時の違い

編集時」では、行の追加・削除、列の追加・削除を含めてスプレッドシートに何らかの変更があった場合に起動されますが、「変更時」では、セルの値が変更された場合だけ起動されます。

注意事項は、トリガーで起動した場合にパラメータで値が取得できるのは「編集時」だけ です。インベントの種類を「変更時」にすると、下記のようにエラーになってしまいますので、

TypeError: Cannot read property 'rowStart' of undefined

イベントの種類は「編集時」を選択 してください。

スプレッドシートの変更時に実行されるトリガー

下記の例は、変更行と変更列の二重ループではなく、getRangeで変更された値を配列として取得する方法です。

function modifiedSells(e) {
  var sheet = e.source.getActiveSheet()

  //変更行数
  var numberOfRows = e.range.rowEnd - e.range.rowStart +1
  //変更列数
  var numberOfClums = e.range.columnEnd - e.range.columnStart+1
  //変更された値を取得
  var values = sheet.getRange(e.range.rowStart, e.range.columnStart, numberOfRows, numberOfClums).getValues()
  
  console.log(values);
}

getRangeは、

Sheetオブジェクト.getRange(開始行, 開始列, 行数, 列数)

で範囲を指定して複数の値を取得できます。

9行目で変更された行数を11行目で変更された列数を求めて、変更された値を Values に格納しています。

例えば、コピペによる複数行(2行)、複数列(2列)の値が更新された場合は、下記のように表示されます。

[ [ 'AAA', 'BBB' ], [ 'CCC', 'DDD' ] ]

最初の行の変更値は、values[0][0]、values[0][1]で(AAAとBBB) で、

次の行の変更値が、values[0][0]、values[0][1]で(CCCとDDD)となります。

Post Date:2021年2月12日 

GoogleスプレッドシートでグラフをWEBに公開する方法

ゾウでもわかるGoogleスプレッドシート

Googleスプレッドシートで作成したグラフは、画像としてダウンロードしなくても、そのままブログやサイトに掲載できるということに最近気が付きました。


Googleスプレッドシートのグラフ公開手順

手順はとても簡単です。

  1. 作成したグラフをクリック
  2. グラフ右上に表示される「」(縦三点リーダー)をクリック
  3. グラフを公開 を選択
Googleスプレッドシートで作成した円グラフ

「グラフの公開」を選択すると「ウェブに公開」というページに遷移しますので「公開」をクリックします。

Googleスプレッドシート「ウェブに公開」

埋め込むタブを選択するとhtmlコード(iframe)が表示されます。

埋め込みコードの取得

グラフは、インタラクティブ画像を選択ができます。インタラクティブを選ぶとグラフにマウスポインタを合わせるとポイントしたグラフの値が表示されます。

下記はバーチャートの表示例です。

Googleスプレッドシートのグラフを直接参照しているので、スプレッドシートでグラフが参照しているデータやグラフを変更すると公開しているグラフも連動して変更されます。またスプレッドシートを削除してしまうと表示されなくなってしまいます。


スマホの表示が崩れる

取得した埋め込みコードのままだと、グラフのサイズによってはスマホの表示が崩れてしまいます。

スタイルシートで調整しようとしましたが挫折しました。コード上のwidth(横幅) と height(高さ)を適宜調整してください。

無知は罪なりでした、、、、。

Post Date:2020年6月2日 

Googleスプレッドシート から 簡単にHTMLの表を作成する

Googleシートからテーブルタグを作成

HTMLで表を描くのは嫌いです。簡単な表であればエディタで直接書けばよいのですが、大きな表を作成したり、セルを結合したり、バックグランドの色を変えたりとなると、、、、。

「んー、面倒くさい!」


HTMLで表を作成する(基本編編)

先ずは、HTMLで表を作成するときのおさらいです。


枠線

枠線を描くときは、<table border=”数値”> を使い、枠線の太さを px(ピクセル)で指定します。

<table border="1">
    <tbody>
        <tr>
            <td>データ1</td>
            <td>データ1</td>
            <td>データ1</td>
        </tr>
    </tbody>
</table>

表示:
データ1 データ2 データ3

border で枠線を描くと二重線となります。枠線を一本線にするには、二重線の予約を設定する cellspacing を使って、二重線の余白を 0 にすることで2本の線が重なり一本線となります。

<table border="1" cellspacing="0">
    <tbody>
        <tr>
            <td>データ1</td>
            <td>データ1</td>
            <td>データ1</td>
        </tr>
    </tbody>
</table>

表示:
データ1 データ2 データ3

セル内の余白

表の見栄えをよくするために、セルの内の余白を設定しましょう。セル内の余白については、tableタグの中で cellpadding=”数値” で指定します。数値は px(ピクセル)指定です。余白は、左右、前後に適用されます。

例:cellpading=”0”

※ セル内の余白なしの場合は、cellpadding を指定する必要はありませんが、下記の例では明示的に0としています。

<table border="1" cellspacing="0" cellpadding="0">
    <tbody>
        <tr>
            <td>データ1</td>
            <td>データ1</td>
            <td>データ1</td>
        </tr>
    </tbody>
</table>

表示:
データ1 データ2 データ3


例:cellpading=”3”

<table border="1" cellspacing="0" cellpadding"3">
    <tbody>
        <tr>
            <td>データ1</td>
            <td>データ1</td>
            <td>データ1</td>
        </tr>
    </tbody>
</table>

表示:
データ1 データ2 データ3


例:cellpading=”5”

<table border="1" cellspacing="0" cellpadding="5">
    <tbody>
        <tr>
            <td>データ1</td>
            <td>データ1</td>
            <td>データ1</td>
        </tr>
    </tbody>
</table>

表示:
データ1 データ2 データ3

セル内の背景色

表の見出し行に色を付けるとわかりやすくなります。背景色は、<td bgcolor=”カーラーコード”> です。下記の例では見出しの色を #cccccc としています。

<table border="1" cellspacing="0" cellpadding="3">
    <tbody>
        <tr>
            <td bgcolor="#cccccc">見出し1</td>
            <td bgcolor="#cccccc">見出し2</td>
            <td bgcolor="#cccccc">見出し3</td>
        </tr>
        <tr>
            <td>データ1</td>
            <td>データ2</td>
            <td>データ3</td>
        </tr>
    </tbody>
</table>

表示:
見出し1 見出し2 見出し3
データ1 データ2 データ3

文字寄せ

セル内の文字は、aling=”” で 左寄せ(left)、中寄せ(center)、右寄せ(right) の指定ができます。

<table border="1" cellspacing="0" cellpadding="3">
    <tbody>
        <tr>
            <td bgcolor="#cccccc">見出し1</td>
            <td bgcolor="#cccccc">見出し2</td>
            <td bgcolor="#cccccc">見出し3</td>
        </tr>
        <tr>
            <td align="left">左</td>
            <td align="center">中</td>
            <td align="right">右</td>
        </tr>
    </tbody>
</table>

表示:
見出し1 見出し2 見出し3
左寄せ 中寄せ 右寄せ

セル内縦位置

セル内の文字位置の指定となります、valign=”” で 上端揃え(top)、中央揃え(middle)、下端揃え(bottom) の指定ができます。但し、1行で収まるようなときは指定しても何も変わりません。

<table border="1" cellspacing="0" cellpadding="3">
    <tbody>
        <tr>
            <td bgcolor="#cccccc">見出し1</td>
            <td bgcolor="#cccccc">見出し2</td>
            <td bgcolor="#cccccc">見出し3</td>
            <td bgcolor="#cccccc">見出し4</td>
        </tr>
        <tr>
            <td>あ<br />い<br />う<br />え<br />お></td>
            <td valign="top">上端揃えlt;/td>
            <td valign="middle">中央揃え</td>
            <td valign="bottom">下端揃え</td>
        </tr>
    </tbody>
</table>

表示:
見出し1 見出し2 見出し3 見出し4




上端揃え 中央揃え 下端揃え

セルの結合

表をきれいに見せるために横のセルと結合するには colsapn属性 を、縦に結合するには rowsapn 属性を使い、結合する行数、列数を指定します。

<table border="1" cellspacing="0" cellpadding="3">
    <tbody>
        <tr>
            <td rowspan="2" valign="middle">2行1列</td>
            <td colspan="2" valign="middle" align="center">1行2列</td>
        </tr>
        <tr>
            <td>データ1</td>
            <td>データ2</td>
        </tr>
    </tbody>
</table>

表示:
2行1列 1行2列
データ1 データ2

簡単にHTMLで表を作成したい

と、データを埋めるだけでなく、そもそもHTMLで表を記載するのは面倒くさい。オンラインでHTMLで表を作成できる「Table Tag Generator」を使っていましたが、それでも、超簡単とまではなりません。

どうせならスプレッドシートで作成した表をHTML表記に変換するようなツールがあればいい!そういのを作成している賢い人はいないのかと探してみると、

「いらっしゃいました!」

Googleスプレッドシートで作成した表を 背景色、文字色、セルの結合、文字寄せ、文字揃え、セル内の改行 など シートで作成した見た目に近い形で、HTMLのTABLEタグに変換してくれます。


モーリーさんのスクリプトをカスタマイズ

モーリーさんが作られたスクリプトを若干変更して使わせていただきました。

変更点
  • 枠線・余白を設定
  • <tbody>タグの追加
  • 文字の縦位置を中央揃えに
  • 見出しの変更

枠線・余白 + <tbody>タグ

<table>タグに枠線と余白の設定を追加し、併せて<tbody>タグを追加

【変更前】13行目

var tableTag = "<table>"; // テーブルタグを格納する

【変更後】
表に1pxの枠線で囲み、セル内の余白を3pxに + <tbody> タグを追加

var tableTag = '<table border="1" cellspacing="0" cellpadding="3"><tbody>'; // テーブルタグを格納する 

【変更前】113行目

tableTag += "</table>"; // テーブルタグを閉じる

【変更後】
</tbody>タグを追加

tableTag += "</tbody></table>"; // tbodyとテーブルタグを閉じる


文字の縦位置を中央揃えに

文字の縦位置についても取得とありますが、Google Sheets で ”垂直方向の位置” を変更しても、なぜか常に bottom (下端揃え)となっていたので、シートの設定に関わらず、middle(中央揃え)としました。下記では<td>タグで1セルづつ、文字の縦位置を設定していますが、<tr>タグに valign=”middle” を追加すれば、行全体を “中央揃え” にすることができます。

【変更前】97行目から105行目

// 縦方向の文字寄せ
var alignString = range.getVerticalAlignments()[i][j]; // スプレッドシートのセルの文字寄せの状態を取得する
switch(alignString){ // 文字寄せの種類別処理
    case "top": // 上寄せ
    //case "middle": // 中央寄せ(縦)テーブルタグのセルのデフォルト位置なので記述しない
    case "bottom": //下寄せ
        rowTag += ' valign="' + alignString + '"'; // テーブルタグの文字寄せの属性値を作成する
        break;
}

【変更後】
セルの文字寄せ状態は取得せずに、常に valign=”middle”(中央揃え)とする。

// 縦方向の文字寄せ
rowTag += ' valign="middle"'; // 中央揃えに設定

見出しの変更

太文字のセルを見出しとして <td> ではなく <th> を設定するようになっていましたが、背景色などその他が設定されないので、太文字の場合には、見出しとして<th>タグに変更するけど、それ以外のシートの属性は、反映されるように変更。

【変更前】71-85行目

// 通常・見出しセル、セルの背景色、文字色を設定する
var cellTag = ""; // セルタグ var colorString = ""; // 背景色指定の属性値 if(range.getFontWeights()[i][j] === "normal"){ // 文字が通常の場合(太字でない場合) cellTag = "td" // 通常のセル if(range.getBackgroundColors()[i][j] !== "#ffffff"){ // 白色の場合 colorString = ' bgcolor="' + range.getBackgroundColors()[i][j] + '"'; //色指定の属性値を追加する } }else{ // それ以外の場合 cellTag = "th"; // 見出しセル } rowTag += "<" + cellTag + margeString + colorString; // セルの結合と背景色指定を追加する if(range.getFontColors()[i][j] !== "#000000"){ // 文字が黒でない場合 rowTag += ' style="color:' + range.getFontColors()[i][j] + '"'; // 文字色指定を追加する }

【変更後】
通常文字であれば<td>、太文字であれば、見出しタグ<th>とする。

// 通常・見出しセル、セルの背景色、文字色を設定する
var cellTag = ""; // セルタグ
var colorString = ""; // 背景色指定の属性値
if(range.getFontWeights()[i][j] === "normal"){ // 文字が通常の場合(太字でない場合)
    cellTag = "td"; // 通常のセル
} else { //見出しセル
    cellTag = "th"; // 見出しセル
}        
if(range.getBackgroundColors()[i][j] !== "#ffffff"){ // 白色の場合
    colorString = ' bgcolor="' + range.getBackgroundColors()[i][j] + '"'; //色指定の属性値を追加する
}
rowTag += "<" + cellTag + margeString + colorString; // セルの結合と背景色指定を追加する
if(range.getFontColors()[i][j] !== "#000000"){ // 文字が黒でない場合
    rowTag += ' style="color:' + range.getFontColors()[i][j] + '"'; // 文字色指定を追加する
}

とっても簡単にGoogleシートからHTMLの表に変換

象と散歩: アレクサ、ポモドーロを開始して!」の表も、Googleシートで作成した表をこちらのスクリプトでHTML変換しています。

とっても便利です。ありがとうございます!!!


Udemy オススメ講座

【新IDE対応】Google Apps Script(GAS)の基礎を完全習得

【新IDE対応】Google Apps Script(GAS)の基礎を完全習得

講師:事務職たらこ

印象に残りやすい手書き風スライドを用いGASの基本的なプログラミングを気軽に学ぶことができる。本講座でGASを活用した自動化ができるレベルにはなれないが、基礎としては十分。

象と散歩:人気の投稿(過去7日間)