この授業の進め方 マクロ言語入門第 6 回 ~ セルの操作 (1)~ 担当 : 金久保 正明 このページに何が書いてあるかの説明の後 しばらく沈黙して次のスライドに移ります 沈黙したときにいったんビデオを止め プログラムを書くなどのスライドに即した作業を行い また再生をしてください 出席確認レポートとして このビデオで初めて出て来たプログラムの命令やプロパティを 3 個以上上げ その意味とともにワードやメモ帳などに書いて WEB ポータルから提出してください ( レポートについてはまた ビデオの最後に説明します ) セルの指定 Excel のプログラムでは よく セル を扱う Excel のシートにある長方形のマスをセルという Range( B3 ) で B3 セルを指定する Range( C6:E9 ) とダブルクォテーションで囲むとその範囲 ( 右下の大きな赤枠 ) を指定する ( その領域の左上端のセル : 右下端のセルという形で指定する )( これは Range( C6, E9 ) と書いても同じ ) セルに値を代入する (1) VBA でセルに値 ( 内容 ) を代入してみよう モジュールを開いて下記のように書き込み保存する には適当な文字列を入れてよい オブジェクト.Value に = で代入している セルに値を代入する (2) 保存したファイルを開き 開発 マクロで 今の VBA プログラムを実行してみる VBA で設定した内容が書き込まれているか確認する 以下の様に表示されるはずである 飛び飛びのセルを指定する 飛び飛びのセルを指定するには Range( A1,B2,C3 ) などと指定する また 単独のセルと固まったセルの両方も以下のように指定出来る 以下のように書き換えて上書き保存し 実行してみよう これは Range( セルの範囲 ) 型のデータとして range1 という変数を用意し そこに飛び飛びのセルを代入 その値として 10 を代入したものである 1
シートを追加する Sheet2 に値を代入する 次に Excel のシートに Sheet2 を追加してみよう 以下の Sheet1 の右側にある + マークを押すと Sheet2 が作られる Sheet2 を開いた状態で 以下のように書き換えて上書き保存し 実行してみよう 今度は Sheet2 の A1 セルに HELLO と書かれたと思う シートを示すタブは 以下のようになる 以下のように書き換えて 上書き保存し 実行してみよう A1 を A3 に変えてみる アクティブシート このように Range で書き込む場所を指定すると 今開いているシート ( アクティブシート ) の指定されたセルに書き込まれる (Sheet1 を開いて A3 には何も書き込まれていない事を確認しよう また シート 1 を開いた状態で上記の同じマクロを実行し 今度はシート 1 のセルに書かれる事を確認しよう ) 開いているシートとは 図の Sheet2 のように タブが白く シートとつながっているものである アクティブシート以外に書く方法 再び Sheet2 を開いた状態で 以下のように書き換えて 上書き保存し 実行してみよう Sheet1 を確認すると A3 セルに HELLO と書き込まれている アクティブシート ( 開いているシート ) は Sheet2 なのに Sheet1 の方に書き込まれたのは Worksheets( Sheet1 ) でシートを指定したためである オブジェクトの階層とその値 エクセルのファイルを ワークブック (Workbook) と呼ぶ その中に何枚ものワークシート (Worksheet) を作る事が出来る さらに 一つのワークシートの中に多数のセル (Cell) がある これらを総称して オブジェクト と呼ぶ オブジェクトはブック シート セルの階層構造になっており ドットでつなぐことで 階層をたどるようにしてオブジェクトを指定する事が出来る これに対し セル.Value は そのセルの 値 を示している オブジェクトには 値の他 様々な属性があり それを指定する.Value などをプロパティと呼ぶ 値 ( そのオブジェクトが保持しているデータ ) 以外のプロパティとしては 例えば 縦横の大きさ 色などがある セルの選択 或るセルにカーソルを移し クリックすると 以下のように枠線が書かれる この状態を そのセルが 選択された という 選択した後 そのセルに何か書き込んだり セルのデータをコピーしたり 選択した対象に様々な操作が出来るようになる 2
Excel VBA でセルを選択する 選択する事自体を Excel VBA のプログラムで書くことが出来る まず カーソルで Sheet1 の A2 セルを選択してみよう その状態で 以下のように書き換えて 実行してみてよう セルを選択した事を示す枠が プログラムで指定した A5 セルに移動しているのが確認出来る プロパティを示す Value と違い Select の場合は そのオブジェクト ( この場合 セル ) に対してデータを代入したり 色を変えたりするのではなく ただ 選択 だけを行う アクティブシート以外のセルを選択すると なお アクティブでないワークシート内のセルを選択しようとすると次のエラーが表示される 実行時エラー '1004': Range クラスの Select メソッドが失敗しました この場合は そのシートを開いて実行するとよい ( 或いはこの後 紹介する.activate メソッドを使ってそのシートをアクティブにする事も出来る ) Cells によるセルの指定 (1) セルの指定方法として Range を用いたが もう一つ すでに紹介した Cells で指定する方法もある Range が A1 E4 などの横のアルファベット 縦の数字で指定するのに対し Cells は A=1 B=2 とみなして 縦も横も数字で指定する 以下のように変更して上書き保存し 実行してみよう G6 セルに HELLO と書き込まれる これを見て分かるように Cells の指定は ( 縦番号 横番号 ) である (G は 7 番目のアルファベット ) Cells によるセルの指定 (2) 以下のセルは Cells で指定するとき どのように書かれるか? (Cells になれるため すぐに変換できるようにしておこう ) A3 B10 C5 K20 Cells( ) Cells( ) Cells( ) Cells( ) アクティブシートを切り替える (1) 次に Sheet1 をアクティブにした状態で 以下のように書き換えて上書き保存し 実行してみよう Sheet2 の方の G6 セルに HELLO と書き込まれた アクティブシートを切り替える (2) さきほどのプログラムの説明 Worksheets( Sheet2 ).Activate で シート 2 をアクティブシートに設定したので 次の行は いきなり Cells( 或いは Range) で始まっても シート 2 の方に書き込まれるのである これは Worksheets( Sheet2 ).Cells~ のようにドットで繋げたのと同じ事になるが そのシートに対する操作が多い場合は 繋げて書くより Activate を用いた方がプログラムは簡単に ( 短く ) 書ける 3
セルに式を代入する Formula プロパティ セルには数字や文字列などの他 式を代入する事も出来る ( 以下は例 ) あらかじめ アクティブシートの A2 セルに 5 A3 セルに 3 を入れておく このあと以下の様に書いて実行すると A4 セルには 10 が代入される事を確認しよう セルに数式を設定したり セルに設定されている数式を取得するには Range オブジェクトの Formula プロパティを使う場合もある 以下は A1~A3 の合計 (sum) を A4 セルに設定したものである シートの A1~A3 に適当な数字を設定した後 この一行からなるブログラムを作り A4 シートに合計が書き込まれる事を確認しよう セルの書式設定 ( フォント指定 )(1) アクティブシートを全部クリアした後 以下のようにプログラムを変更して上書き保存し 実行してみよう ここでは A1 セルに 売上集計表 と入れ そのフォント ( 字体 ) を HGP 明朝 E に サイズを 16( ポイント ) に設定している セルの書式設定 ( フォント指定 )(2) Excel VBA では セルを選択して右クリックして出てくる セルの書式設定 の フォント タブに表示される フォント名 に並ぶものは指定できるので いろいろと試してみよう ( 上記プログラムを書き換えて ゴシック体 ポップ体が表示できる事を確認しよう ) その他のフォント指定 Fontのプロパティのうち 以下のものは Trueを代入すれば設定 Falseを代入すれば解除となる Range( A1 ).Font.Bold = True( またはFalse) は太字の設定 Range( A1 ).Font.Italic = True( またはFalse) はイタリック ( 斜体 ) の設定 Range( A1 ).Font.Underline = True( またはFalse) は下線の設定 さっきのマクロにこれらを追加し A1セルの文字列が太字 イタリックになるか 下線が引かれるかなどを試して見よう また Range( A1 ).Font.ThemeColor = xlthemecoloraccent6 などとすると 文字に色を設定出来る セルの高さと幅を変える (1) 以下のように変更して上書き保存し 実行してみよう まず A1 セルの.Value プロパティで シートに Excel VBA という文字列を書き込んでいる 次に.RowHeight プロパティが出てくるが これはそのセルの高さを指定する ここに 20 を代入 つまり高さを 20 ポイントとしている 次の.ColumnWidth プロパティは同じくセルの幅を指定する ここも 20 ポイントとしている 実行すると A 列のセルが一斉に 20 ポイントに変化する 4
セルの高さと幅を変える (2) セルの高さと幅を変える (3) 右のように A 列の部分にカーソルを置いて右クリック 列の幅を押して 本当に 20 ポイントになっているか確認してみよう また 高さが 20 ポイントになったかの確認は 同様に 左端の 1 のところにカーソルを置いて右クリック 出て来た選択メニューから 行の高さを選べば確認出来る これまで Range で指定したが Cells でセルを指定しても これらのプロパティは同様に使用出来る なお エクセルを普通に開いた時のセルの大きさ ( 標準 ) では 行高は 13.5 ポイント 列幅は 8.38 ポイントとなっている Range( A1:C3 ).RowHeight = 30 などとエリアを指定すれば そこ全体に設定がかかる マクロで様々な行高や列幅の調整をしてみよう セルの高さと幅の自動調整 入力されたデータの長さなどに合わせて自動調整してみる Range( A2:C4 ).Columns.AutoFit と書くと この範囲の 列幅 (Columns は列 ) が自動調整される Range( A2:C4 ).Rows.AutoFit と書くと この範囲の 行高 (Rows は行 ) が自動調整される Range の指定をせずに Columns( A:C ).AutoFit とすると シート全体の A 列 B 列 C 列の幅が自動調整される ( マクロで列幅 行高の自動調整をしてみよう 横幅は最も長いものに合わせる 例えば A1~A3 の範囲に文字数のかなり違うデータを入れてみて.Columns.AutoFit を適用し 最も長い文字列に合わせた列幅になるか確認してみよう ) 出席確認レポートについて 今日のビデオで初めて出て来た Excel VBA プログラムの命令 プロパティを挙げ その意味を以下の様に記述してください ( 例 )Range( A1 ).Font.Bold = True A1 セルの文字を太字にする設定 本日の内容から 3 個以上を挙げてください 箇条書きで ワード メモ帳などに記述 学籍番号 氏名も書いて WEB ポータルから 本日より一週間以内に送って貰えば出席とします それでは マクロ言語入門第 6 回を終了します 5