第8回VBA活用講座は4月25日(木)、13名の参加のもと大みか拠点で開催しました。今回は、教本の日経BP社発行の「残業ゼロ」の決め手!Excel VBA実践テクニック」のChapter7の前半について、勉強しました。
  講座の内容梗概は下記のとおりです。

Chapter7 関数の技を極める

 第1回 TEXT関数で数値や日付を自在に変換

◆=TEXT(値,表示形式)関数は、「値」を「表示形式」で表した「文字列」にする。
◆日付データは「シリアル値」で、 1990/1/1を1として1日ずつ増えていく整数である。セルの書式設定で表示形式を設定。
◆日付データを参照して文章を作成する場合は、「TEXT」関数を使う(=TEXT(日付データのセル,”yyyy年m月 d日
  )"&文章 or =TEXT(日付データのセル,"yyyy年m月 d日文章"))。
◆「10」を日付データにして、月を英語表示にするには、=TEXT(10のセル&”/1”,”mmmm")とすればよい。
◆文字列の西暦の年を和暦の年に変換するには、=TEXT(西暦年のセル&"1月",ggge年)、和暦の年を西暦の年に変換す
  るには、=TEXT(和暦の年のセル&"1月1日",yyyy年)とする。
◆6桁の数値を日付に変換するには、=TEXT(6桁のセル,"00!:00!:00")*1、6桁の数値を時刻に変換するには、=TEXT(6桁
  のセル,"00!:00!:00")*1の後、表記形式で「時刻」を選択して表示形式を選択すればよい。
◆生年月日から本年の曜日を求めるには、=TEXT(TEXT(生年月日のセル,"m/d"),"aaaa")となる。。
◆引数の表示形式で条件判定もできる。例えば、=TEXT(B4-C4,”勝ち;負け;引き分け)や、=TEXT(B4-C4,”!3;!0;!1")

 第2回 INDEX関数で表中のデータを取り出す

◆=INDEX(範囲,行番号,列番号,領域番号)関数は、「範囲」内で指定した位置(行と列番)にあるセルを参照する。
◆「範囲」には複数の長方形の領域を指定でき、「領域番号」で対象の領域を指定する。例;
  =INDEX((C5:E9,C13:E19),H4,H5,H3)。「範囲」が1列(行)のセル範囲の場合、列番号(行番号)の指定は省略できる。
◆=VLOOKUP(検査値,範囲,列番号,検査方法)関数は、表からデータを取り出す定番であるが、検索する列は表の左端な
  ので、検索する列よりも左側にあるデータを取り出すことができない。このような場合、INDEX関数とMATCH関数を使う。
◆=MATCH(検査値,検査範囲,照合の種類)は、検査範囲内での検査値の位置を求める。照合の種類は1,0,-1から選ぶが、
  1は検査値以下の最大値で検索、0は検査値に一致する値のみ検索、-1は検査値以上の最小値で検索する。
◆具体例として、INDEX(検索範囲,MATCH() ,MATCH())となり、MATCH()で行や列を検索しして利用する。
◆VLOOKUP関数の引数「検査方法」を「TRUE」を指定すると、「範囲」の左端列で検査値以下の最大値が求められる。同じ
  ことがINDEX関数とMATCH関数の組み合わせで求めることができる。
◆「入力規則」を利用して、「元の値」にINDEXとMATCH関数で設定することで、分類毎のリストを表示させることができる。

 第3回 LOOKUP関数で「配列定数」を使いこなす

◆LOOKUP関数は2種類あり、検査値以下の最大値を取り出す。その1つはベクトル形式=LOOKUP(検査値,検査範囲,対
  応範囲)で、検査範囲で検査値を検索し対応する値を返すもの、もう1つは配列形式で=LOOKUP(検査値,配列)で、配列
  の先頭行(列)で検査値を検索し、対応する値を返すのもである。
◆数値データの大きさによって、異なる値を表示させたい場合は、IF関数を使用するが、3段階評価の場合はIF関数の入れ
  子となり複雑となる。Excel2016ではIFS関数が使用でき、複数の評価も簡単に設定できるようになったが、それでも複雑。
    3段階評価のIF関数の例   =IF(B4>=400,"A",IF(B4>=350,"B","C"))
    4段階評価のIFS関数の例  =IFS(B4>=400、”A”,B4>=350,"B",B4>=300,"C",B4>=0,"D")
◆=IFS(論理テスト1,値が真の場合は1,論理テスト2,値が真の場合は2…)関数は、最初に真となった論理テストに対応する
  値を返す。
◆数値の大きさで分けるのであればLOOKUP関数が簡単。例;=LOOKUP(B4,#E#4:#F#8)。#E#4:#F#8は配列で、配列の
  右端列にあるセルの値を返す。この時の配列の列の値は必ず昇順(小さい順)に並べておく必要がある。
◆VLOOKUP関数でも、検査方法を「TRUE」にすれば可能である。 例;=VLOOKUP(B4,#E#4:#F#8,2,TRUE)
  LOOKUP関数を使った方が数式は簡単である。「TRUE」は検査値以下の最大値を返す。
◆LOOKUP関数で参照している別表をワークシートに置くのではなく、「配列定数」を使って表を数式の中に埋め込むことが
  可能である。例;LOOKUP(B4,{0,"D";300,"C";350,"B";400,"A"})  絶対参照を選択し、F9キーで簡単に変換できる。
◆LOOKUP関数で検索できるのは数値だけでなく、昇順で並んでいるデータであれば、文字列のデータも検索が可能。
◆LOOKUP関数のベクトル形式では、検査対象となる「検査範囲」とデータを取り出す「対応範囲」をそれぞれ指定できる。
    例;LOOKUP(F4,A4:A6,D4:D6) F4が検査値 A4;A6が「検査範囲」、D4:D6がデータを取り出す「対応範囲」
◆=IFERROR(値,エラーの場合の値)関数を使って、エラーの場合の表示を設定できる。
    例;IFERROR(LOOKUP(D4,B4:B9,A4:A9),開始前) LOOKUP関数で解がない場合は、「開始前」が表示される。
◆日付や時刻のデータは「シリアル値」という数値データなので、昇順に並んでいれば、LOOKUP関数の検索対象となる。

講師・文責 世話人 安田 出

1904vba

第8回 VBA活用講座に参加の皆さん

(戻り)