【ピボットテーブル】スプレッドシートの例

この記事では、フリーのサンプルデータを使って、スプレッドシートで簡単にピボットテーブルを作成する方法を掲載しております。

下記のピボットテーブルのサンプルデータについては、こちらのリンクの記事をご参照の上、ご用意をお願い致します。

現在、スプレッドシートでこの様な画面になっていることを前提として進めさせて頂きます。

[挿入]タブを選択して、ピボットテーブルをクリックします。

範囲が「’シート1′!A1:H16」になっていることを確認して、「新しいシート」選択して、作成を押します。

「行」の右にある「追加」ボタンを押して、「取引先名」をクリックすると、

この様な表が簡単に作れました。

同じように、

列:商品名
値:売上金額

を選ぶと、こんな感じになります。

ピボットテーブルは自由にカスタマイズできるので、行の取引先名を別の項目にすることも可能です。

例えば、取引先名を×で消して、

代わりに入荷日を選択すると、この様になりました。

「フィルタ」に「取引先名」をクリックして追加します。

現在は、すべての取引先名の合計が表示されていますが、この「すべての項目を表示して…」をクリックして、クリアを選択してから「金城さん」などのお好きな名前をクリックすると、

金城さんが買った分だけが表示されます。

こちらが先程まであった、全員分の表です。

一旦、フィルタの所を全員分の名前が表示される様にして

「列」の所にある「商品名」を上に向かって「行」の所にドラッグして、「入荷日を×」にすると、

この様な商品名ごとの売上金額の表が出来ました。
(列幅を広げた状態です。)

この様に、自分の見たいカットで見ることが出来ました。

他にも、商品名を降順にすることや、

現在は値の売上金額がSUMになっているので、

金額が362500円になっていますが、集計をMAXにすると、

金額も、最大値の金額が表示されました。

この記事では省略しますが、売上金額をMINにすると総計が3000になります。


以上、ざっくりですが、スプレッドシートでのピボットテーブルの概要が掴めたと思います。

お疲れ様でした。ブレイクタイムPhotoは、

お台場のレインボーブリッジと、小さく見える東京タワーです。


ご精読、誠に有難うございました。

スプレッドシートのオススメ本を紹介いたします。

単行本(ソフトカバー)
Kindle版

殆ど障害者雇用や発達障害の悩みについての内容ですが、厳選してスプレッドシートやExcel等の「障害者雇用のお仕事で特に役に立ったショートカットキー」についても掲載しております。

Kindle版



初めてのスプレッドシートに戻る
写真クリエイターとしての活動


自己紹介

COUNTIFS関数で、のび太とジャイアンの忘れ物を集計する

この記事を読むことで、

・国民的アニメ「ドラえもん」を使って「COUNTIFS関数」を習得

・その例として「のび太とジャイアンの忘れ物」を集計

・「絶対参照」・「複合参照」・「相対参照」の違いと使い方の理解

についての概要をつかめます。
まず、下記のような簡易的な表を用意します。

忘れ物は、全部で9件ですね。

セルのE1の所に、のび太の忘れ物の件数を数える為に、COUNTIFS関数を入力します。最初に、式の意味をお伝えします。

=COUNTIFS(キャラ名の範囲 , のび太)

具体的な式の設定は、下記の様になります。
キャラ名の範囲を絶対参照にすることで、後でジャイアンの忘れ物の件数を数える時に便利になります。

=COUNTIFS($A$2:$A$10,D1)

$マークは絶対参照で、ショートカットキー「F4キー」を押すと簡単に$マークを出せます。(ノートPCによっては、[Fn]キーも一緒に、「Fn+F4」と押して見て下さい。)

のび太の忘れ物は7件でしたね。
実際に、A列で「のび太」と数えると、2, 3, 4, 6, 7, 9, 10行目で7件です。

この表はデータ数が少ないから目視でも数えられますが、大量のデータだと数えるのも大変なので、関数の恩恵に感謝です。


このE1のセルをそのままジャイアンの所に下に引っ張っていくと、

ジャイアンの忘れ物が5,8行目で2件と求まりました。
名前のA列を絶対参照で固定しているので、そのまま引っ張るだけで求められました。

ちなみに、COUNTIFS関数ではなく、COUNTIF関数でも求めらます。
しかし、今回COUNTIFSを使ったのは、次の表の集計の準備の為です。

ジャイアンの忘れ物件数の所のオートフィルでは、書式なしコピーもすることが可能です。

このオートフィルオプション、用が終わったら結構邪魔ですよね。

そこで、範囲外の任意の空白セル、例えばセルE4などの所で、「スペースキー」を入力して、その後スペースキーで入力した空白を消します。(そのスペースキーを押して出来た空白は、削除してもしなくてもOKです。)


次はCOUNTIFS関数の本領を発揮した例に致します。

上記の「のび太」と「ジャイアン」の忘れ物について、「誰」が「何」を「どれだけ」忘れたのかを集計するので、下記のようなマトリックスの表を簡単で良いので用意します。

セルE6に集計する式を入力しますので、まずは数式の意味から掲載致します。

=COUNTIFS
(A列のキャラ名の範囲 , D列のび太 , B列の忘れ物の範囲 ,5行目の教科書 )

で、絶対参照だけでなく、複合参照も使うので、この部分については、

・A列のキャラ名の範囲 ……… [絶対参照]

・D列のび太 …………………… [列] 固定の複合参照

・B列の忘れ物の範囲 ……… [絶対参照]

・5行目の教科書 ……………… [行] 固定の複合参照

となり、セルE6に入力する具体的な数式は、

=COUNTIFS
($A$2:$A$10,$D6,$B$2:$B$10,E$5)

となります。

[F4]を

1回押すと絶対参照
2回で行固定の複合参照
3回で列固定の複合参照
4回で相対参照

に戻ります。

ちょっとややこしいですね。
理解するまで何度も学習したのでそれが面倒でしたが、最初のセルE6のみ式に絶対参照・複合参照を設定すると、式をコピーするだけでCOUNTIFS関数が正しく機能するのでラクなんです!!

それではここで設定した式を、ジャイアンの教科書に反映させますので、セルE7を選択します。

その状態で ショートカットキー [Ctrl] + [D]でジャイアンの教科書の忘れ物の数式が入力出来ます。

これで、本当にジャイアンの教科書の忘れ物がカウントされているのか調べるには、このセルE7を選択している状態で[Ctrl] キーを押しながら [ [ (カッコの始まり。@キーの右隣) ]を押してみて下さい。

無事にジャイアンの教科書の忘れ物を正しく参照していることを確認出来ました。

では、ノートやランドセルの列までフィルします。
まずはこのように選択して下さい。

このまま[Shift]+[ → ] キーでランドセルの列まで選択範囲を右に広げてから
[Ctrl] + [R] を押します。

この数字、本当に合っているのか不安になった場合、忘れ物は全部で9件ですので、上の図の様に数値を選択した状態で合計を確認します。
やり方はとても簡単で、そのままExcelの画面の右下を見るだけです。

これで一安心ですね。

のび太はランドセルを4回も忘れているなんて、流石です(笑)
ジャイアンの方が忘れ物が少ないのは、のび太よりかは出来るからかのか、
「お前のものは俺のもの!!、俺のものは俺のもの!!」の精神から来ているのでしょうか。


このブログの読者様はご存知のことだと思いますが、私には発達障害があり、忘れ物が多すぎて悩んでいました。

実は、のび太とジャイアンにも発達障害があるのでは、という記事を見つけましたので興味のある方はご覧下さい。

ADHD(注意欠如・多動性障害) | のび太・ジャイアン症候群

私自身の困りごとについて忘れ物以外の内容ですが動画にまとめました。

ご精読誠にありがとうございました。

「できるYouTuber式 Excel現場の教科書(長内孝平氏)」

単行本(ソフトカバー)
Kindle版


「なんの才能もない発達障害者の声: 〜 届かない声を届けたい 〜 (障害者雇用向け)」

私、猫★シエスタの著作です。殆どが「発達障害者として働くことや障害とSNSについて」ですが、障害者雇用の事務作業で特に使用頻度の高いキーに絞ったExcelなどのショートカットキーの紹介と、演習問題も掲載しております。
Kindle版


お疲れ様でした。ブレイクタイムPhotoは、

遊歩道を咲き誇る桜です。
花鳥風月の順に人は感動するようで、私はまだ「花」の状態です。

「取りあえず事務職で働きたいから手っ取り早くExcel教えてくれ」に戻る

初めてのGoogleスプレッドシートへ



写真クリエイターとしての活動
自己紹介

【paiza レベルアップ問題集 】「標準入力その1 STEP: 3 3 行の入力」PythonとGASで解いたコード紹介

このコーナーでは、プログラミング学習コンテンツpaizaラーニングレベルアップ問題集を、PythonとGAS(Google Apps Script)の両方で同じ問題を解いたコードを公開している学習ログです。

Python・GASのどちらの言語のコードも可能な限り詳細に解説致します。
GASはスプレッドシートのエディタを使ってコードを書いております。

Pythonではpaizaに入会しなくても問題集を解きたい方向けにpaiza.ioを用いております。paiza.ioの使い方はこちらから。

(入会するか否かは問題集を解いて見てからの読者様のご判断にお任せ致します。
どちらの選択をされても記事を読めるようになっておりますので、安心して下さい。)


3 行の入力 (paizaランク D 相当)

問題:
文字列 s, t, u が 3 行で与えられるので、s, t, u の 3 行をそのまま出力してください。

この記事では、下記の入力例1の場合を例にして、文字列の出力を行います。

入力例1
abc
def
ghi

出力例1
abc
def
ghi


ではまず、Pythonで解いてみます。

■ Pythonでの解き方 ■

下準備として、paiza.ioにこの様に入力します。
(入力例1をそのままioにコピーしただけです。)

手順として、

1:問題文から3行と分かっているのでループを3回まわし、ループの中で標準入力で取得した文字列を変数tempに格納して出力する

で、行います。
こちらがPythonのコードになります。

#ループを3回まわし、ループの中で標準入力で取得した文字列を変数tempに格納して出力する
for i in range(3):
    temp=input()
    print(temp)

この手順で作成したプログラムを実行した出力結果です。


■ GASでの解き方 ■

今度は、同じ問題をGASで解いてみます。
まず、この様なスプレッドシートを用意しました。

スプレッドシートの緑のセルに文字列「abc」,灰色のセルに「def」,ピンクのセルに「efg」を入力しました。
これを二次元配列として取得して、黄色いセルにそのままの順番で文字列を出力します。

※スプレッドシートに表示する場合は、二次元配列としての配列に追加をして作成します※

手順はこのようになります。

1:SpreadSheetAppからアクティブシートにアクセスする

2:最初の文字列「abc」が入っている緑のセルA1と、その下の灰色のセル「def」が入っているセルA2、最後のピンクのセルA3
「ghi」を配列arrayに3行1列の二次元配列として取得する

3:配列arrayに文字列が取得出来たことをログ出力で確認する

4:スプレッドシートの黄色いセルに二次元配列arrayを出力する

手順1: SpreadSheetAppから階層を辿って現在のシートにアクセスする

const ss = SpreadsheetApp.getActiveSheet();

ここで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。

関数「standardInput3」を書いていきます。Standard Inputは標準入力の意味です。

function standardInput3() {

  //SpreadSheetAppから階層を辿って現在のシートにアクセスする
  const ss=SpreadsheetApp.getActiveSheet();
  
}

手順2:最初の文字列「abc」が入っている緑のセルA1と、その下の灰色のセルA2の「def」と、最後のピンクのセルA3に入っている「ghi」を配列arrayに3行1列の二次元配列として取得する

const array=ss.getRange(1,1,3).getValues();

valueではなく、valuesと「s」を付けると複数の文字列を取得できます。
コメントが複数行に渡る際は「/*」と「*/」で囲います。

function standardInput3() {

  const ss=SpreadsheetApp.getActiveSheet();

  /*文字列「abc」が入っている緑のセルA1と
  その下の灰色のセル「def」が入っているセルA2と
  最後の「ghi」が入っているピンクのセルA3を
  配列arrayに3行1列の二次元配列として取得する
  */
  const array = ss.getRange(1,1,3).getValues();
 
}

手順3:配列arrayに文字列が出力出来たことをログ出力で確認する

console.log(array);

配列arrayを出力して、A1,A2,A3の文字列が無事に配列に格納されていることを確認します。

function standardInput3() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array = ss.getRange(1,1,3).getValues();

  //配列arrayに文字列が取得出来たことをログ出力で確認する
  console.log(array);
  
}

上記の実行結果です。

手順4:スプレッドシートの黄色いセルに二次元配列arrayを出力する

ss.getRange(6,1,array.length).setValues(array);

スプレッドシートのA6である6行目1列目から配列arrayの長さである3行分を確保してarrayを出力しています。

array.lengthでlengthメソッドを使って配列の長さである3を求めています。
これで3行分が確保されて出力されます。

function standardInput3() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array = ss.getRange(1,1,3).getValues();
  console.log(array);
  
  //lengthメソッドを用いて配列arrayの長さを求める
  console.log(array.length);

  //スプレッドシートの黄色いセルA6から3行分二次元配列arrayを出力する
  ss.getRange(6,1,array.length).setValues(array);

}

実行後のログとスプレッドシートです。

お疲れ様でした。ブレイクタイムPhotoは、

お台場の中でもオススメスポット、モノレールゆりかもめ線 芝浦ふ頭のレインボーブリッジです。

←前の問題へ          次の問題へ→

■ 関連記事 ■

paizaレベルアップ問題集「標準入力その1」へ戻る
paizaレベルアップ問題集_PythonとGASのコード紹介トップページへ

写真クリエイターとしての活動
自己紹介

【paiza レベルアップ問題集 】「標準入力その1 STEP: 2 2 行の入力」PythonとGASの両方で解いたコード紹介

このコーナーでは、プログラミング学習コンテンツpaizaラーニングレベルアップ問題集を、PythonとGAS(Google Apps Script)の両方で同じ問題を解いたコードを公開している学習ログです。

Python・GASのどちらの言語のコードも可能な限り詳細に解説致します。
GASはスプレッドシートのエディタを使ってコードを書いております。

Pythonではpaizaに入会しなくても問題集を解きたい方向けにpaiza.ioを用いております。paiza.ioの使い方はこちらから。

(入会するか否かは問題集を解いて見てからの読者様のご判断にお任せ致します。
どちらの選択をされても記事を読めるようになっておりますので、安心して下さい。)


2 行の入力 (paizaランク D 相当)

問題:
文字列 s と t が 2 行で与えられるので、s と t の 2 行をそのまま出力してください。

この記事では、下記の入力例2の場合を例にして、文字列の出力を行います。

入力例2
heisei31
reiwa1

出力例2
heisei31
reiwa1

ではまず、Pythonで解いてみます。


■ Pythonでの解き方 ■

下準備として、paiza.ioにこの様に入力します。
(入力例2をそのままioにコピーしただけです。)

手順として、

1:標準入力で最初の文字列sを読み込む

2:標準入力で次の文字列tを読み込む


3:print文でsを出力する


4:print文でtを出力する

この様に行います。

この手順に沿って作成したPythonのコードと実行した出力結果です。

#標準入力で最初の文字列sを読み込む
s=input()
#標準入力で次の文字列tを読み込む
t=input()

#print文でsを出力する
print(s)
#print文でtを出力する
print(t)


■ GASでの解き方 ■

では、同じ問題をGASで解いてみます。
まず、スプレッドシートをこの様に用意しました。

スプレッドシートの緑のセルA1に文字列「heisei31」を入力して、灰色のセルにA2に「reiwa 1」を入力して、それらを二次元配列として取得します。
最後にその二次元配列を黄色いセルにそのままま文字列を出力します。

※スプレッドシートに表示する場合は、二次元配列としての配列に追加をして作成します※

手順はこのようになります。

1:SpreadSheetAppからアクティブシートにアクセスする

2:最初の文字列「heisei31」が入っている緑のセルとその下の灰色のセル「reiwa1」が入っているセルを配列arrayに2行1列の二次元配列として取得する

3:配列arrayに文字列が出力出来たことをログ出力で確認する

4:スプレッドシートの黄色いセルに二次元配列arrayを出力する

手順1: SpreadSheetAppから階層を辿って現在のシートにアクセスする

const ss = SpreadsheetApp.getActiveSheet();

ここで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。

関数「standardInput2」の中に書いていきます。
Standard Inputで標準入力の意味です。

function standardInput2() {

  //SpreadSheetAppから階層を辿って現在のシートにアクセスする
  const ss=SpreadsheetApp.getActiveSheet();

}

手順2:最初の文字列「heisei31」が入っている緑のセルと、その下の灰色のセル「reiwa1」が入っているセルを配列arrayに2行1列の二次元配列として取得する

const array=ss.getRange(1,1,2).getValues();

セルA1は1行目1列目ですので、(1,1)と表せて、そこから2行分ですので、(1,1,2)となります。1列取得のみですので、(1,1,2,1)の最後の1は略せます。

2文字分ですので、getValuesと「s」が付きます。
また、複数行に渡るコメントの場合は、「/*」と「*/」で囲います。

function standardInput2() {

  const ss=SpreadsheetApp.getActiveSheet();

  /*最初の文字列「heisei31」が入っている緑のセルと、
  その下の灰色のセル「reiwa1」が入っているセルを
  配列arrayに2行1列の二次元配列として取得する*/

  const array=ss.getRange(1,1,2).getValues();

}

手順3:配列arrayに文字列が出力出来たことをログ出力で確認する

console.log(array);

スプレッドシートから取得した文字列を格納した配列arrayが無事にログ出力されることを確認します。

function standardInput2() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(1,1,2).getValues();

 //配列arrayの出力確認
  console.log(array);

}

手順4:スプレッドシートの黄色いセルに二次元配列arrayを出力する

ss.getRange(5,1,array.length).setValues(array);

スプレッドシートの黄色いセルA5(5,1)とA6に、配列arrayの長さである2行1列分を確保してarrayを出力しています。

array.lengthで、lengthメソッドを使っていることで、配列の長さである2を表しています。

function standardInput2() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(1,1,2).getValues();

  
  console.log(array);

  //lengthメソッドで配列の長さ2が出力される
  console.log(array.length);

  //スプレッドシートの黄色いセルに二次元配列arrayを出力する
  ss.getRange(5,1,array.length).setValues(array);

}

実行後のログとスプレッドシートです。


お疲れ様でした。ブレイクタイムPhotoは、

お台場自由の女神と、レインボーブリッジと、レインボーブリッジの右から1cmぐらいの所にある東京タワーです。

←前の問題へ          次の問題へ→

■ 関連記事 ■

paizaレベルアップ問題集「標準入力その1」へ戻る
paizaレベルアップ問題集_PythonとGASのコード紹介トップページへ

写真クリエイターとしての活動
自己紹介

【paiza レベルアップ問題集 】「標準入力その1 STEP: 1 1 行の入力」PythonとGASの両方で解いたコード紹介

このコーナーでは、プログラミング学習コンテンツpaizaラーニングレベルアップ問題集を、PythonとGAS(Google Apps Script)の両方で同じ問題を解いたコードを公開している学習ログです。

Python・GASのどちらの言語のコードも可能な限り詳細に解説致します。
GASはスプレッドシートのエディタを使ってコードを書いております。

Pythonではpaizaに入会しなくても問題集を解きたい方向けにpaiza.ioを用いております。paiza.ioの使い方はこちらから。

(入会するか否かは問題集を解いて見てからの読者様のご判断にお任せ致します。
どちらの選択をされても記事を読めるようになっておりますので、安心して下さい。)


1 行の入力 (paizaランク D 相当)

問題:
文字列 s が 1 行で与えられるので s をそのまま出力してください。

この記事では、下記の入力例1の場合を例にして、文字列の出力を行います。

入力例1
paiza

出力例1
paiza

ではまず、Pythonでのコードを掲載致します。


■ Pythonでの解き方 ■

下準備として、paiza.ioにこの様に入力します。
(入力例1をそのままioにコピーしただけ。)

手順として、

1:標準入力で最初の単語wordを読み込む

2:print文でwordを出力する

で、行います。
コードはこちらになります。

#標準入力で文字列を読み込む
word=input()

#その文字列を出力する
print(word)

この手順で作成したプログラムを実行した出力結果です。


■ GASでの解き方 ■

では、同じ問題をGASで解いてみます。
まず、スプレッドシートに下記の様に入力及びセルの塗り潰しを致しました。

スプレッドシートの緑のセルに文字列「paiza」を入力しました。
これを黄色いセルにそのままま文字列を出力します。

※スプレッドシートに表示する場合は、二次元配列としての配列に追加をして作成します※

手順はこのようになります。

1:スプレッドシートからアクティブシートにアクセスする

2:緑のセルから文字列を取得する

3:文字列が出力出来たことをログ出力で確認する

4:文字列をスプレッドシートに二次元配列として取得する配列word2を宣言する

5:word2が二次元配列になる様に、wordを追加する

6:スプレッドシート出力前にログで確認する

7:スプレッドシートの黄色いセルに出力する

手順1: スプレッドシートからアクティブシートにアクセスする

const ss=SpreadsheetApp.getActiveSheet();

関数「standardInput1」の中にコードを書いていきます。
standard input は、標準入力のことです。

function standardInput1() {

  //SpreadSheetAppから階層を辿って現在のシートにアクセスする
  const ss=SpreadsheetApp.getActiveSheet();
  
}

ここで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。

手順2:緑のセルから文字列を取得する

const word=ss.getRange(1,1).getValue();

緑のセルはA1であり、(1,1)と表記出来ます。

function standardInput1() {

  const ss=SpreadsheetApp.getActiveSheet();

  //緑のセルA1から文字列を取得する
  const word=ss.getRange(1,1).getValue();

}

手順3:文字列が出力出来たことをログ出力で確認する

console.log(word);

function standardInput1() {

  const ss=SpreadsheetApp.getActiveSheet();
  const word=ss.getRange(1,1).getValue();

  //文字列が出力出来たことをログ出力で確認する
  console.log(word);

}

手順4:文字列をスプレッドシートに二次元配列として取得する配列word2を宣言する

let word2=[];

スプレッドシートは縦×横の二次元ですので、二次元配列として出力する準備を行います。

function standardInput1() {

  const ss=SpreadsheetApp.getActiveSheet();
  const word=ss.getRange(1,1).getValue();
  console.log(word);

  //文字列をスプレッドシートに二次元配列として取得する配列word2を宣言する
  let word2=[];

}

手順5:word2が二次元配列になる様に、wordを追加する

word2.push([word]);

pushメソッドを使って、[ ]の中にwordを入れて二次元配列にしています。

function standardInput1() {

  const ss=SpreadsheetApp.getActiveSheet();
  const word=ss.getRange(1,1).getValue();
  console.log(word);


  let word2=[];

  //word2が二次元配列になる様に、pushメソッドを使ってwordを追加する
  word2.push([word]);

}

手順6:スプレッドシート出力前にログで確認する

console.log(word2);

function standardInput1() {

  const ss=SpreadsheetApp.getActiveSheet();
  const word=ss.getRange(1,1).getValue();
  console.log(word);


  let word2=[];
  word2.push([word]);

  //スプレッドシート出力前にログで確認する
  console.log(word2);

}

手順7:スプレッドシートの黄色いセルに出力する

ss.getRange(3,1).setValue(word2);

黄色いセルはセルA3ですので、3行目1列目で(3,1)と表記します。

function standardInput1() {

  const ss=SpreadsheetApp.getActiveSheet();
  const word=ss.getRange(1,1).getValue();
  console.log(word);


  let word2=[];
  word2.push([word]);
  console.log(word2);

  //スプレッドシートの黄色いセルに出力する
  ss.getRange(3,1).setValue(word2);

}

実行後のスプレッドシートです。


お疲れ様でした。ブレイクタイムPhotoは、

ここは本当に、東京23区ですか??と驚く様な、世田谷区の等々力渓谷で水と森林にたっぷりと癒されました。

次の問題へ→

■ 関連記事 ■

paizaレベルアップ問題集「標準入力その1」へ戻る
paizaレベルアップ問題集_PythonとGASのコード紹介トップページへ

写真クリエイターとしての活動
自己紹介

episode6 GAS【指定セル範囲に色付け】「HUNTER×HUNTERで覚えるGoogle Apps Script」

この記事のシリーズを読むことで、アニメHUNTER×HUNTER(ハンターハンター)を通してGAS(Google Apps Script)の最初の一歩が学べます。

この記事では、

・色を付けたい範囲の指定方法

・文字の色とセルの塗り潰しの色を指定

・色の英語名と16進数を使用

についての概要を掴めます。


今回は、この表に色を付けます。
完成形のイメージは、この様な厨二病っぽい感じにしたいと思います。

各キャラクターの名前(列A)と念系統(列B)を黒背景に白文字に、
ヒソカチェックの列(列C)は、紫にします。

列ABの4行2列分の範囲をcharaNenと定義します。

//A列B列の名前と念系統が入っているセル範囲をcharaNenと定義
const charaNen=ss.getRange(1,1,4,2);

背景色を黒にしています。
色は英語名で指定出来ます。

charaNen.setBackground('black');

文字の色を白にしています。

charaNen.setFontColor('white');

列Cの4行1列分の範囲をhisokaCheckという名前にします。
1列分の場合は、列は略せますので、(1,3,4)として、(1,3)でセルC1,4で4行を取得しております。

//C列のヒソカチェックのセル範囲をhisokaCheckと定義
const hisokaCheck=ss.getRange(1,3,4);

色は英語名の他に、16進数で更に細かく指定出来ます。
ヒソカチェックの所は16進数で色を指定するので、ここで、16進数を用いての色の表し方について触れさせて頂きます。

・白… ffffff

・黒…000000

・最初の2桁が赤、次が緑、最後が青

以上より薄紫を[#eeddee]で表しました。
このコードでは、赤と青を強めにしていて、薄い紫になります。

cellHISOKA.setBackground('#eeddee');

参考までに色見本です。

ここまでのコードです。

//アクティブなスプレッドシートを選択するグローバル領域(共通の処理)
const ss=SpreadsheetApp.getActiveSheet();

//セルの背景とフォントを変える
function rookieColor() {

  //A列のキャラ名とB列の念の入っている範囲をcharaNenとする
  const charaNen=ss.getRange(1,1,4,2);

  //背景色を黒にする
  charaNen.setBackground('black');

  //文字色を白にする
  charaNen.setFontColor('white');

  //C列のヒソカチェックの範囲をhisokaCheckとする
  const hisokaCheck=ss.getRange(1,3,4);

  //背景を薄紫にする
  hisokaCheck.setBackground('#eeddee');

}

お疲れ様でした。ブレイクタイムPhotoは、

横浜ランドマークタワーとクルーズ船のみなとみらいの夜景です。

←episode5               episode7→

←GAS自作集サンプルへ戻る

ご精読有難うございました。

■ GASの入門書の紹介です ■

詳解! Google Apps Script完全入門 [第3版]
単行本
Kindle版(電子書籍)

初めてのGoogle Apps Scriptに戻る
写真クリエイターとしての活動

自己紹介

episode5 GAS【指定セル範囲のフォント変更】「HUNTER×HUNTERで覚えるGoogle Apps Script」

この記事のシリーズを読むことで、アニメHUNTER×HUNTER(ハンターハンター)を通してGAS(Google Apps Script)の最初の一歩が学べます。

今回の記事では、

・指定の範囲の文字を太字

・フォントサイズの変更

・最終行のgetLastRow()の復習

についての概要が掴めます。


今回は、この様なシートを用意しました。
この表のA列にある「ゴン〜レオリオ」までのキャラのフォントを変えます。

キャラの名前が掲載されている範囲は、セルA1からA4までになります。
この範囲を太字で12ptにします。

キャラクターの人数をN(人)として、getLastRowで取得します。

const N=ss.getLastRow();

範囲に「cellROOKIE(ルーキー)」と名前を付けて、大きさを変える範囲を確保します。

let cellROOKIE=ss.getRange(1,1,N);

(1,1,N)は、セルA1(1,1)からN行分の範囲という意味です。
これで、キャラクターが増えても対応可能です。

この範囲にフォントの大きさを12ptで太字にする設定を下記のコードに施します。

cellROOKIE.setFontSize(12).setFontWeight(‘bold’);

ここまでのコードです。

//アクティブなスプレッドシートを選択するグローバル領域(共通の処理)
const ss=SpreadsheetApp.getActiveSheet();

//行数(人数)を取得する
const N=ss.getLastRow();

//キャラクターの名前を12ptの太字にする
function bold12pt(){

  let cellROOKIE=ss.getRange(1,1,N);
  cellROOKIE.setFontSize(12).setFontWeight('bold');
  
}

ここでボタンに関数「bold12pt」をスクリプトを割り当てで割り当てます。
実行すると、

この様に、キャラクターの名前がフォント12の太字になりました。



5行目の

const N=ss.getLastRow();

で、最終行を取得しているので、キャラクターの名前が増えても対応可能です。
この様に少し増やしてみます。

「新人潰しのトンパさん〜アモリ三兄弟」まで追加しました。
再度実行してみます。

これで全員の名前が太字になりました。

←episode4               episode6→

←GAS自作サンプル集へ戻る

ご精読有難うございました。

■ GASの入門書の紹介です ■

詳解! Google Apps Script完全入門 [第3版]
単行本
Kindle版(電子書籍)

お疲れ様でした。ブレイクタイムPhotoは、

横浜みなとみらいの夜景です。
コスモクロック21と、ヨコハマ グランド インターコンチネンタル ホテルです。

HUNTER×HUNTERのGAS自作サンプル集のページに戻る
初めてのGASに戻る


自己紹介

episode4 GAS【IFとループ】ヒソカの念チェック「HUNTER×HUNTERで覚えるGoogle Apps Script」

この記事のシリーズを読むことで、アニメHUNTER×HUNTER(ハンターハンター)を通してGAS(Google Apps Script)の最初の一歩が学べます。

この記事では、

・GASによるIF分岐とループでヒソカと同じ念系統か調べる

・配列で処理時間を短縮

・最後の行をgetLastRow()で求める

SpreadSheetApp→アクティブシート→アクティブセルと階層を辿ることによって処理時間がかかってしまうことを空の配列を用意することで解決する方法を掲載しています。

GASでは配列の扱いがとても重要になります。

ますは、前回(episode3)の復習をします。

・セルA1からB4にキャラクター名を入力する関数と消去する関数を作り、それぞれをボタンに登録しました。

//アクティブなスプレッドシートを選択するグローバル領域
const ss=SpreadsheetApp.getActiveSheet();


//スプレッドシートにキャラクターの名前と念系統の入った配列を出力する
function nenArray(){

  //二次元配列hhにキャラクターの名前と念系統を格納
  const hh = [
      ['ゴン','強化系'],
      ['キルア','変化系'],
      ['クラピカ','具現化系'],
      ['レオリオ','放出系']
    ];
  
  //配列hhをログに出力
  console.log(hh);

  //行の長さを調べる
  console.log(hh.length);

  //列の長さを調べる
  console.log(hh[0].length);

  //二次元配列hhを格納するために、スプレッドシートの4行2列を確保して出力する
  ss.getRange(1,1,hh.length,hh[0].length).setValues(hh);

}


//出力した配列を消去する
function myClear() {

  //出力した配列をgetDataRangeを使って取得して消去する
  ss.getDataRange().clear();

}

実行するとこの様になっていると思います。

ヒソカの念は「変化系」でキルアと一緒です。


今回はIF文を使って、ゴンからレオリオまでのキャラの念が、ヒソカと同じ変化系かどうか調べます。

ゴンは「強化系」なので「変化系」とは異なる為、条件が当てはまらないelseへと分岐します。

ゴンの念が入力されているセル「B1」は「1行目の2列目」ですので、(行,列)で書くと(1,2)と書くことも出来ます。

処理はelseになる為、隣のセルである「C1 (1,3)」には「XXX」と入力されます。

//アクティブなスプレッドシートを選択するグローバル領域(共通の処理)
const ss=SpreadsheetApp.getActiveSheet();


//【ゴン】がヒソカと同じ念系統か判定する関数
function Hisoka() {
  let nen = ss.getRange(1,2).getValue(); //ゴンの念を取得
  console.log(nen);
  
  //【ゴン】の念はヒソカと同じ「変化系」か?
  if(nen=='変化系'){
    ss.getRange(1,3).setValue('ヒソカと一緒');
  }else{
    ss.getRange(1,3).setValue('XXX'); //違うからこっちに分岐
  }
}

ログ出力です。
ゴンの念系統「強化系」が出力されました。

スプレッドシートです。
C1に「XXX」と入りました。


次に、「キルア」を調べます。

キルアは「変化系」なので、「ヒソカ」と同じという条件が当てはまり「ヒソカと一緒」と表示されます。

//アクティブなスプレッドシートを選択するグローバル領域(共通の処理)
const ss=SpreadsheetApp.getActiveSheet();


//【キルア】がヒソカと同じ念系統か判定する関数
function Hisoka() {
  let nen = ss.getRange(2,2).getValue(); //キルアの念を取得
  console.log(nen);
  
  //【キルア】の念はヒソカと同じ「変化系」か?
  if(nen=='変化系'){
    ss.getRange(2,3).setValue('ヒソカと一緒'); //同じだからこっちに分岐
  }else{
    ss.getRange(2,3).setValue('XXX'); 
  }
}

ログ出力です。

スプレッドシートです。
キルアの念はヒソカと同じなので、セルC2に「ヒソカと一緒」と入力されました。


次に、「クラピカ」を調べます。

クラピカは「具現化系」なので、「変化系」とは異なる為、条件が当てはまらないelseへと分岐します。

//アクティブなスプレッドシートを選択するグローバル領域(共通の処理)
const ss=SpreadsheetApp.getActiveSheet();


//【クラピカ】がヒソカと同じ念系統か判定する関数
function Hisoka() {
  let nen = ss.getRange(3,2).getValue(); //クラピカの念を取得
  console.log(nen);
  
  //【クラピカ】の念はヒソカと同じ「変化系」か?
  if(nen=='変化系'){
    ss.getRange(3,3).setValue('ヒソカと一緒'); 
  }else{
    ss.getRange(3,3).setValue('XXX'); //違うからこっちに分岐
  }
}

ログ出力です。

スプレッドシートです。
ヒソカとは念が異なるので、C3に「XXX」と入力されました。


最後に、「レオリオ」を調べます。
レオリオは「放出系」なので、ヒソカの「変化系」とは異なる為、条件が当てはまらないelseへと分岐します。

//アクティブなスプレッドシートを選択するグローバル(共通の処理)
const ss=SpreadsheetApp.getActiveSheet();


//【レオリオ】がヒソカと同じ念系統か判定
function Hisoka(){
  let nen=ss.getRange(4,2).getValue();  //レオリオの念を取得
  
  //【レオリオ】の念はヒソカと同じ「変化系」か?
  if(nen=='変化系'){                      
    ss.getRange(4,3).setValue('ヒソカと一緒');
    }else{
    ss.getRange(4,3).setValue('XXX'); //違うからこっちに分岐
  }
}

ログ出力です。
レオリオの「放出系」が出力されました。

スプレッドシートではC4に「XXX」と出力してelseの処理を実行しました。


ここまでで、「なんだか同じような処理をしていて、それで一部だけを変更している」と言う感覚になられたと思います。

上記のコードで「i」の部分のみを変えています。
そこで、ゴンからレオリオまでを繰り返して調べられる、Forによるループを使います。

getRange(i,2)getValue(); //キャラの念を取得 
getRange(i,3)setValue(‘ヒソカと同じか違うか’)      

実はここまでの記事で、ループのトレースを行えておりました。

追加としては、

ゴン・・・i=1
キルア・・・i=2
クラピカ・・・i=3
レオリオ・・・i=4

と、変数が出てくるぐらいです。

なぜ「i」なのか、それは、ループで慣習的に使う変数として、「i、j、k」がよく使われるからです。

このことについては、「なぜ、新人つぶしのトンパさんは、トンパさんという名前なのか」と突き詰めてしまうことの様なものなので、ループではiとかを使うんだな、程度に捉えておりましたが、やはり気になって調べた所、分かりやすい記事を見つけました。

「i, j, k」ってなに?知っておきたいfor文の変数名の由来


ゴン〜レオリオまでメンバーは4人ですので、その人数を調べるために、変数Nに「getLastRow()」(最後の行)を調べて格納します。

最後の行…getLastRow();

以上を踏まえてループとIFを使ったコードを書くと、下記の様になります。

//アクティブなスプレッドシートを選択するグローバル領域(共通の処理)
const ss=SpreadsheetApp.getActiveSheet();


//【メンバー】がヒソカと同じ念系統か判定する関数
function Hisoka() {

  const N = ss.getLastRow(); //人数は変数Nに格納。この場合は4人
  console.log(N);

  for(i=1;i<=N;i++){
    let nen = ss.getRange(i,2).getValue(); //メンバーの念を取得
    console.log(nen);
  
    //【メンバー】の念はヒソカと同じ「変化系」か?
    if(nen=='変化系'){
      ss.getRange(i,3).setValue('ヒソカと一緒'); //キルアの場合
    }else{
      ss.getRange(i,3).setValue('XXX'); //キルア以外
    }
  }
}

ログ出力です。
スプレッドシートには同様に出力されております。

この「Hisoka」をボタンの「スクリプトを割り当て」でボタンに登録します。
ボタンを右クリックして3点リーダーから登録します。


また、下記のコードで、ヒソカと念が同じかどうか調べた範囲の判定結果を削除します。

//ヒソカチェックのクリア
function HisokaClear(){
  
  //行数を取得して変数Nに人数を格納
  const N=ss.getLastRow();

  ss.getRange(1,3,N).clear();
}

一旦ここまでのコードをまとめます。
人数の行数をは判定もクリアも同じ4人でNですので、グローバル領域に移動しました。

//アクティブなスプレッドシートを選択するグローバル領域(共通の処理)
const ss=SpreadsheetApp.getActiveSheet();

//行数(人数)を取得する
const N=ss.getLastRow();
// console.log(N); 確認済みなのでコメントアウトしました。


//【メンバー】がヒソカと同じ念系統か判定する関数
function Hisoka() {

  for(i=1;i<=N;i++){
    let nen = ss.getRange(i,2).getValue(); //メンバーの念を取得
    // console.log(nen); 確認済みなのでコメントアウトしました。
  
    //【メンバー】の念はヒソカと同じ「変化系」か?
    if(nen=='変化系'){
      ss.getRange(i,3).setValue('ヒソカと一緒'); //キルアの場合
    }else{
      ss.getRange(i,3).setValue('XXX'); //キルア以外
    }
  }
}

//ヒソカチェックのクリア
function HisokaClear(){
  
  ss.getRange(1,3,N).clear();
}

紫のボタン「ヒソカチェック」に関数「Hisoka」を、灰色のボタン「ヒソ消し」に関数「HisokaClear」それぞれスクリプトを割り当てます。

これで、ボタンを使って、判定したり消したりが出来る様になりました。
現在、ヒソ消しを押して、判定の列は削除してあります。


このままでも良いのですが、GASでループを使う場合、1回1回SpreadsheetAppからアクティブシートを辿ってしまうので処理に時間がかかってしまいます。

そこで、一旦B列4行分の各メンバーの念系統を配列arrayに格納します。
配列arrayには[[‘強化系’],[‘変化系’],[‘具現化系’],[‘放出系’]]が入ります。

また、そのメンバーの念系統がヒソカの変化系と等しいかどうかの判定結果を格納する配列judgeを用意します。
配列arrayには[[‘XXX’],[‘ヒソカと一緒’],[‘XXX’],[‘XXX’]]が入ります。

それぞれの空の配列を用意しております。

//【メンバー】の念を格納する配列を宣言
  let array=[];

//変化系と等しいか判定結果を入れる配列
  let judge=[];

配列arrayを使って、念系統がヒソカと同じ変化系かどうか調べて、その判定結果を配列judgeに格納する処理にループを用います。
また、judgeに格納するときにpushを使います。

この配列を使うことによって、スプレッドシートからアクティブシートに階層を辿って行く処理時間を短縮できます。

ここまでの処理について、ログ出力のところまでのコードを掲載致しました。
配列は0から始まるので、ループの条件部分を修正しました。

i=0、i<Nと変更してあります。

また、配列judgeに入れる際、スプレッドシートに出力するのに二次元配列の形にするので、と[ ]を付けて配列に追加しております。

judge.push([‘ヒソカと一緒’]) → ifでキルアの念系統の場合

judge.push([‘XXX’]) → elseでキルア以外のメンバーの念系統の場合


その部分のコードの抜粋です。

//【メンバー】の念はヒソカと同じ「変化系」か?
    if(array[[i]]=='変化系'){
      judge.push(['ヒソカと一緒']); //キルアの場合
    }else{
      judge.push(['XXX']); //キルア以外
    }

ここまでのログ出力までのコードです。

//アクティブなスプレッドシートを選択するグローバル領域(共通の処理)
const ss=SpreadsheetApp.getActiveSheet();

//行数(人数)を取得する
const N=ss.getLastRow();


//【メンバー】がヒソカと同じ念系統か判定する関数
function Hisoka() {

  let array= [];
  let judge = [];

  //B列の各メンバーの念を配列arrayに格納
  array=ss.getRange(1,2,N).getValues();
  console.log(array);

  for(i=0;i<N;i++){
   
    //【メンバー】の念はヒソカと同じ「変化系」か?
    if(array[[i]]=='変化系'){
      judge.push(['ヒソカと一緒']); //キルアの場合
    }else{
      judge.push(['XXX']); //キルア以外
    }
  }
  console.log(judge);

}

配列arrayとヒソカの念との比較のログを出力しました。

【配列array】


【配列judge】

この後、配列judgeをスプレッドシートのC列に4行分書き出します。
関数Hisokaにこの2行を加えたのみです。

//スプレッドシートC列4行分に判定結果の入った配列judgeごと入力する。
  ss.getRange(1,3,N).setValues(judge);

ここまでのコードをまとめました。

//アクティブなスプレッドシートを選択するグローバル領域(共通の処理)
const ss=SpreadsheetApp.getActiveSheet();

//行数(人数)を取得する
const N=ss.getLastRow();


//【メンバー】がヒソカと同じ念系統か判定する関数
function Hisoka() {

  let array= [];
  let judge = [];

  //B列の各メンバーの念を配列arrayに格納
  array=ss.getRange(1,2,N).getValues();
  console.log(array);

  for(i=0;i<N;i++){
   
    //【メンバー】の念はヒソカと同じ「変化系」か?
    if(array[[i]]=='変化系'){
      judge.push(['ヒソカと一緒']); //キルアの場合
    }else{
      judge.push(['XXX']); //キルア以外
    }
  }
  console.log(judge);

  //スプレッドシートC列4行分に判定結果の入った配列judgeごと入力する。
  ss.getRange(1,3,N).setValues(judge);
}

//ヒソカチェックのクリア
function HisokaClear(){
  
  ss.getRange(1,3,N).clear();
}

お疲れ様でした。ブレイクタイムPhotoは、

横浜の夜景です。
思わずこの歌を歌いたくなりました。

←episode3               episode5→

←GAS自作サンプル集へ戻る

HUNTER×HUNTERのGAS自作サンプル集のページに戻る
初めてのGASに戻る


自己紹介

【Excel基本関数(平均・最大値、IF関数)と条件付き書式】富士山頂の気温の例

この記事では富士山頂の気温のデータを使って、

・関数の王様、IF関数

・平均(AVERAGE)

・絶対参照

・最大の気温(MAX)
/ 最小の気温(MIN)

・条件付き書式

・指定の温度以上の件数(COUNTIF)


といった、基本的な集計で使うExcel関数を気温を扱う簡単な例で概要が掴めます。

以下のExcelに入力した気温には、気象庁のホームページのデータを使用しております。

まず、平均を求めてみます。
セルF1の所に、

=AVERAGE(B2:B7)

と入力します。
( 「=ave」と入力後、Tabキーで補完すると楽に関数名が入力出来ます。 )


では、次に、再びこのシートをご覧下さい。

セルC2〜C7の所で、気温が平均値以上でしたら「平均以上」と表示して、そうでなければ「—」(「-」を3つ)表示させるようにします。
式をこのように入れます。

=IF(B2>=$F$1,”平均以上”,”—“)

ここで気をつけるポイントは、先程平均値を求めたセルF1は、固定する必要がありますので、絶対参照にします。

1970年から1980年の所に数式を下に引っ張っていくとズレてしまうので、その前に[F4]キーを押して$(ドル)マークを付けて「$F$1」としています。

(ノートPCの環境によっては、[F4]キーと同時に[Fn]キーも押してみて下さい。)

もしも絶対参照にしないと、この様に平均気温の入ったF1が下にフィルをすると、ずれてしまいます。
F列の赤い枠線に着目して見て下さい。

【 C2に入った式 】

【 C3に入った式 】

これを先ほどの絶対参照にすると、

【 C3の式(絶対参照) 】

この様に参照先である平均気温が下にずれなくなりました。

それでは、絶対参照にした式を下にフィルします。
(セルC2は、中央揃えをしております。)


もしも、オートフィルが消えなくて困る場合は、何もないセルを選択して、[スペースキー]を押してみて下さい。
(余分な余白は後で削除します。)


次に最大値と最小値です。
【最大値】はセルF2に

=MAX(B2:B7)

と入力します。

【最小値】はセルF3に

=MIN(B2:B7)

と入力します。


さて、ちょっと関数から離れて、条件付き書式の設定をします。
最大値最小値に書式を設定します。

まずは、平均気温のデータの所を選択します。

ホームタブから条件付き書式を選択して、

条件付き書式を設定します。

セルの強調表示ルール 指定の値に等しい

を選びます。(Macの手順ですので、もしもWindowsの方で手順が異なっていましたら、恐れ入りますが検索して調べて頂けますと有り難いです。お手数お掛け致します。)

気温の最大値を参照する様にして、書式は好きな色を選びます。


OKを押します。

最大値の気温に書式が設定されました。

同様にして最小値にも書式を設定しました。


では、再び関数に戻って「-6℃」以上の件数を数えます。


セルF4に、

=COUNTIF(B2:B7,”>=-6″)

と入力するとこの様に「3件」と求まります。


お疲れ様でした。ブレイクタイムPhotoは、

江ノ電稲村ヶ崎海岸から撮影した、富士山と江ノ島です。
映画、「稲村ジェーン」の舞台になった所ですね。

ご精読誠にありがとうございました。

「できるYouTuber式 Excel現場の教科書(長内孝平氏)」

単行本(ソフトカバー)
Kindle版


「なんの才能もない発達障害者の声: 〜 届かない声を届けたい 〜 (障害者雇用向け)」

私、猫★シエスタの著作です。殆どが「発達障害者として働くことや障害とSNSについて」ですが、障害者雇用の事務作業で特に使用頻度の高いキーに絞ったExcelなどのショートカットキーの紹介と、演習問題も掲載しております。
Kindle版


「取りあえず事務職で働きたいから手っ取り早くExcel教えてくれ」に戻る

初めてのGoogleスプレッドシートへ



写真クリエイターとしての活動
自己紹介

【 Excelテーブル機能 】国民的アニメでVLOOKUP関数|IFERROR関数|COUNTA関数|OFFSET関数|表の範囲を可変に操作

この記事を読むことで、

・VLOOKUP関数
・IFERROR関数
・OFFSET関数
・COUNTA関数

・テーブル機能

の概要が掴めます。

Excelで関数を使うとファイルが重くなりますよね。
また、エラーが表示されると見映えも悪くなります。
そこで、実務でよく使う関数である上記の関数の合わせ技を使ってみたいと思います。

では、国民的アニメを題材としたVLOOKUP関数の説明に入ります。
この様な簡易的な表を作成致します。

このシートのセルD2には、サザエさんに出て来る「ワカメ」ちゃんの名前があります。
作品名である「サザエさん」を黄色いセルに表示させます。

黄色いセルにVLOOKUP関数を入れます。
先にこの関数の中身である引数の意味からお伝えします。

=VLOOKUP(ワカメ,表の範囲,列,完全一致)

という意味の指定をして行きます。
表の「キャラ」をキーにして、1列目が「キャラ」、2列目が「作品名」なので、この場合、表示させたい作品名は「2」になります。

完全一致には「FALSE(フォルス。数字の0ゼロでも可)」を入れます。
ここでは、完全一致にはFALSEを入れるんだなぁ〜〜〜って感じで、
あまり深く考えないで、取り敢えず先に進みましょう。

黄色いセルE2に入力する具体的な式は

=VLOOKUP(D2,A2:B5,2,FALSE)

と式を入れます。


では、別のキャラクターの名前を入れるので、一旦ワカメちゃんワカメちゃんを消します。

あ、エラーが出ちゃった(汗)
そんな時は、エラーの時には何も表示させないように、IFERROR関数を使って式を修正します。


式の意味は、

=IFERROR(OKな値 , エラーメッセージなど)

で、OKの値のところに、先ほどのVLOOKUP関数が入ります。

具体的な式には、

=IFERROR(VLOOKUP(D2,A2:B5,2,FALSE),”左のセルにキャラ名を入力して下さい。”)

これでエラーが消えました。
エラーメッセージに所を「”(ダブルクォーテーション)」で囲います。
では、キャラクターの所に、「丸尾くん」と入れます。

無事に作品名である「ちびまる子ちゃん」と表示されました。


これで、めでたしめでたし・・・。
なのですが、この表に追加をする場合もありますよね。
灰色の所が追加分です。

こういう時は、表の範囲を1つ1ついじったり、または、面倒だから100行ぐらい!!
=VLOOKUP(D2,A2:B100,2,FALSE)
なんてする方法もありますが、
そうなると、関数でExcelファイルが重くなるんです。
そこで、加わった行数だけ自動で範囲を動かせるようにします。

まず、その為には、この表は何行分のデータがあるのかを数えるCOUNTA関数を使います。

D列のオレンジのセルに式を入れます。
オレンジのセルの所に、

=COUNTA(A:A)

と式を入れました。
これで、A列の件数が数えられます。


表のタイトルの分があるので、1を引いておきます。

=COUNTA(A:A)-1

これにより、キャラクターの「のび太」〜「みぎわさん」まで「7行」であることが求まりました。

更に、このCOUNTA関数を使って、表の範囲を自動的に拡張致します。
ここで、VLOOKUP関数の第2引数である、表の範囲の所にOFFSET関数を使うことが出来ます。
OFFSET関数の中で、COUNTAで求めた行数を使います。

これ以降OFFSET関数が登場するので、先に下記の記事を読んでおくと、
チョット分かりやすくなるかもしれません。
OFFSETとMATCH関数でドラゴンボールを探せ!!

OFFSET関数と組み合わせます。


現在、この様な式が入っていると思います。

=IFERROR(VLOOKUP(D2,A2:B5,2,FALSE),”左のセルにキャラ名を入力して下さい。”)

この部分の表の範囲であるA2:B5の箇所をOFFSET関数に修正します。

=IFERROR(
VLOOKUP(
D2,
OFFSET(A2,0,0,COUNTA(A:A)-1,2),2,FALSE),”左のセルにキャラ名を入力して下さい。”)

となります。

この例でのOFFSET関数の中身、

OFFSET(A2 , 0 , 0 , COUNTA(A:A)-1 , 2)

は、

OFFSET(基準のセル , 下に移動分 , 横に移動分 , 高さ , 幅)

です。

ちょっとややこしいな・・・と思われた方は、OFFSET関数については、先に下記の記事を読んでおくと、少しだけ分かりやすくなるかもしれません。
OFFSETとMATCH関数でドラゴンボールを探せ!!

基準のセルから下に0、横に0移動します。つまり、移動先はA2自身です。
高さがA2から7つ分の「COUNTA(A:A)-1」で、幅は2つ分が表の範囲になり、これを自動で可変できるようにしました。

では、追加した部分が表示されることを確認します。
E2の名前に「キルア」と入力してみます。

キルアの作品名がハンターハンターと表示されました。

では、更に表を追加して、追加した「いくらちゃん」を検索値にしてみます。
作品名が「サザエさん」と表示され、COUNTAも1行増えて8行になりました。

これで、関数を使った表の範囲の可変が出来ました。


ここまでご覧の読者様の中には、
「OFFSET関数やCOUNTA関数が少々面倒ですので、もっと手軽な方法は無いの?」
と思われた方もいらっしゃるかも知れません。

もっと手っ取り早い方法は、表をテーブルに変換して、テーブル名をVLOOKUPの引数に設定してしまうという方法もございます。

まず、上の表内のどこでも良いのでお好きなセルを選択して、[Ctrl] + [T]を押します。

先頭行を見出しにして、OKを押します。
テーブル内を選択して、「テーブルタブ」を選択します。

この状態で、左側のテーブル1の所に、このテーブルの名前を付けます。

このテーブルに付ける名前は「anime_Table」にしました。

それでセルE2のVLOOKUP関数の第2引数の式を

=IFERROR
(VLOOKUP
(D2,anime_Table,2,FALSE)
,”左のセルにキャラ名を入力して下さい。”)

と修正します。

この状態で、テーブルにした範囲に新しいアニメキャラを追加します。
SPY×FAMILYの「アーニャ」にしました。

テーブルでは隣接した一番下に入力すると、自動で範囲にされるので、

無事にアーニャの作品名に「SPY×FAMILY」が表示されました。
また、COUNTAの所も9行になりました。


ここで、このanime_Tableの色使いが見づらい配色なので調整します。
テーブル内の範囲を選択して、「テーブルタブ」をクリックして、なるべく「淡色」から好きな色を選びます。


お疲れ様でした。ブレイクタイムPhotoは、

目白庭園の紅葉です。

ご精読誠にありがとうございました。

「できるYouTuber式 Excel現場の教科書(長内孝平氏)」

単行本(ソフトカバー)
Kindle版


「なんの才能もない発達障害者の声: 〜 届かない声を届けたい 〜 (障害者雇用向け)」

私、猫★シエスタの著作です。殆どが「発達障害者として働くことや障害とSNSについて」ですが、障害者雇用の事務作業で特に使用頻度の高いキーに絞ったExcelなどのショートカットキーの紹介と、演習問題も掲載しております。
Kindle版

「取りあえず事務職で働きたいから手っ取り早くExcel教えてくれ」に戻る

初めてのGoogleスプレッドシートへ



写真クリエイターとしての活動
自己紹介