次 第 1 部 1 はじめに... 1 1.1 マクロとは... 1 1.2 Visual Basic... 1 2 プログラミング... 5 2.1 エクセルのファイル 構 造... 5 2.2 データ 構 造... 5 2.3 アルゴリズム... 7 3 基 本 的 な 処 理... 11 3.



Similar documents
Microsoft Word - 第3章.doc

(Microsoft Word - Excel\211\236\227p2\217\315.docx)

計算式の取り扱い

<4D F736F F D C97F195CF8AB DEC90E096BE8F912091E6312E313294C52E646F63>

ワープロソフトウェア

医 療 費 自 己 負 担 額 支 払 明 細 書 入 力 シート - 目 次 - < 第 1 章 > 共 通 事 項 説 明 医 療 費 自 己 負 担 額 支 払 明 細 書 入 力 シート 目 次 1.1 本 システムの 注 意 点 入 力 項 目 について 基 本 情

2016 年 度 情 報 リテラシー 三 科 目 合 計 の 算 出 関 数 を 用 いて 各 教 科 の 平 均 点 と 最 高 点 を 求 めることにする この2つの 計 算 は [ホーム]タブのコマ ンドにも 用 意 されているが 今 回 は 関 数 として 作 成 する まず 表 に 三 科

MetaMoJi ClassRoom/ゼミナール 授業実施ガイド

縦 計 横 計 をSUM 関 数 で 一 度 に 計 算 する 縦 横 の 合 計 を 表 示 するセルが 計 算 対 象 となる セルと 隣 接 している 場 合 は 一 度 に 合 計 を 求 め ることができます 1 計 算 対 象 となるセル 範 囲 と 合 計 を 表 示 する セル 範

(Microsoft Word - Excel\211\236\227p7\217\315.docx)

KINGSOFT Office 2016 動 作 環 境 対 応 日 本 語 版 版 共 通 利 用 上 記 動 作 以 上 以 上 空 容 量 以 上 他 接 続 環 境 推 奨 必 要 2

ことばを覚える

<4D F736F F D E835A838B837D834E838D8CA48F4389F0939A95D22E646F6378>

R4財務対応障害一覧

1.2. ご 利 用 環 境 推 奨 ブラウザ Internet Explorer Google Chrome(バージョン 32 時 点 で 動 作 確 認 済 み) Mozilla Firefox(バージョン 26 時 点 で 動 作 確 認 済 み) Safari 7

Microsݯft Word - 91 forܠ2009November.docx

(Microsoft Word - Excel\223\374\226\3452\217\ docx)

「給与・年金の方」からの確定申告書作成編

返還同意書作成支援 操作説明書

2016 年 度 情 報 リテラシー 次 に Excel のメニューから[ 挿 入 ]タブをクリックし 表 示 されたメニュー 内 の[グラフ]にある[ 折 れ 線 グラフ]のボタンをクリックする するとサブメニューが 表 示 されるので 左 上 の[ 折 れ 線 ]を 選 択 する [ 挿 入 ]

Ⅰ 校 外 における 研 修 の 留 意 点 1 校 外 における 研 修 のコマ 数 の 考 え ア) 午 前 午 後 の 講 座 は 0.5 日 (0.5 コマ) イ) 全 日 の 講 座 は 1.0 日 (1.0 コマ) 2 校 外 における 研 修 として 選 択 できない 講 座 研 修

Ⅰ. 各 種 文 書 作 成 メニュー 項 目 説 明 各 種 文 書 作 成 メニューでは 共 通 で 使 える 便 利 な 機 能 がございます テンプレート 機 能 引 用 文 を 貼 り 付 けることができます 複 写 (コピー) 機 能 作 成 した 帳 票 をコピー 編 集 することがで


「1 所得税及び復興特別所得税の確定申告書データをお持ちの方」からの更正の請求書・修正申告書作成編

地域ポータルサイト「こむねっと ひろしま」

ボタンをクリックします ( 警 告 が 表 示 されない 場 合 もあります ) 9 画 面 に Win SFX32M V と 表 示 されますので 保 存 する 箇 所 を 選 択 し OK をクリックしてください 選 択 した 箇 所 にインストールしたフォルダが 保 存 され

別冊資料-11

5 セル B9 に=B8+1と 入 力 半 角 入 力 です 以 下 同 様 セル B9 をクリックし=(イコール) 入 力 後 セル B8 をクリックしても B8と 入 力 出 来 ます 6 B9 をクリック カーソルをセルの 左 下 に 持 って 行 き+ 記 号 になった 状 態 で クリック

情報処理技能検定試験 表計算2級 手順書

第1回

(Microsoft Word - Excel\223\374\226\3456\217\ docx)

TIPS - 棚 割 りを 開 始 するまで Liteを 起 動 し 企 業 情 報 の 追 加 を 行 い 棚 割 を 行 う 企 業 の 追 加 をして 下 さい 企 業 情 報 の 追 加 時 に エラーメッセージが 表 示 された 場 合 別 途 TIPS トラブルが 発 生 した 場 合

Microsoft Office Excel2007(NO.2エクセル初級後編)

目 次 Ⅰ 集 計 支 援 ツールの 準 備 に 関 するQ&A 1 H27 集 計 支 援 ツール.zip ファイルを 展 開 して 作 成 した,1 ~4のフォルダはどのように 利 用 すればよいか? Ⅱ 必 要 なファイルの 準 備 に 関 するQ&A 1 解 答 回 答 状 況 ファイルや,

決 算 時 の 流 れ-1 1 年 間 の 仕 訳 入 力 が 終 了 したら 以 下 の 手 順 で 決 算 書 を 作 成 します Step1 精 算 表 を 印 刷 する 1.[F2 入 力 ]タブより 合 計 表 を 選 択 し 月 度 の 指 定 で 期 首 ~12ヶ 月 目 を 指 定

2ステータスバーのアイコンを 文 字 表 示 にする ステータスバーを 右 クリックし アイコンを 使 用 のチェックをはずす 文 字 表 示 になる 操 作 時 は 適 宜 オン オフを 変 更 するが まずは 直 行 モード OSNAP 線 の 太 さのみオンとし 他 はオフにしておく 2. 製

1. 前 払 式 支 払 手 段 サーバ 型 の 前 払 式 支 払 手 段 に 関 する 利 用 者 保 護 等 発 行 者 があらかじめ 利 用 者 から 資 金 を 受 け 取 り 財 サービスを 受 ける 際 の 支 払 手 段 として 前 払 式 支 払 手 段 が 発 行 される 場 合

(Microsoft Word - \215u\213`\203m\201[\203g doc)

治 験 実 施 管 理 システム NMGCP 向 け Excel 形 式 プロトコール 作 成 手 順 書 V4.0.3 対 応 版 第 1 版 株 式 会 社 富 士 通 アドバンストエンジニアリング All Rights Reserved,Copyright 株 式 会 社 富 士 通 アドバン

5 振 込 依 頼 書 の 作 成 方 法 ()ツールの 起 動 コピーまたはダウンロードしたツールをダブルクリックして 開 いてください (ツール 起 動 の 際 マクロを 有 効 にしてください ) ダブルクリック 後 以 下 のメッセージが 出 力 されますので 読 み 取 り 専 用 ボタン

事前チェック提出用現況報告書作成ツール入力マニュアル(法人用)

1. 表 から 値 を 抽 出 する 説 明 1.1. 表 から 値 を 抽 出 するための 関 数 について 説 明 します LOOKUP VLOOKUP HLOOKUP 関 数 は 検 索 値 に 対 応 する 値 を 検 索 値 を 含 む 一 覧 表 から 抽 出 し てくれる 関 数 です

募集新株予約権(有償ストック・オプション)の発行に関するお知らせ

< 目 次 > 8. 雇 用 保 険 高 年 齢 雇 用 継 続 給 付 27 ( 育 児 休 業 給 付 介 護 休 業 給 付 ) 8.1 高 年 齢 雇 用 継 続 給 付 画 面 のマイナンバー 設 定 高 年 齢 雇 用 継 続 給 付 の 電 子 申 請 高

SXF 仕 様 実 装 規 約 版 ( 幾 何 検 定 編 ) 新 旧 対 照 表 2013/3/26 文 言 変 更 p.12(1. 基 本 事 項 ) (5)SXF 入 出 力 バージョン Ver.2 形 式 と Ver.3.0 形 式 および Ver.3.1 形 式 の 入 出 力 機 能 を

Microsoft Word - P doc

Microsoft Word - 203MSWord2013

目 次 1. 大 学 情 報 データベースシステムの 使 用 方 法 について EXCEL 一 括 登 録 EXCEL ダウンロード 検 索 条 件 の 指 定 プレビュー EXCEL ダウンロード(データ 抽 出 あ

改 定 履 歴 改 訂 日 改 訂 理 由 及 び 内 容 承 認 者 確 認 者 改 訂 者 05/8/7 新 版 発 行 05/0/5 推 奨 動 作 環 境 を 追 記

PowerPoint プレゼンテーション

2016 年 度 情 報 リテラシー 変 更 された 状 態 同 様 に 価 格 のセルを 書 式 設 定 する 場 合 は 金 額 のセルをすべて 選 択 し [ 書 式 ]のプルダウンメニューか ら[ 会 計 ]を 選 択 する すると が 追 加 され 金 額 としての 書 式 が 設 定 さ

<4D F736F F D2090C389AA8CA72D92F18F6F2D D F ED28CFC82AF91808DEC837D836A B E838B A815B816A2E646F6378>

Microsoft Word - word_05.docx

財団法人○○会における最初の評議員の選任方法(案)

<4D F736F F D208DEC90AC837D836A B81698F4390B394C5816A2E646F63>

_責)Wordトレ2-1章_斉

1

Microsoft PowerPoint - 医用工学概論実習3.ppt [互換モード]

4 応 募 者 向 けメニュー 画 面 が 表 示 されます 応 募 者 向 けメニュー 画 面 で [ 交 付 内 定 時 の 手 続 を 行 う] [ 交 付 決 定 後 の 手 続 を 行 う]をクリックします 10

富士山チェックリスト

目 次 1. 積 算 内 訳 書 に 関 する 留 意 事 項 1 ページ 2. 積 算 内 訳 書 のダウンロード 3 ページ 3. 積 算 内 訳 書 の 作 成 (Excel 2003の 場 合 ) 6 ページ 4. 積 算 内 訳 書 の 作 成 (Excel 2007の 場 合 ) 13

Microsoft Word - 03accessデータベース演習レジメ.doc

Ⅰ 調 査 の 概 要 1 目 的 義 務 教 育 の 機 会 均 等 その 水 準 の 維 持 向 上 の 観 点 から 的 な 児 童 生 徒 の 学 力 や 学 習 状 況 を 把 握 分 析 し 教 育 施 策 の 成 果 課 題 を 検 証 し その 改 善 を 図 るもに 学 校 におけ

(Microsoft Word - \215u\213`\203m\201[\203g doc)

<4D F736F F D203193FA8AD45F95CA8E86325F89898F4B315F94F093EF8AA98D AD97DF914F82CC8FEE95F182CC8EFB8F C28E8B89BB2E646F63>

<4D F736F F D20819C B78AFA95DB91538C7689E68DEC90AC289

( 別 紙 ) 以 下 法 とあるのは 改 正 法 第 5 条 の 規 定 による 改 正 後 の 健 康 保 険 法 を 指 す ( 施 行 期 日 は 平 成 28 年 4 月 1 日 ) 1. 標 準 報 酬 月 額 の 等 級 区 分 の 追 加 について 問 1 法 改 正 により 追 加

の と す る (1) 防 犯 カ メ ラ を 購 入 し 設 置 ( 新 設 又 は 増 設 に 限 る ) す る こ と (2) 設 置 す る 防 犯 カ メ ラ は 新 設 又 は 既 設 の 録 画 機 と 接 続 す る こ と た だ し 録 画 機 能 付 防 犯 カ メ ラ は

<4D F736F F D AC90D1955D92E CC82CC895E DD8C D2816A2E646F63>

目 次 1.はじめに 書 式 の 説 明 表 紙 スケジュール 組 入 れ 基 準 併 用 禁 止 薬 併 用 注 意 薬 同 種 同 効 薬 医 師 モニタリング..

答申第585号

Microsoft PowerPoint - 04_H26material_practice_No3-3.pptx

研究者情報データベース

Ngraph for Windowsの使用法

1級 ワンポイント

Microsoft PowerPoint - jouhou11vista.ppt [互換モード]

目 次 遺 失 物 管 理 プログラム 利 用 者 マニュアル 1. 動 作 条 件 遺 失 物 管 理 プログラムのインストール 運 用 の 流 れ 起 動 方 法 操 作 方 法 について 基 本 的 な 操

<4D F736F F D B68F918DEC90AC89898F4B899E977095D2816A2E646F63>

Word 003 スキルブック 06 - オブジェクトの 利 用 0.Word で 作 る 表 : 行 幅 を 最 小 値 より 小 さく 設 定 する 3 表 の 左 右 のサイズを 適 宜 調 整 します Word で 表 を 作 成 するとき, 列 幅, 行 幅 ともに 基 本 的 に 自 由

Microsoft Word - WBT(PP応用編).docx

入 札 参 加 資 格 申 請 システム 操 作 マニュアル 入 札 参 加 資 格 の 資 格 有 効 ( 変 更 ) 日 を 迎 えると 追 加 届 の 登 録 ができるようになります ( 入 札 参 加 資 格 申 請 の 定 時 受 付 では いずれかの 申 請 先 団 体 から 入 札 参

Microsoft Word - 教科書VBA_第1章2013_.doc

(Microsoft Word - \203A \225\345\217W\227v\227\314 .doc)

目 次 1. 論 理 関 数 IF IF の 概 要 論 理 式 の 種 類 等 号 不 等 号 具 体 的 な 使 い 方 ネスト 複 数 の 条 件 を 記 述...

ピボットテーブルによるデータ 分 析 EXCELのリスト(シート 上 の 表 形 式 のデータ)から 縦 横 の 項 目 を 設 定 して 新 しい 表 ( 集 計 表 )を 作 ることができます この 表 を ピボットテーブル と 呼 びますが 集 計 を 自 動 で 行 う ことができるので 学

私立大学等研究設備整備費等補助金(私立大学等

東近江行政組合職員の育児休業等に関する条例

DN6(R04).vin

目 次 1.ログイン 方 法 P2 2.ログアウト 方 法 P3 3. 基 本 設 定 変 更 サイトネーム スローガンの 設 定 P10~11 カラーバリエーションの 選 択 P12 メニュースタイル 色 の 設 定 P12 4.トップページの 画 像 編 集 画 像 の 変 更 P13~14 T

( 別 途 調 査 様 式 1) 減 損 損 失 を 認 識 するに 至 った 経 緯 等 1 列 2 列 3 列 4 列 5 列 6 列 7 列 8 列 9 列 10 列 11 列 12 列 13 列 14 列 15 列 16 列 17 列 18 列 19 列 20 列 21 列 22 列 固 定

<91808DEC837D836A B5F8F488E528A6D E786C7378>

<4D F736F F D2090BF8B818AC7979D8B40945C91808DEC837D836A B2E646F63>

練 習 をはじめる 前 に... 3 試 験 前 にすること... 4 受 験 番 号 名 前 の 入 力... 4 試 験 本 番... 4 注 意 すること... 4 試 験 後 にすること... 4 解 答 の 印 刷... 4 練 習 問 題... 5 処 理 手 順... 6 日 付 時

01_07_01 データのインポート_エクスポート_1

<4D F736F F D208ED089EF95DB8CAF89C193FC8FF38BB CC8EC091D492B28DB88C8B89CA82C982C282A282C42E646F63>

エクセルを 起 動 します [スタート]をクリックします [すべてのプログラム]をポイントします [Microsoft Office]を クリックします [Microsoft Office Excel 2007]をクリックします 1 [Office ボタン]をクリックして [ 開 く]を 選 択 し

目 次 第 1 章 は じ め に... 3 第 2 章 基 本 的 な キ ー 操 作... 4 第 3 章 メ ニ ュ ー 画 面... 6 第 4 章 入 荷 業 務... 7 第 5 章 出 荷 業 務... 9 第 6 章 商 品 照 会...11 第 7 章 棚 卸 業 務...12 第

<4D F736F F D C82CC8AEE91625F87542D F9182AB8AB782A68CE32E646F63>

VLOOKUP関数,IF関数

<4D F736F F D2091E F18CB48D C481698E7B90DD8F9590AC89DB816A2E646F63>

Transcription:

ICT 活 用 研 修 エクセルマクロ 入 門 栃 木 県 総 合 教 育 センター 研 究 調 査 部 情 報 教 育 支 援 チーム - 1 -

次 第 1 部 1 はじめに... 1 1.1 マクロとは... 1 1.2 Visual Basic... 1 2 プログラミング... 5 2.1 エクセルのファイル 構 造... 5 2.2 データ 構 造... 5 2.3 アルゴリズム... 7 3 基 本 的 な 処 理... 11 3.1 メッセージボックスの 表 示... 11 3.2 セルの 操 作... 12 3.3 マクロの 保 存... 15 3.4 繰 り 返 し... 16 3.5 条 件 分 岐... 21 第 2 部 4 並 べ 替 えとボタンの 配 置... 24 4.1 並 べ 替 え... 24 4.2 ボタンの 配 置... 25 4.3 デバッグ... 26 4.4 関 数 と 引 数... 27 5 印 刷... 29 5.1 印 刷 のための 基 本 操 作... 29 5.2 連 続 印 刷... 30 5.3 印 刷 ダイアログの 表 示... 32 6 エクセルシートの 取 り 込 み... 34 6.1 ディレクトリの 操 作... 34 6.2 シートの 取 り 込 み... 35 6.3 基 礎 データ 表 の 作 成... 37 7 ユーザーフォームの 作 成... 39 7.1 ユーザーフォームとは... 39 7.2 ユーザーフォームの 作 成... 39 8 その 他 の 例... 46 8.1 問 題 と 解 答 のシャッフル... 46 8.2 DLL の 読 み 込 み... 49 8.3 グラフィック 操 作... 51 8.4 ワードとパワーポイントのマクロ... 53 8.5 その 他 のプログラム... 59 9 資 料 編... 61 参 考 資 料 Microsoft Excel ヘルプ Microsoft Visual Studioホームページ http://msdn.microsoft.com/ja-jp/vstudio/ 猫 とエクセル http://www.geocities.co.jp/siliconvalley-cupertino/8748/ エクセルVBAによるクラスモジュールを 利 用 しよう http://www.geocities.jp/tomtomf/ BASIC MZ-80 SERIES SHARP 株 式 会 社 - 2 -

第 1 部 1 はじめに 1.1 マクロとは 従 来 マクロ とは プログラム 中 の 文 字 列 を あらかじめ 定 義 された 規 則 に 従 って 置 換 する ものであり C 言 語 やアセンブラ 言 語 などで 用 いられていた これらの 言 語 では 何 度 も 利 用 さ れるような 一 連 の 処 理 であっても 多 くの 記 述 が 必 要 であり これをマクロとして 複 数 の 命 令 を まとめることによって 簡 略 に 記 述 できるようにしたり プログラムを 分 かりやすくしたりして いた これらのことから 現 在 は 一 連 の 処 理 をまとめたもの を マクロ と 呼 ぶようになっ ている エクセルにおける マクロ とは このように エクセルの 一 連 の 処 理 をまとめて 自 動 化 する 機 能 のことであり Visual BASIC というプログラミング 言 語 によって 記 述 される 1.2 Visual Basic Visual Basic( 以 下 ブイビー)は マイクロソフト V B 社 によって 作 られた 言 語 であり BASIC 1 言 語 を 基 にしたプログラミング 言 語 である C 言 語 を 基 にした Visual C などと 同 様 に 本 来 の VB は ア プリケーション プログラムを 作 成 するための 言 語 環 境 であり 実 際 に Microsoft Visual Basic として 販 売 されていた 現 在 も Microsoft Visual Studio 2013 の 一 部 として 販 売 されており また 無 償 版 である Microsoft Visual Studio Express 2013 は マイクロソフトのホームペー ジからダウンロード 2 できる アプリケーションを 作 成 する 場 合 は これらの 環 境 を 利 用 すること になる VB は バージョンや 環 境 によって 種 類 があり 上 記 のようなアプリケーションを 作 成 するため ドットネット のバージョンとして 1998 年 に 発 売 された VB 6.0 やその 後 の VB.NET VB 2005(2005 版 から.NET という 名 前 は 付 かなくなった) VB 2010 最 新 版 の VB 2013 などがある 資 料 1 一 方 マクロを 作 成 するための VB は Visual Basic for Application (VBA)と 呼 ばれる 3 また VB はホームページの 記 述 等 でも 利 用 され この VB は Visual Basic Script (VB Script) と 呼 ばれている いずれも VB の 簡 易 版 として 実 装 されており 特 に VBA は Excel をはじめ Word PowerPoint Access などでも 利 用 され Excel や Word などのアプリケーションが 異 なっても ほ ぼ 同 様 の 記 述 方 法 でプログラミングが 可 能 である(8.4 参 照 ) 1.2.1 ヘルプの 利 用 VBのヘルプは キーボードのF1 キーを 押 すことによって 閲 覧 可 能 である( 図 1) このヘルプには エクセルで 使 われるマクロ 言 語 の 説 明 をはじめ プログラミングのヒントなど 非 常 に 参 考 になる 内 容 となっている また マクロ 中 で 使 用 されている 特 定 のキーワード 上 にカーソルを 置 いたうえで F1 キーを 押 すこと によって そのキーワードに 関 す るヘルプを 閲 覧 することもできる 本 研 修 でも 指 示 がなくても 積 極 的 に 参 照 していただきたい 図 1 VB のヘルプ 画 面 1 言 語 としての BASIC は Beginner's All-purpose Symbolic Instruction Code ( 初 心 者 用 のあらゆる 目 的 に 使 える 記 号 命 令 コー ド)の 略 であり すべて 大 文 字 で 記 述 される 2 30 日 以 上 利 用 する 場 合 は 無 償 のユーザ 登 録 が 必 要 3 似 たような 言 葉 で VBE という 言 葉 も 用 いられるが これは Visual Basic Editor すなわち 後 ほど 述 べる Microsoft Visual Basic のエディタ( 編 集 ) 環 境 を 示 す - 1 -

1.2.2 開 発 環 境 の 起 動 (1) 開 発 タブをクリックし Visual Basic をクリックする( 開 発 タブが 表 示 されてい ない 場 合 は 資 料 2 の 手 順 にて 表 示 することができる) (2) Microsoft Visual Basic エディタ(VBE: Visual Basic Editor)が 開 く 1 2 3 4 5 初 期 状 態 で 表 示 されるウィンドウは 状 態 によって 異 なります 表 示 されていない 場 合 は メ ニューの 表 示 から 開 くことができます 1プロジェクトエクスプローラ(Project Explorer) 現 在 マクロを 作 成 しているブックの 情 報 が 表 示 される 2プロパティウィンドウ(Property Window) 現 在 選 択 されているプロジェクトやシートのプロパティ( 情 報 )が 表 示 される 3コードウィンドウ(Code Window) マクロプログラムのコードが 表 示 される 4ウォッチウィンドウ(Watch Window) 実 行 中 のマクロで 使 用 されている 変 数 の 値 を 監 視 する 5イミディエイト ウィンドウ(Immediate Window) 命 令 を 直 接 実 行 するためのウィンドウである 1.2.3 イミディエイト ウィンドウ イミディエイト ウィンドウを 利 用 することによって 簡 単 な 命 令 を 実 行 することができる イ ミディエイト ウィンドウは Ctrl + G によって 表 示 / 非 表 示 が 切 り 替 えられる ここでは このウィンドウを 利 用 し VB の 基 礎 となる 操 作 を 試 してみる なお イミディエイト ウィンド ウに 入 力 した 内 容 は 保 存 されないので 注 意 が 必 要 である 例 1 イミディエイト ウィンドウの 任 意 の 場 所 でクリックしてカーソルを 置 き 以 下 のように 入 力 し Enterを 押 す 何 が 表 示 されたか? msgbox "こんにちは 世 界 " msgbox と " は 半 角 こんにちは 世 界 は 全 角 で 入 力 する - 2 -

例 2 以 下 のようにすべて 半 角 で 入 力 し Enterを 押 すと 何 が 表 示 されるか?? 3+5? は print という BASIC の 命 令 の 省 略 形 で print 3+5 と 入 力 しても 同 様 の 結 果 になる print 命 令 は そのあとにあるものを 処 理 して 表 示 する 例 3 以 下 のように 入 力 し Enterを 押 すと 何 が 表 示 されるか? 例 2との 違 いは 何 か?? "3+5" " (double quotation:ダブル クォーテーション)で 文 字 や 数 字 をくくると それら の 文 字 は 文 字 列 として 認 識 され 処 理 される 文 字 列 には 0 文 字 や1 文 字 の 場 合 も 含 まれる 特 に 0~9は 値 としての 数 値 と 文 字 列 としての 数 字 で 分 けて 考 える 必 要 がある 例 4 以 下 のように 入 力 し Enterを 押 すと 何 が 表 示 されるか? a=3 :? a : (colon:コロン)をセパレータとして 用 いることによって 1 行 に2つ 以 上 の 命 令 を 記 述 すること(マルチ ステートメント)が 可 能 である この 場 合 は a=3 という 命 令 と? a という 命 令 の2つをコロンでつないでいます 資 料 3 a ( 変 数 )につ いては 後 述 する 例 5 以 下 のように 入 力 し Enterを 押 すと 何 が 表 示 されるか? a=4:? "a" 例 6 以 下 のように 入 力 し Enterを 押 すと 何 が 表 示 されるか?? ActiveWorkbook.Name ActiveWorkbook.Name は 現 在 のエクセルファイルの 名 前 を 保 持 するプロパティ であり?によって そのファイル 名 を 表 示 することができる 名 前 を 付 けて 保 存 等 を 行 ってない 場 合 には 初 期 設 定 の Book1 がファイル 名 となる なお すべて 小 文 字 で 入 力 しても 同 様 の 結 果 となる - 3 -

例 7 以 下 のように 入 力 し Enterを 押 すと 何 が 表 示 されるか?? 2 * 2 + 2 / 2 * (2 + 2) 計 算 は 式 の 優 先 順 位 を 判 定 して 計 算 する 例 8 以 下 のように 入 力 し Enterを 押 すと 何 が 表 示 されるか?? sqr(2) 平 方 根 を 求 める 場 合 Excel では SQRT 関 数 を 使 うが VB では SQR 関 数 を 使 う この ように 同 じ 動 作 をする 場 合 でも Excel の 関 数 名 と VB の 関 数 名 が 異 なる 場 合 がある ので 注 意 が 必 要 である 例 9 あなたは 今 年 の 元 旦 公 衆 電 話 を 掛 けるために 友 達 から10 円 借 りた 10 円 なら ばすぐに 返 せると 思 ったあなたは 友 達 と 1 日 1 割 の 複 利 で 返 すとの 約 束 をした 次 の 年 の 元 旦 にこのことを 思 い 出 したあなたは 友 達 にいくら 返 せばいいか? a=10 : for i=1 to 365: a = a + a*0.1 : next :? a 1.2E+3 のような E を 用 いた 表 記 は 指 数 表 示 と 呼 ばれる 1.2E+3 の 場 合 は 1.2 10 +3 (=1.2 1000=1200 すなわち 小 数 点 を 右 に3つ 移 動 する)を 意 味 する 上 記 の 式 は 5つの 命 令 からなり 10 が 最 初 に 借 りた 金 額 365 が1 年 の 日 数 である a=a+a*0.1 で 1 割 (0.1)の 金 額 を 複 利 になるように 加 算 している 最 後 の? a で 答 えを 表 示 している なお このような 複 利 計 算 は Excel 関 数 に 財 務 関 数 として 用 意 されており この 例 で は 以 下 の 式 で 求 めることができる =FV(0.1, 365,, -10) - 4 -

2 プログラミング 本 研 修 で 取 り 上 げるマクロを 含 め 一 般 的 に プログラム 4 を 作 成 しようとする 場 合 その 言 語 で 使 われる 命 令 語 やその 文 法 を 習 得 することも 必 要 であるが プログラムを 作 成 するために 最 初 にす べきことは データ 構 造 と アルゴリズム の 検 討 である データ 構 造 とは 処 理 で 使 用 する データ 群 を どのような 形 式 ( 構 造 )でコンピュータの 中 に 記 憶 させるかを 定 義 することであり ア ルゴリズム とは そのデータを 用 いた 処 理 の 手 順 を 定 義 することである ここでは エクセルのマ クロを 作 成 するに 当 たって 必 要 となる エクセルのファイル 構 造 と 基 本 的 なデータ 構 造 一 般 的 な アルゴリズムについて 説 明 する 2.1 エクセルのファイル 構 造 エクセルでは 1つのファイルを ブック と 呼 び その 中 に 複 数 の シート が 存 在 してい る それぞれのシートは 1 つのオブジェクト(2.3.2 参 照 )として 存 在 し そのほかに ユーザー フォーム(7 章 参 照 ) マクロを 記 述 する 標 準 モジュールなどから 構 成 される プロシージャ プロシージャ フォームや 標 準 モジュールには それぞれにコード(マクロ)を 記 述 することができ それら は 独 立 して 管 理 される これのように1つのオブジェクト 等 に 記 述 されたマクロを モジュール と 呼 ぶ 1つのモジュール 内 には プロシージャ と 呼 ばれる1まとまりのマクロを 複 数 記 述 すること ができ それぞれをお 互 いに 呼 び 出 しながら 処 理 を 実 行 していく 2.2 データ 構 造 データ 構 造 には 変 数 リンクリスト 二 分 木 などがある 5 ここでは データ 構 造 のうち 一 般 的 によく 利 用 される 変 数 (スカラー 変 数 )を 取 り 上 げる エクセルにおいて 処 理 に 使 用 する 文 字 や 数 値 を 保 持 するためには シートのセルに 値 を 保 存 する 場 合 と 変 数 ( 配 列 を 含 む)を 利 用 する 場 合 とが 考 えられる シートのセルに 保 存 した 場 合 マクロの 実 行 中 にもその 値 を 確 認 できるが 実 行 速 度 は 非 常 に 遅 くなる 一 方 変 数 に 保 存 した 場 合 マクロの 実 行 中 にその 値 を 直 接 見 ることはできない 6 が 実 行 速 度 は 非 常 に 速 い(3.4 節 の 問 3-9 参 照 ) ここでは エクセルにおける 変 数 の 利 用 方 法 について 説 明 する 4 本 テキストでは 一 般 的 な 意 味 での プログラム と エクセルマクロに 特 化 した 内 容 での マクロ という 言 葉 を 使 い 分 ける 5 BASIC 言 語 では リンクリスト 等 を 実 現 するためのメモリアドレス(コンピュータのメモリ 上 のアドレス セルのアドレスとは 異 な る)を 取 得 したり 参 照 したりすることは 一 般 的 ではない(VB でのメモリアドレスは VarPtr 関 数 を 使 って 取 得 できる) 6 変 数 の 値 を 確 認 したい 場 合 は 4.3 で 説 明 するウォッチウィンドウやイミディエイト ウィンドウを 利 用 して 値 を 表 示 させる 必 要 があ る - 5 -

2.2.1 変 数 と 代 入 コンピュータのプログラムで 使 われる 変 数 は 数 学 で 使 われる 変 数 と 違 った 考 え 方 をしなけれ ばならない プログラムでは 数 値 を 収 容 するための 箱 (メモリ)がコンピュータの 内 部 にあ り この 箱 につけられた 名 前 を 変 数 という また 式 で 使 用 される = (イコール 7 )も 数 学 とは 異 なり 代 入 の 意 味 で 用 いられる a = 3 という 式 ( 命 令 )は aという 名 前 が 付 けられた 箱 に 3という 数 値 を 入 れなさいという 意 味 に なる a=3 a 変 数 につける 名 前 ( 変 数 名 )には 以 下 のような 決 まりがある 1 文 字 目 に 数 字 は 使 えない(アルファベットか 全 角 文 字 を 使 う) 255 バイト 以 内 ( 半 角 で 255 文 字 全 角 で 127 文 字 ) 予 約 語 (for, if, msgbox, DoEvents など)は 使 えない スペースや 次 に 説 明 する 型 宣 言 文 字 など 使 えない 半 角 記 号 がある(? は 使 えな いが _ は 使 える) 問 2-1 次 の 文 字 列 のうち 変 数 名 として 使 えるものに 使 えないものに をつけなさい abcdefg 3.141592 クラスの 平 均 database_ 読 み 込 み 3nen 三 年 sannen? さんねん? jugemujugemugokounosurikirekaijarisuigyonosuigyoumatuunraimatufuuraimatu (72 文 字 ) 2.2.2 変 数 の 種 類 VB で 使 える 変 数 の 種 類 は 資 料 4 のようなものがある この 中 でよく 使 われるものとして Integer 型 Double 型 String 型 などがある 8 変 数 を 使 用 するときには Dim 命 令 9 を 使 い 変 数 名 とその 型 を 宣 言 する Dim 変 数 名 as 型 名 Dim 変 数 名 as 型 名, 変 数 名 as 型 名, 例 Dim i as Integer Dim s as String Dim pai as Double Dim 点 数 as Byte 整 数 型 変 数 i 文 字 列 型 変 数 s 倍 精 度 浮 動 小 数 点 型 変 数 pai バイト 型 変 数 点 数 型 宣 言 文 字 は 変 数 や 定 数 等 の 後 に 付 けて そのデータ 型 を 表 す 例 えば 文 字 列 型 変 数 sは s$ という 名 前 を 使 用 することにより その 変 数 が 文 字 列 型 であることが 明 示 できる このように 変 数 を 使 用 するときには そのデータ 型 を 明 示 するため できるだけ 型 宣 言 文 字 を 付 加 したほうがよい 資 料 5 なお Dim 命 令 や 型 宣 言 文 字 で 変 数 の 型 を 明 示 しないで 使 用 する と バリアント 型 になる さらに 複 数 の 同 一 型 の 変 数 をまとめて 扱 える 配 列 も 利 用 できる 資 料 6 また 変 数 は 宣 言 する 場 所 によって その 参 照 できる 範 囲 (スコープ)が 決 定 する 資 料 7 7 記 号 = は equal (イコール)と 読 むが プログラムの 意 味 的 に becomes (ビカムズ)と 読 む 場 合 もある 8 一 般 的 にはサイズが 増 えるほどメモリを 消 費 し 処 理 も 遅 くなる しかし 現 在 の 一 般 的 なコンピュータ(32 ビット 以 上 のCPUを 持 つコンピュータ)では メモリも 十 分 に 搭 載 され また Long 型 および Double 型 を 直 接 処 理 するためのハードウェアが 内 蔵 され ているため 無 理 に Integer 型 や Single 型 を 使 う 必 要 はない 9 Dim は Dimension( 次 元 )の 省 略 以 前 は 配 列 を 宣 言 する 命 令 であったが VB では 変 数 の 宣 言 一 般 に 用 いられるようになった - 6 -

2.3 アルゴリズム アルゴリズムとは 問 題 を 解 く 手 順 を 表 したものであり プログラムは このアルゴリズムを 記 述 したものである アルゴリズムを 視 覚 的 に 表 すために しばしばフローチャートやデータフ ロー 図 状 態 遷 移 図 PAD などが 使 われ 処 理 の 流 れを 考 えたり 整 理 したりする 場 合 に 有 用 と なる フローチャートで 用 いられる 記 号 を 資 料 8 に 示 す また アルゴリズムで 用 いられる 構 造 を 資 料 9 に 示 す 2.3.1 実 行 順 序 例 えば 三 角 形 の 面 積 を 求 める 場 合 を 箇 条 書 きにすると 以 下 のような 手 順 となる 1 底 辺 を 決 める 2 高 さを 決 める 3 底 辺 と 高 さをかける 4 2で 割 る このとき 1と2はどちらを 先 に 実 行 しても 問 題 ないが 3を 実 行 するた めには 1と2を 先 に 実 行 しておかなければならない このように 処 理 の 流 れは その 順 番 を 考 えて 決 めていかなければならない この 処 理 をフロー チャートで 表 すと 右 図 のようになる 図 2 フローチャートの 例 問 2-2 長 方 形 の 面 積 を 求 める 手 順 を 箇 条 書 きで 書 きなさい また フローチャートを 使 って 書 きなさい 変 数 は 面 積 s 高 さ h 幅 w とする 問 2-3 円 の 面 積 を 求 める 手 順 を 以 下 の 公 式 を 使 って 箇 条 書 きで 書 きなさい また フローチャー トを 書 きなさい ただし 円 周 率 は 3.14 とし 変 数 名 は 面 積 s 半 径 r とする 2 円 の 面 積 円 周 率 半 径 問 2-4 台 形 の 面 積 を 求 める 手 順 を 以 下 の 公 式 を 使 って 箇 条 書 き 及 びフローチャートで 書 きなさ い 変 数 名 は 面 積 m 上 底 j 下 底 k 高 さ t とする 面 積 1 2 上 底 + 下 底 高 さ - 7 -

2.3.2 オブジェクトとプロパティ VB はオブジェクト 指 向 言 語 である オブジェクト 指 向 とは コンピュータ 内 で 扱 われるあらゆ るもの( 例 えば マウスやキーボード ディスプレイなどのハードウェアの 装 置 から アプリケー ションの 中 で 使 われるエクセルのシートやセルなど)を オブジェクト (モノ)として 定 義 し それらのオブジェクトとメッセージをやり 取 りすることによって 処 理 を 実 行 していく 考 え 方 で ある 資 料 10 この 考 え 方 によって あらゆるオブジェクトをブラックボックスとして 定 義 して 部 品 化 す ることにより 再 利 用 することが 容 易 になった プログラムを 記 述 する 場 合 は それらの 部 品 の 必 要 なところだけを 修 正 し それ 以 外 のところは 気 にせずに 利 用 することができる オブジェクトに 対 し その 状 態 や 性 質 を 表 すものを プロパティ と 呼 ぶ このプロパティに よって そのオブジェクトの 色 やサイズ 画 面 上 の 位 置 チェックボックスが 選 択 可 能 かどうか などが 決 まる さらに オブジェクトの 動 作 を 記 述 したものを メソッド と 呼 ぶ オブジェク トには あらかじめ 決 められて 内 蔵 されている 動 作 もあるが ユーザが 新 たなプロシージャ(3.1 参 照 )やファンクション(4.4 参 照 )として 付 け 加 える 動 作 もある さらに システムからオブ ジェクトに 対 し 発 せられる 動 作 を イベント と 呼 ぶ これは マウスのクリックやキーの 押 し 離 し セルの 値 の 変 更 などがある ポイント オブジェクト ワークシート セル グラフなど アプリケーションの 要 素 プロパティ オブジェクトの 属 性 を 表 す 名 前 メ ソ ッ ド オブジェクトに 属 するプロシージャやファンクション イ ベ ン ト オブジェクトで 認 識 される 動 作 2.3.3 アルゴリズムの 例 よく 使 われるアルゴリズムとしては 次 のようなものがある 10 合 計 平 均 を 求 める 最 大 値 最 小 値 を 求 める 素 数 を 求 める 最 大 公 約 数 を 求 める サーチ( 検 索 ) ソート( 並 べ 替 え) 例 えば クラスからプリントを 回 収 し それを 番 号 順 に 並 べ 替 える(ソート) 場 合 を 考 える クラスの 生 徒 が5 名 の 場 合 と40 名 の 場 合 で 手 順 が 異 なると 考 えられる 問 2-5 クラスの 生 徒 が5 名 の 場 合 どのように 並 べ 替 えるか 考 えなさい 問 2-6 クラスの 生 徒 が40 名 の 場 合 どのように 並 べ 替 えるか 考 えなさい 10 よく 使 われるアルゴリズムは 命 令 ( 関 数 )としてあらかじめ 用 意 されている 場 合 が 多 い エクセルでは シート 上 で 使 える sum average max などや マクロ 上 で 使 える sort などが 用 意 されている - 8 -

問 2-7 並 べ 替 えが 終 わった 後 欠 席 していた1 名 が 提 出 した 場 合 どのように 並 べ 替 えるか 考 え なさい 問 2-8 問 2-5 の 方 法 で40 名 のプリントを 並 べ 替 えた 場 合 と 問 2-6 の 場 合 とで 比 べて どの くらい 時 間 が 変 わるか 考 えなさい 問 2-9 次 の 文 章 を 読 み 下 の 問 い( 問 a, b)に 答 えよ( 情 報 入 試 研 究 会 第 2 回 大 学 情 報 入 試 全 国 模 擬 試 験 より) 次 のプログラムは 正 の 整 数 n を 入 力 したとき 1 から n までの 整 数 を 出 力 する プロ グラムである n に 整 数 値 を 入 力 i を 1 から n まで 1 ずつ 増 やしながら くり 返 し i を 出 力 ここまでが くり 返 し の 範 囲 たとえば このプログラムを 実 行 して 7 を 入 力 した 場 合 1 2 3 4 5 6 7 と 出 力 する 下 の 解 答 群 を 使 用 して このプログラムを 表 現 すると 次 の 通 りになる ア ク セ コ 解 答 群 ア n に 整 数 値 を 入 力 イ j 0 ウ k 1 エ k i オ k i i カ j j + i キ j j + k ク i を 1 から n まで1ずつ 増 やしながら くり 返 し ケ j を 1 から k まで1ずつ 増 やしながら くり 返 し コ ここまでが くり 返 し の 範 囲 サ もし i が 偶 数 ならば シ もし i が 偶 数 でないならば ス ここまでが もし の 範 囲 セ i を 出 力 ソ j を 出 力 注 意 事 項 変 数 は プログラム 実 行 開 始 時 点 で 値 が-1 となっているものとする "くり 返 し" で 終 わる 行 には それに 対 応 する"ここまでが くり 返 し の 範 囲 " の 行 が 必 要 である "もし" で 始 まる 行 には 対 応 する"ここまでが もし の 範 囲 " の 行 が 必 要 である 解 答 は 解 答 群 の 記 号 を 左 から 詰 めて 記 入 すること - 9 -

問 a) 正 の 整 数 n を 入 力 したとき 1 から n までの 数 それぞれの 2 乗 の 和 を 出 力 するプロ グラムを 上 の 解 答 群 の 行 を 必 要 なだけ 並 べて 作 成 せよ 解 答 群 にある 行 は 何 回 使 って もよい たとえば 4 を 入 力 すると 1 + 4 + 9 + 16 = 30 なので 30 と 出 力 する 問 b) 正 の 整 数 n を 入 力 したとき 1 から n までの 数 を 順 番 に 奇 数 については 1 回 偶 数 についてはその 数 の 回 数 だけくり 返 して 出 力 するプログラムを 上 の 解 答 群 の 行 を 必 要 なだけ 並 べて 次 のプログラムを 作 成 せよ 解 答 群 にある 行 は 何 回 使 ってもよい たとえば 4 を 入 力 すると 1 2 2 3 4 4 4 4 と 出 力 する 2.3.4 プログラムの 最 適 化 最 終 的 な 結 果 が 正 しければ それは 正 しいアルゴリズム と 考 えられるが その 処 理 が1 秒 で 終 わる 場 合 と 1 日 かかる 場 合 とでは 1 秒 で 終 わるほうが よりよいアルゴリズム と 考 え られる また 1 度 しか 使 わないプログラムであればプログラムが 見 難 くても 処 理 が 速 いほうが いいが 長 期 間 に 渡 って 同 じプログラムを 利 用 する 場 合 や 多 くの 人 が 変 更 することが 前 提 となる 場 合 は 分 かりやすいプログラムのほうが 修 正 や 保 守 がしやすい このように 同 じ 処 理 を 行 う 場 合 でも よいアルゴリズム や よいプログラム が 変 わることがある 速 度 のみを 考 えた 場 合 データをセル 上 に 配 置 するより 変 数 として 保 存 しておいたほうが 速 くなる 特 に データの 並 べ 替 えなど 同 一 のデータを 何 度 も 読 み 書 きする 場 合 には セル 上 に 置 いて 処 理 するよりも 最 初 に 配 列 変 数 に 取 り 込 み それを 変 数 上 で 並 べ 替 えて セルに 戻 すほ うが 速 度 はかなり 速 くなる プログラムが 完 成 した 後 その 処 理 が 遅 い 場 合 は プログラムの 最 適 化 を 考 えてみるとよ い 特 に 繰 り 返 し 部 分 の 内 側 を 修 正 する セルの 値 を 変 数 に 保 持 して 処 理 する などの 修 正 によって 劇 的 に 速 くなることがある - 10 -

3 基 本 的 な 処 理 3.1 メッセージボックスの 表 示 最 初 に マクロの 簡 単 な 例 として メッセージボックスを 表 示 する 図 3 表 示 したいメッセージボックス MsgBox 命 令 の 書 式 MsgBox プロンプト, ボタン, タイトル プロンプト: 中 に 表 示 する 文 字 列 ボタン: 表 示 されるボタンの 種 類 や 数 タイトル: 上 部 に 表 示 する 文 字 列 (1) プロジェクトウィンドウの VBA Project(Book1) を 右 クリックし 挿 入 標 準 モ ジュール をクリックする (2) コードエディタから 次 のように 入 力 する Sub sample1() MsgBox " 今 日 はいい 天 気 ですね", vbyesno, " 天 気 " キーワードとなっているアルファベットの 大 文 字 小 文 字 は 自 動 で 修 正 される Sub は サブルーチン(sub-routine)の 略 で ひとまとまりの 処 理 (プロシージャと 呼 ぶ) を 定 義 する ここでは sample1 という 名 前 を 付 けたひとまとまりの 処 理 (ここではメッセー ジボックスを 表 示 する1 行 だけ)を 定 義 した また は Sub の 定 義 がここまでであ ることを 示 す sample1 の 後 ろのカッコについては 4.4 で 説 明 する - 11 -

コードエディタの 最 初 に Option Explicit という 記 述 が 自 動 的 に 挿 入 されるこ とがある この 命 令 文 は そのモジュールで 使 用 する 変 数 を 明 示 的 (Explicit)に 宣 言 しなければ 使 えないようにオプション(Option)を 設 定 するものである 標 準 状 態 の Visual Basic では 変 数 を 宣 言 しなくても 使 用 できるが この 設 定 によって 変 数 名 の スペルミスによる 間 違 いを 防 ぐことができるようになる もし 挿 入 されていない 場 合 は 最 初 に 入 力 しておいたほうがよい (3) カーソルをSub~の 間 に 置 き 実 行 ボタン をクリックする 11 Sub~ の 外 にカーソルがある 場 合 は 実 行 すべきマクロが 特 定 できないため 実 行 する マクロ 名 を 選 択 するダイアログが 表 示 される 今 回 は sample1 を 選 択 し 実 行 をクリック する (4) メッセージボックスが 表 示 される 左 図 の 手 順 は 必 要 ない 場 合 もある Windows Vista の 場 合 Windows 8.1 の 場 合 3.2 セルの 操 作 エクセルでは 基 本 操 作 としてセルに 値 をセットしたり セルの 値 を 読 み 出 したりする 必 要 が ある これらの 操 作 について 説 明 する 特 定 のセルを 指 定 するためには シート 名 と セルの 番 地 (アドレス)を 指 定 する 必 要 が ある 12 これらを 指 定 するのが Sheets オブジェクト Range オブジェクトである また 対 象 と なるセルの 値 を 表 すプロパティは Value という 名 称 がつけられている Sheets, Range, Value Sheets("xxx"):シート 名 の 指 定 Range("C1") :セルの 範 囲 指 定 Value:セルの 値 の 読 み 出 し/ 書 き 込 みを 指 定 する (セルの 色 や 罫 線 などを 指 定 することもできる) 3.2.1 セルの 値 のセット (1) 先 ほどのsample1のに 続 いて 次 のように 入 力 する Sub sample2() Sheets("Sheet1").Range("C1").Value = 5 11 マクロを 実 行 すると シートの 状 態 を 元 に 戻 すこと(Undo)はできないので 注 意 する 12 正 確 には ブック 名 も Workbooks オブジェクトを 使 用 して 指 定 する 必 要 がある - 12 -

(2) sample2 内 にカーソルを 合 わせて 実 行 ボタンを 押 し マクロを 実 行 する エクセルの 表 の 画 面 に 戻 り Sheet1 のセルC1に 5 が 入 力 されていることを 確 認 する セルを 指 定 する 場 合 の 記 述 方 法 としては 上 記 の Range のほかに 以 下 のような 記 述 方 法 もある 1 Sheets("Sheet1").Range("C1").Value = 5 2 Sheets("Sheet1").Cells(1,3).Value = 5 3 Sheets("Sheet1").[C1].Value = 5 ここで 2の Cells のカッコ 内 は ( 行, 列 )の 順 すなわち( 縦, 横 )の 順 である Sheet1 がすでに 選 択 されている( 一 番 前 に 出 てきて 表 示 されている=アクティブに なっている) 場 合 Sheets( )の 記 述 を 省 略 することができる また 値 をセルに 代 入 する 場 合.Value を 省 略 することができる よって 以 下 のような 記 述 をすること も 可 能 である 1 Range("C1") = 5 2 Cells(1,3) = 5 3 [C1] = 5 3.2.2 セルの 値 の 読 み 出 し (1) sample2に 続 いて 次 のsample3を 入 力 する( 1 は 説 明 のための 記 述 であり 入 力 す る 必 要 はない) Sub sample3() Range("B2").Value = Range("C1").Value + 1 1 1の 命 令 は "="の 右 辺 の 値 を 計 算 し 左 辺 に 代 入 する 右 辺 の Range("C1").Value は sample2 のところで セル C1 に 5 が 代 入 されたので 式 は 以 下 と 同 じになる Range("B2").Value = 5 + 1 さらに 右 辺 の 値 を 求 めると 以 下 のようになる Range("B2").Value = 6 よって セルB2には 6 が 設 定 される (2) sample3を 実 行 すると エクセルの 表 は 次 のようになることが 確 認 できる - 13 -

3.2.3 オフセットの 指 定 オフセット(Offset 13 )を 指 定 することによって 特 定 のセルの 位 置 を 基 準 として そこから 指 定 した 値 だけ 移 動 したセルを 読 み 書 きの 対 象 とすることができる Offset(y, x) セルの 位 置 を 現 在 の 位 置 から 相 対 的 に 指 定 する y: 上 下 方 向 ( 行 Row 下 が+ 上 が-)を 指 定 x: 左 右 方 向 ( 列 Column 右 が+ 左 が-)を 指 定 (1) 次 のsample4をsample3の 下 に 追 加 する Sub sample4() Range("B2").Offset(2,4).Value = " 瓦 谷 " 2 2では 新 たに Offset(2,4)が 追 加 されている これによって Range で 指 定 されたセル("B2") から 下 方 向 に 2 右 方 向 に 4 移 動 したセル("F4")が 対 象 となる 14 また 2の 右 辺 は 瓦 谷 という 文 字 列 を 指 定 しているが 文 字 列 を 指 定 する 場 合 には このように 必 ずダブル クォーテーション( )でくくらなければならない (2) sample4を 実 行 する セル"F4"に 瓦 谷 が 入 る 問 3-1 セルC3 に 3 を 入 力 するプロシージャを 作 成 しなさい プロシージャ 名 は Sub ex31 と する 以 下 同 様 問 3-2 セルD3 に 5 を 入 力 するプロシージャを 作 成 しなさい Sub ex32 問 3-3 セルE3 に セル C3 の 値 とセル D3 の 値 の 和 を 入 力 するプロシージャを 作 成 しなさい Sub ex33 13 マクロで 使 用 する offset([ 列 数 ],[ 行 数 ])は エクセルの 表 の 中 で 使 用 する offset( 参 照, 行 数, 列 数,[ 高 さ],[ 幅 ]) 関 数 とは 書 式 が 異 なる こ の 他 にも マクロの 命 令 と 表 の 関 数 名 で 同 じ 名 前 で 書 式 が 異 なったり 結 果 が 異 なったりするものが 多 数 あるので 注 意 が 必 要 となる 14 数 学 では 座 標 は(x, y)の 順 番 であるが VB では(y, x)の 順 番 となる また コンピュータでは 一 般 的 に 下 向 きが 正 となることが 多 い - 14 -

3.2.4 式 のセット セルに 式 を 設 定 する 場 合 は ~.Formula メソッドを 使 い 以 下 のような 記 述 になる Sub sample5() Range("D4").Formula = "=C1+B2" 3 3では これまでの Value( 値 )の 代 わりに Formula( 式 )となっている また 右 辺 は 式 を 示 す 文 字 列 として Excel で 入 力 される 式 と 同 様 に = で 始 まる 式 がダブルクォーテーションで 囲 まれて 指 定 されている 問 3-4 sample5 の 実 行 結 果 はどのようになるか 問 3-5 問 3-3 を Formula メソッドを 用 いて 記 述 しなさい 3.3 マクロの 保 存 マクロが 完 成 したら ファイ ルとして 保 存 する VBE にも 保 存 のメニューはあるが ここで は エクセルのシート 側 で 保 存 する Excel 2007 以 降 で 名 前 を 付 けて 保 存 をすると 初 期 状 態 ではファイルの 種 類 が Excel ブック ( 拡 張 子 :xlsx)となり このままではマクロは 保 存 され ずに 破 棄 されてしまう マクロ も 含 めて 保 存 する 場 合 には ファイルの 種 類 として Excel マクロ 有 効 ブック ( 拡 張 子 : xlsm)を 選 択 しなければならな い 問 3-6 ここまで 作 成 したブックをファイル 名 prog1.xlsm として 保 存 しなさい - 15 -

3.4 繰 り 返 し 2.3 で 述 べたように 繰 り 返 し は アルゴリズムの 基 本 構 造 として 重 要 なものである VB で の 繰 り 返 しには For~Next 文 または Do~Loop 文 を 使 用 する 一 般 的 な 使 い 分 けとして 実 行 時 に 繰 り 返 しの 回 数 が 決 まっている 場 合 には For 文 を 実 行 時 に 回 数 が 決 まっていない 場 合 には Do 文 を 使 用 する ここではそれぞれの 場 合 についての 演 習 を 行 う サンプルデータとして prog2.xlsm を 使 用 する 3.4.1 For 文 For 文 は 以 下 のような 構 文 である For 変 数 = 初 期 値 To 最 終 値 [Step 増 分 ] 命 令 群 Next [ 変 数 ] 変 数 : 数 を 数 えるための 変 数 (カウンタ) 初 期 値 :カウンタの 最 初 の 値 最 終 値 :カウンタがこの 値 を 超 えたら 終 了 となる 値 増 分 : 繰 り 返 しごとにカウンタに 加 算 される 値 ( 省 略 可 省 略 時 は1) 問 3-7 次 のプログラムを 入 力 し 実 行 しなさい a) Sub t3_7_a() b) Sub t3_7_b() c) Dim i As Integer Dim i As Integer Sub t3_7_c() Dim i As Integer For i = 1 To 5 MsgBox i Next i For i = 1 To 10 step 2 MsgBox i Next i For i = 5 To 1 step -1 MsgBox i Next i 問 3-8 次 の 条 件 を 満 たす For 文 を 記 述 しなさい また 問 3-7 を 参 考 にしてプログラムを 作 成 実 行 し 動 作 を 確 認 しなさい 例 ) 変 数 i を 1 から 5 まで 繰 り 返 す For i=1 to 5 a) 変 数 j を 1 から 10 まで 繰 り 返 す b) 変 数 k を 10 から 100 まで 10 ずつ 増 やしながら 繰 り 返 す c) 変 数 m を 10 から 1 まで 繰 り 返 す d) 変 数 n を 100 から 10 まで 7 ずつ 減 らしながら 繰 り 返 す e) 変 数 p を a から b まで 繰 り 返 す f) 変 数 q をセル B1 の 値 からセル B2 の 値 まで 繰 り 返 す ただし セル B1 B2 の 値 はとも に 整 数 とし セル B1 の 値 <セル B2 の 値 とする g) 変 数 r をセル C1 の 値 からセル C2 の 値 まで 繰 り 返 す ただし セル C1 C2 の 値 はとも に 整 数 とし セル C1 の 値 >セル C2 の 値 とする - 16 -

Excel では 合 計 と 平 均 を 求 める 関 数 として Sum と Average が 用 意 されている ここでは こ の 関 数 と 同 等 の 動 作 をマクロで 実 現 する (1) エクセルを 一 度 終 了 し prog2.xlsm を 起 動 する (2) 1.2.2と 同 様 に Visual Basicエディタを 起 動 する (3) プロジェクトウィンドウの VBA Project(prog2.xlsm) を 右 クリックし 挿 入 標 準 モジュール をクリックする (4) 次 のsample6を 入 力 し 実 行 する( 1 ~ 10 は 入 力 しない) Sub sample6() Dim s As Integer Dim i As Integer Dim nen As Integer s = 0 For i = 1 To 5 nen = Range("M5").Offset(i, 0).Value s = s + nen Next i MsgBox " 合 計 は" & s & " 年 です" MsgBox " 平 均 は" & (s / 5) & " 年 です" 1 2 3 4 5 6 7 8 9 10 プログラムの 説 明 1~3: 使 用 する 変 数 を 宣 言 4: 積 算 する 変 数 をゼロに 初 期 化 5:1 人 目 から5 人 目 まで 繰 り 返 し 6: シートから 使 用 年 数 を 取 得 7: 使 用 年 数 を 加 算 8:ここまで 繰 り 返 す 9 10: 合 計 年 数 と 平 均 年 数 を 表 示 データ 構 造 変 数 名 s i nen 使 用 目 的 合 計 年 数 を 積 算 する 繰 り 返 し 回 数 を 保 持 個 人 の 使 用 年 数 を 保 持 3.4.2 Do 文 For 文 は 対 象 となる 回 数 があらかじめ 分 からなければ 利 用 できないため 人 数 が 分 からない 場 合 は For 文 の 代 わりに Do 文 を 用 いる このとき 繰 り 返 しを 終 了 するための 条 件 (または 続 ける 条 件 )が 必 要 となる Do 文 の 構 文 は while の 場 合 と until の 場 合 さらに それらを Do の 後 に 記 述 するか Loop の 後 に 記 述 するかで 変 わる まとめると 以 下 の 通 りとなる Do {While Until} 条 件 命 令 群 Loop または Do 命 令 群 Loop {While Until} 条 件 {While Until}:While か Until のいずれかを 指 定 する While: 条 件 が 成 立 している 間 ( 真 の 間 )は 繰 り 返 す Until: 条 件 が 成 立 するまで( 偽 の 間 ) 繰 り 返 す 条 件 : 処 理 を 継 続 / 中 断 する 条 件 を 数 式 等 で 指 定 する - 17 -

例 として セルが 空 白 でない 間 は 繰 り 返 す とすると 次 のようになる Do While Range("M6").Offset(p, 0).Value <> "" セル M6 から 下 に p 右 に 0 移 動 したセルの 値 が "" でない(<>) 間 (while)は 繰 り 返 す (Do) となる ここで p をゼロから 始 めるとすると 参 照 するセルはセル M6 から 開 始 し 下 に 移 動 していくことになる ここでは Do 文 を 用 いた 例 として sample6 の for 文 の 代 わりに Do 文 を 用 い 人 数 を 数 えな がら 合 計 平 均 を 求 めてみる (1) セルC2を 選 択 し 名 前 ボックスに 人 数 と 入 力 し Enterを 押 す このように セルに 名 前 を 付 けることによって マクロから Range(" 人 数 ")のようにして その 領 域 を 容 易 に 参 照 することができる シートの 列 や 行 の 挿 入 削 除 を 行 ったとき 指 定 された 名 前 はそのまま 平 行 移 動 するが マクロ 内 でセルの 番 地 を A5 のように 直 接 指 定 し ている 場 合 は その 部 分 全 てを 書 き 換 えなければならない よって できるだけセルに 名 前 を 付 けて 管 理 したほうが 保 守 性 の 点 で 有 利 となる (2) 次 のsample7をsample6の 下 に 追 加 し 実 行 する Sub sample7() Dim s As Integer, p As Integer Dim nen As Integer s = 0: p = 0 Do While Range("M6").Offset(p, 0).Value <> "" nen = Range("M6").Offset(p, 0).Value s = s + nen p = p + 1 Loop Range(" 人 数 ").Value = p MsgBox " 合 計 は" & s & " 年 です" MsgBox " 平 均 は" & (s / 5) & " 年 です" 1 2 3 4 5 6 7 8 9 10 11 このマクロでは 行 が 短 くなるように これまで 行 を 分 けて 記 述 していた 内 容 を 1 行 にまと めている 1では2つの 変 数 の 宣 言 を, でつないで 記 述 し 3では2つの 命 令 を : でつな いで 記 述 している(1.2.3 参 照 ) - 18 -

データ 構 造 変 数 名 使 用 目 的 名 前 参 照 範 囲 使 用 目 的 s 合 計 年 数 を 積 算 する 人 数 基 礎 データ!C2 アンケート 回 答 人 数 p 参 照 している 場 所 を 示 す nen 個 人 の 使 用 年 数 を 保 持 図 4 sample7 の 入 力 画 面 なお For 文 は 基 本 的 に 繰 り 返 しの 回 数 が 決 まっているため( 時 間 が 掛 かっても) 必 ず 終 了 す るが Do 文 は 繰 り 返 しの 条 件 によっては 永 遠 に 終 わらない( 無 限 ループと 呼 ぶ)ことがあるた め 注 意 する 必 要 がある 資 料 11 問 3-9 次 のマクロをそれぞれ 追 加 し 実 行 結 果 を 比 較 しなさい この 結 果 より 値 をセルに 保 存 した 場 合 と 変 数 に 保 存 した 場 合 どのくらい 速 度 が 異 なるか 評 価 しなさい Sub speed1() Dim t As Single Dim i As Long t = Timer Sub speed2() Dim t As Single Dim i As Long Dim a As Integer, b As Long t = Timer For i = 1 To 10000 '1 万 回 Cells(1, 1) = 2 Cells(1, 2) = Cells(1, 1) + i Next i MsgBox (Timer - t) & " 秒 " For i = 1 To 100000000 a = 2 b = a + i Next i MsgBox (Timer - t) & " 秒 " '1 億 回 プログラム 中 の '1 万 回 1 億 回 のような (アポストロフィー)の 記 号 以 降 は 注 釈 文 として 扱 われ プログラムの 動 作 に 影 響 はない(よって 入 力 しなくてもよい) - 19 -

問 3-10 次 の 繰 り 返 しを 実 現 するための Do 文 を 記 述 しなさい a) セルA1の 値 がゼロでない 間 は 繰 り 返 す b) セルA1の 値 がプラスの 間 は 繰 り 返 す c) セルB1の 値 がゼロになるまで 繰 り 返 す d) セルB1の 値 が100を 超 えるまで 繰 り 返 す e) セルC1の 値 が100 以 下 かつセルD1の 値 が100 以 下 の 間 は 繰 り 返 す - 20 -

3.5 条 件 分 岐 条 件 分 岐 も アルゴリズムの 記 述 で 用 いられる 基 本 的 な 構 造 の1つである VB での 条 件 分 岐 に は If 文 または Select 文 を 使 用 する 3.5.1 If 文 If 文 は 以 下 のような 構 文 を 持 つ If 条 件 Then 命 令 1 Else 命 令 2 または If 条 件 Then 命 令 1 Else 命 令 2 End If 条 件 : 処 理 を 分 岐 する 条 件 を 数 式 等 で 指 定 する 命 令 1: 条 件 が 成 立 したときに 実 行 される 命 令 群 命 令 2: 条 件 が 成 立 しなかったときに 実 行 される 命 令 群 ( 必 要 ない 場 合 は Else と ともに 記 述 しなくてよい) 例 :もし 変 数 aの 値 が3ならば aの 値 を 表 示 する If a=3 Then Print a 問 3-11 次 の 条 件 分 岐 を 実 現 するための If 文 を 記 述 しなさい a) 変 数 bの 値 がゼロならば 変 数 cに3を 代 入 する b) 変 数 dの 値 がゼロでないならば 変 数 eにd 10を 代 入 する c) セルB2の 値 がゼロならば 変 数 fにセルb2の 値 を 代 入 する d) セルB3の 値 がゼロより 大 きいならば 変 数 gにセルb2の 値 を 代 入 する e) セルB4の 値 が30 未 満 ならば 変 数 hに 変 数 h+1の 値 を 代 入 する f) セルB2から 下 にp 右 に0 移 動 したセルの 値 がゼロでないならば 変 数 sにその 値 を 加 える - 21 -

ここでは If 文 を 用 いて 鹿 沼 市 出 身 者 が 何 名 いるかを 数 えるプログラムを 作 成 する (1) 次 のsample8をsample7の 下 に 追 加 する Sub sample8() Dim i As Integer Dim k As Integer k = 0 For i = 1 To 5 If Range("J5").Offset(i, 0).Value = " 鹿 沼 市 " Then k = k + 1 End If Next i 1 2 3 MsgBox " 鹿 沼 から 来 た 人 は" & k & " 人 です" データ 構 造 変 数 名 i k 使 用 目 的 繰 り 返 し 回 数 を 保 持 鹿 沼 市 出 身 の 人 数 を 保 持 1では 5 回 の 繰 り 返 しを 行 うよう For 文 を 記 述 している 2では セル J5 から 下 へ 順 に 値 を 取 得 し " 鹿 沼 市 "と 比 較 している 両 者 が 等 しい 場 合 Then 以 下 の3の 命 令 が 実 行 され 変 数 k の 値 を1つ 増 加 させる ここでは Else は 省 略 されている 問 3-12 sample8 を 変 更 して 鹿 沼 市 以 外 の 出 身 者 の 数 を 数 えるマクロを 10 秒 で 作 成 しなさい 3.5.2 複 雑 な If 文 複 数 の 条 件 が 必 要 な 場 合 も 同 様 に 記 述 することができる Sub sample9() Dim i As Integer Dim sei As String 繰 り 返 し 回 数 判 定 した 性 別 For i = 1 To 5 If Range("E5").Offset(i, 0).Value = 1 Then 1 sei = " 男 性 " 2 ElseIf Range("E5").Offset(i, 0).Value = 2 Then 3 sei = " 女 性 " 4 Else 5 sei = " 不 明 " 6 End If 7 Range("E5").Offset(i, 0).Value = sei 8 Next i 1の 条 件 では 対 象 とするセルの 値 を1と 比 較 し 等 しければ 2 変 数 sei に" 男 性 "を 代 入 す る 3そうでなくて もし(ElseIf) 対 象 セルが2であれば 4 変 数 sei に" 女 性 "を 代 入 する 5さらにそうでなければ(Else) 6 変 数 sei に" 不 明 "を 代 入 する この If 文 によって 代 入 された 値 は 8によって シートの 対 象 セルに 書 き 戻 される - 22 -

3.5.3 Select 文 3.5.2 のように 条 件 が 多 い 場 合 If 文 が 複 雑 になり 分 かりにくくなる このような 場 合 は Select 文 を 使 うことによって 簡 単 に 記 述 することができる Select 文 は 以 下 のような 構 文 を 持 つ Select Case 式 Case 値 1 命 令 1 Case 値 2 命 令 2 Case Else 命 令 n End Select 式 : 評 価 対 象 の 変 数 値 1 : 変 数 の 値 (Is や To を 用 いて 比 較 や 範 囲 を 指 定 できる) 命 令 1: 式 が 値 1の 場 合 に 実 行 される 命 令 群 値 2 : 変 数 の 値 命 令 2: 式 が 値 2の 場 合 に 実 行 される 命 令 群 命 令 n: 式 がどの Case の 値 にも 該 当 しなかった 場 合 に 実 行 される 命 令 群 (Case Else と 命 令 nは 省 略 可 ) Select 文 を 使 用 して sample9 を 書 き 換 えると 以 下 のようになる Sub sample10() Dim i As Integer Dim sei As String For i = 1 To 5 Select Case Range("E5").Offset(i, 0).Value Case 1 sei = " 男 性 " Case 2 sei = " 女 性 " Case Else sei = " 不 明 " End Select 1 2 3 4 5 6 7 8 Next i Range("E5").Offset(i, 0).Value = sei このマクロでは 1で 対 象 となるセルの 値 を 指 定 し この 値 が 21の 場 合 3 変 数 sei に" 男 性 "を 代 入 し 42の 場 合 5 変 数 sei に" 女 性 "を 代 入 し 6どれにも 当 てはまらない 場 合 は 7 変 数 sei に" 不 明 "を 代 入 している Select 文 の 終 了 は End Select で 指 定 する - 23 -

第 2 部 第 2 部 では エクセルのマクロを 活 用 するため エクセルマクロ 上 で 行 うデータの 並 べ 替 えの 方 法 ボタンの 配 置 マクロからの 印 刷 ファイルの 入 力 ユーザーフォームの 作 成 について 説 明 する これ らを 組 み 合 わせることにより 最 終 的 に 次 のようなアンケート 処 理 システムを 構 築 する 1 児 童 生 徒 に 問 題 やアンケートを 記 載 したエクセルのファイルを 配 布 し 回 答 保 存 させる 2 回 答 したそれらのファイルを 1つのファイルに 取 り 込 む 3 取 り 込 んだファイル 上 で 回 答 の 一 覧 表 を 作 成 する 4 配 布 用 の 個 票 を 印 刷 する 5 2~5のうち どの 処 理 を 行 うかをメニュー 画 面 から 選 んで 実 行 する 4 並 べ 替 えとボタンの 配 置 4.1 並 べ 替 え シート 上 にあるデータを 並 べ 替 えるためには Sort メソッドを 使 う Sort メソッドの 構 文 は 次 のとおりである 範 囲.Sort Key1:=キー, Order1:= 順 序, Orientation:= 行 列, Key2:= 範 囲 : 並 べ 替 えを 行 う 範 囲 を Range 等 で 指 定 する キー: 並 べ 替 えのキーの 範 囲 を Range 等 で 指 定 する 順 序 : 昇 順 (xlascending)か 降 順 (xldescending)かを 指 定 する 行 列 : 列 単 位 (xlsortcolumns)か 行 単 位 (xlsortrows)で 並 べ 替 えるか 指 定 する Key2 :キーと 順 序 は 3つまで 指 定 できる 例 として prog2.xlsm の 基 礎 データ シートの 範 囲 B6 から X10 を 並 べ 替 えるマクロは 次 のようになる Sub sample11() Sheets(" 基 礎 データ").Range("b6:x10").Sort _ Key1:=Range("k6"), Order1:=xlAscending, Orientation:=xlSortColumns このマクロでは 並 べ 替 えのキーとして K6 の 列 (xlsortcolumns) 並 べ 替 えの 順 序 がxlAscending( 昇 順 小 さい 順 ) 並 べ 替 えの 方 向 としてxlSortColumns( 列 1 行 を1 件 のデータとする) として 並 べ 替 える すなわち 基 礎 データ シートで 金 額 が 小 さい 人 が 上 大 きい 人 が 下 になるように5 人 分 のデータを 並 べ 替 えることができる なお Sort 行 が 1 行 で 収 まらないため 行 継 続 文 字 _ (スペースとアンダースコア)を 使 っ て 次 の 行 も 論 理 的 に 同 一 行 であることを 表 している 15 問 4-1 B 列 の 番 号 順 に 並 べ 替 えるマクロ sample12 を 作 成 しなさい 15 行 継 続 文 字 による 行 の 分 割 は 25 行 まで 可 能 である - 24 -

4.2 ボタンの 配 置 マクロを 実 行 する 場 合 これまで VB エディタの 画 面 から 実 行 してきたが 多 くの 人 に 使 っても らう 場 合 これは 非 常 に 使 いづらい また 開 発 タブから マクロ ボタンをクリックし マ クロ 名 を 指 定 して 実 行 する 方 法 ( 下 図 )もあるが いずれの 方 法 も 開 発 タブの 表 示 が 必 要 で あり また マクロの 名 前 を 覚 えておかなければならないなど 不 便 な 面 もある これに 対 して シート 上 にボタンを 用 意 し そのボタンをクリックするだけでマクロを 実 行 す る 方 法 がある エクセルでは マクロを 実 行 するためのボタンとして ボタン(フォームコント ロール) コマンドボタン(ActiveX コントロール) 図 形 などを 使 うことができる この 3つの 違 いをまとめると 資 料 12 のようになる 今 回 は 標 準 モジュール 内 のマクロが 実 行 可 能 な ボタン(フォームコントロール) を 利 用 す ることとするが ActiveX コントロールや 図 形 を 用 いてもほぼ 同 様 のことが 可 能 である ここでは 例 として 先 ほど 記 述 したマクロ sample11 を 実 行 するボタンを 配 置 する 手 順 を 以 下 に 示 す (1) 開 発 タブを 選 択 し 挿 入 フォームコントロールの ボタン をクリックする (2) シート 上 にボタンをドラッグして 配 置 する マクロの 登 録 ウィンドウが 表 示 される - 25 -

(3) 実 行 したいマクロ(ここではsample11)を 選 択 し OKをクリックする (4) ボタンの 上 で 右 クリックし テキストの 編 集 を 選 ぶ (5) ボタンのテキストを お 小 遣 いの 金 額 で 並 べ 替 え に 変 更 する (6) ボタン 上 で 右 クリックし テキスト 編 集 の 終 了 を 選 ぶ 以 上 で ボタンにマクロを 実 行 させるための 設 定 が 終 わりとなる ボタンが 選 択 されていない 状 態 (ボタンに 選 択 枠 が 出 てない 状 態 )でマウスを 乗 せると カーソルが 指 のマークに 変 化 し この 状 態 でクリックすると 選 択 したマクロが 実 行 される 4.3 デバッグ マクロや 計 算 式 の 入 力 ミス アルゴリズムの 間 違 いなど マクロが 動 作 しなかったり 想 定 し た 結 果 と 異 なる 実 行 結 果 になったりすることがある このようなときは マクロのどの 場 所 に 問 題 があるのかを 探 し 出 し 適 切 に 修 正 しなければならない このような 間 違 い(bug バグ)を 取 り 除 く 作 業 を デバッグ (debug デバグともいう)といい デバッグに 用 いられるのが デバッ グ メニューである VB のデバッグでは ブレークポイントの 設 定 ステップ 実 行 変 数 の 値 の 表 示 (ウォッチ)などが 可 能 である 図 5 デバッグメニュー 命 令 の 入 力 間 違 いは プログラム 入 力 時 にシステムから 指 摘 されることが 多 いため あまり 発 生 しないが 変 数 名 や 式 の 間 違 い(+を-として 入 力 しているなど)は 入 力 時 に 指 摘 されるこ とはない また アルゴリズムの 間 違 いもシステムから 指 摘 されることがないため 特 に 大 きな プログラムになると 根 気 強 くデバッグしなければならない それぞれのデバッグ 方 法 について は 資 料 13 に 示 す - 26 -

4.4 関 数 と 引 数 これまで マクロのプロシージャを 定 義 する 場 合 に Sub マクロ 名 () の 書 式 を 利 用 してきた この Sub は 3.1 で 述 べたように ひとまとまりのプロシージャを 定 義 する 場 合 に 用 いられる 同 様 の 命 令 として Function がある 16 これは 呼 び 出 し 側 に 値 を 返 す 場 合 に 用 いられる 書 式 は 以 下 のとおりである Function マクロ 名 ( 引 数 ) As 型 名 マクロ 名 = 返 す 値 End Function マクロ 名 : 定 義 するプロシージャに 付 ける 名 前 引 数 : 呼 び 出 し 側 からプロシージャに 渡 された 値 を 入 れる 変 数 と その 型 型 名 :このプロシージャから 返 す 値 の 型 返 す 値 :プロシージャから 呼 び 出 し 側 に 返 す 値 Function を 途 中 で 抜 け 出 す 場 合 は Exit Function を 使 う Sub と Function を 用 いた 例 を 以 下 に 示 す 次 のコードを 入 力 し プロシージャ a を 実 行 する Sub a() Call b ' bの 呼 び 出 し Sub b() Dim s As Integer s = wa(2, 3) MsgBox s ' wa の 呼 び 出 し Function wa(x As Integer, y As Integer) As Integer wa の 定 義 ( 引 数 は x と y) wa = x + y End Function ここでは a b wa の 3 つのプロシージャを 定 義 している Sub によって 定 義 されたプロシー ジャは Call 命 令 を 用 いて 呼 び 出 し Function によって 定 義 されたプロシージャは 関 数 として 式 の 中 に 入 れることにより 呼 び 出 す プロシージャaを 実 行 すると 以 下 の 手 順 で 処 理 が 行 われる 1 aを 実 行 すると プロシージャ bを 呼 び 出 す 2 bでは s = wa(2, 3)の 行 で wa を 呼 び 出 す 3 wa は 引 数 として 整 数 型 の x と y を 必 要 とするが 呼 び 出 し 側 で wa(2, 3)としているため それぞれ 対 応 する x に 2 y に 3 が 代 入 される 4 wa が 実 行 される 5 x+y(すなわち 2+3)を 計 算 し その 答 え 5 をプロシージャ 名 と 同 じ 変 数 wa に 代 入 する この 値 がこのプロシージャの 値 となり 呼 び 出 し 側 に 返 される 6 呼 び 出 し 側 の wa(2, 3)は 5 に 置 き 換 えられる すなわち s = 5 と 同 等 になり s に 5 が 代 入 される 16 マクロで 定 義 した Function は マクロ 中 から 呼 び 出 して 使 用 することは 当 然 できるが sum や average のような 標 準 で 実 装 されて いる 関 数 と 同 等 に 使 用 することが 可 能 である 例 えば マクロで Functiuon goukei(s as Integer) As Integer のように 宣 言 してマクロ を 記 述 した 場 合 シートのセルの 式 として =goukei(3) のように 入 力 して 使 うことが 可 能 である - 27 -

7 この s の 値 は 次 の MsgBox によって 表 示 される 8 b の 実 行 が 終 了 する 9 a に 動 作 が 戻 る 10 マクロの 実 行 が 終 了 する このように Function は 戻 り 値 を1つ 返 すことができる 17 Sub は 戻 り 値 を 返 す 必 要 のない 場 合 に 使 われるが 引 数 は Function と 同 様 にとることができる なお 戻 り 値 が 必 要 ない 場 合 (す なわちプロシージャを Sub で 定 義 した 場 合 )は 呼 び 出 し 側 でプロシージャ 名 のあとに 付 けるカッ コは 不 要 である この 例 では a から b を 呼 び 出 し b から wa を 呼 び 出 した このように 呼 び 出 された 側 がさ い こ らに 呼 び 出 し 側 となり 別 のプロシージャを 呼 び 出 すような 形 式 を 入 れ 子 (ネスト) 18 と 呼 び さいき VB では 最 大 7レベルまでの 入 れ 子 が 可 能 である また 自 分 自 身 を 呼 び 出 すような 形 式 を 再 帰 と 呼 び 特 に 人 工 知 能 等 の 分 野 ではよく 用 いられる 17 2つ 以 上 の 戻 り 値 が 必 要 な 場 合 は グローバル 変 数 を 用 いる 方 法 がある 18 入 れ 子 構 造 には プロシージャの 中 でプロシージャを 呼 び 出 す 他 に if 文 の 中 の if 文 や for 文 の 中 の for 文 などでも 使 われる - 28 -

5 印 刷 ここでは マクロから 印 刷 する 方 法 を 説 明 する 5.1 印 刷 のための 基 本 操 作 5.1.1 範 囲 の 設 定 現 在 のシートの 印 刷 範 囲 を 設 定 するためには PageSetup.PrintArea プロパティを 使 用 し 以 下 のように 記 述 する ActiveSheet.PageSetup.PrintArea = "$A$3:$AX$60" この 命 令 によって 現 在 のシートの 印 刷 範 囲 (Print_Area)を A3 から AX60 19 に 設 定 することが できる 5.1.2 印 刷 の 命 令 シートの 内 容 を 印 刷 するためには 印 刷 のダイアログを 出 してから 印 刷 する 場 合 と ダイアロ グを 出 さずに 直 接 印 刷 する 場 合 が 考 えられる 印 刷 のダイアログを 出 さずに 直 接 印 刷 する 場 合 に は PrintOut メソッドを 使 い 以 下 のように 記 述 する ActiveWindow.SelectedSheets.PrintOut Copies:=1 この 中 で Copies:=1 は 印 刷 部 数 が1 部 であることを 示 している この 他 にもページの 指 定 など 資 料 14 のような 指 定 が 可 能 である 例 :3ページから5ページまで 2 部 部 単 位 (Collate)で 印 刷 する 場 合 ActiveWindow.SelectedSheets.PrintOut From:=3, To:= 5, Copies:=2, Collate:=True 問 5-1 11 ページから 15 ページまで 40 部 ページ 単 位 (11 ページを 40 部 12 ページを 40 部 の 順 番 )で 印 刷 したい 場 合 どのような 記 述 となるか 考 えなさい 19 範 囲 の 設 定 には $ を 付 けて 絶 対 番 地 としているが 設 定 時 に 明 示 的 に $ を 付 けなくても 自 動 的 に 絶 対 番 地 として 設 定 され る - 29 -

5.2 連 続 印 刷 全 生 徒 のデータを1 枚 のシートにデータベースのように 保 存 してある 場 合 別 のシートに 印 刷 の 書 式 を 作 って 1 名 ずつ 書 式 に 当 てはめて 印 刷 することがある この 場 合 1 名 印 刷 するごと に 表 示 する 出 席 番 号 を 変 更 し さらに 印 刷 を 繰 り 返 さなければならない これを 全 生 徒 のデー タを 順 次 読 み 出 しながら 自 動 で 印 刷 できると 便 利 である このために シートに 工 夫 をして 繰 り 返 し 命 令 を 使 って 印 刷 する ここでは prog3.xlsm の 結 果 個 票 シートを 使 用 し 以 下 に この 手 順 を 示 す 図 6 シートとデータの 例 5.2.1 結 果 個 票 シートの 作 成 シートを 作 成 する 上 でのポイントとしては 結 果 を 表 示 するデータの 番 号 をいずれかのセルに 設 定 し その 番 号 を 使 って INDEX 関 数 で 該 当 するデータを 呼 び 出 す 今 回 の 例 では 以 下 のよ うに セル B5 に 番 号 を 設 定 し そのセルの 値 から 基 礎 データの 表 の 値 から 該 当 するデータを 読 み 出 している E9: =INDEX( 基 礎 データ!$B$6:$X$45, $B$5, B9+3 ) INDEX 関 数 は3つの 引 数 をとる 基 礎 データ!$B$6:$X$45 元 となるデータの 範 囲 を 示 す $B$5 番 号 が 存 在 するセルを 指 定 することにより 行 を 指 定 B9+3 質 問 番 号 (B9)から 該 当 する 質 問 の 列 を 指 定 例 として B5 に 番 号 1を 指 定 すると 範 囲 B6:X45 の 中 の1 行 目 (すなわち シート 全 体 の6 行 目 )を 指 定 している さらに 例 の 場 合 は 質 問 番 号 B9 に1が 入 力 されているため 1+3=4 列 目 を 指 定 していることになり B6:X45 の4 列 目 は(B 列 を1として)E 列 を 指 定 することにな る この 関 数 によって 基 礎 データ シートの 範 囲 B6:X45 から 1 行 4 列 目 であるセルE6 のデータ 男 性 を 取 得 する 同 様 に 所 属 氏 名 あなたの 回 答 のセルをすべて 埋 めることが できる なお 正 解 の 列 は あらかじめ 正 解 となる 答 えが 入 力 してあり 結 果 の 列 は あなたの 回 答 と 正 解 が 等 しければ 正 解 そうでなければ 不 正 解 となる IF 関 数 が 入 力 してある さ - 30 -

らに 得 点 は 結 果 の 列 の 正 解 の 文 字 の 数 を 数 え その 値 を 10 倍 して 後 ろに 点 の 文 字 を 付 加 することにより 表 示 している 表 1 各 セルの 内 容 セル セルの 値 ( 式 ) B5 個 票 を 表 示 する 番 号 C5 =INDEX( 基 礎 データ!$B$6:$X$45, $B$5, 2 ) E5 =COUNTIF(G19:G28," 正 解 ")*10 & " 点 " E9 =INDEX( 基 礎 データ!$B$6:$X$45, $B$5, B9+3 ) F19 64( 問 11の 正 解 の 値 ) G19 =IF(E19=F19, " 正 解 ", " 不 正 解 " ) このようにして 作 成 した 結 果 個 票 では セル B5 の 番 号 の 値 だけを 変 化 させれば シート 内 のす べての 値 を 変 化 させることができるようになる 5.2.2 連 続 印 刷 マクロの 作 成 このようなシートを 作 成 することによって セル B5 の 値 を 変 更 しながら 印 刷 することによって 全 人 数 の 印 刷 が 可 能 となる マクロの 例 を 以 下 に 示 す Sub 印 刷 () Dim i As Integer Sheets(" 結 果 個 票 ").Select ActiveSheet.PageSetup.PrintArea = "$a$1:$h$29" For i = 1 To Range(" 人 数 ").Value Range("b5").Value = i ActiveWindow.SelectedSheets.PrintOut Copies:=1 繰 り 返 しのための 変 数 シートの 選 択 印 刷 範 囲 の 設 定 人 数 分 繰 り 返 す 番 号 欄 に 記 入 印 刷 のダイアログを 出 さずに 印 刷 Next i 範 囲 名 人 数 は あらかじめセル C2 につけられています このマクロでは 最 初 に シートを 選 択 して 印 刷 範 囲 を 指 定 している その 後 繰 り 返 し 命 令 により1 番 目 から 人 数 の 値 まで 1つずつ 増 やしながら セル B5 に 値 を 設 定 し 印 刷 命 令 を 実 行 している この 命 令 によって 人 数 分 のシートを 印 刷 することができるようになる このマクロを 利 用 して 40 名 の 生 徒 のデータを 印 刷 した 場 合 40 枚 分 の 印 刷 データが 次 々とプ リンタに 送 信 されることになる 資 料 15 問 5-2 上 記 のプロシージャを 実 行 するためのボタンを 設 定 しなさい - 31 -

5.3 印 刷 ダイアログの 表 示 印 刷 する 場 合 プリンタを 選 択 するなど 最 初 に 印 刷 のダイアログを 出 してから 印 刷 したい 場 合 がある このようなダイアログを 表 示 するためには 以 下 のように Application オブジェクト の Dialogs オブジェクトで xldialogprint を 指 定 しなければならない 20 ans = Application.Dialogs(xlDialogPrint).Show(arg12:=2) 図 7 印 刷 ダイアログの 例 この 命 令 では xldialogprint が 印 刷 のダイアログを 指 定 し そのダイアログを 表 示 (show)す る また その 戻 り 値 をブール 型 変 数 ans に 代 入 している 戻 り 値 は True または False のいずれ かで True の 場 合 は OK ボタンが 押 されて 印 刷 して 終 了 したとき False の 場 合 はキャンセルボタ ンが 押 されて 印 刷 せずに 終 了 したときの 値 となる さらに 引 数 arg12:=2 は 印 刷 対 象 (arg12)として 選 択 したシート(2)を 選 択 することを 表 している 21 この 他 の 引 数 は 資 料 16 のとおりである ここでは 最 初 の1 人 目 を 印 刷 する 場 合 にはダイアログを 表 示 し 2 人 目 以 降 はダイアログを 表 示 せず また マクロ 実 行 時 に 印 刷 開 始 の 確 認 を 行 うように マクロを 変 更 し 保 存 (prog3.xlsm) する 20 印 刷 のダイアログの 他 にも セルの 書 式 設 定 ダイアログや ファイルを 開 く ダイアログなどエクセルで 使 われる 各 種 ダイアログ を 表 示 させることができる エクセルのヘルプで XlBuiltInDialog を 参 照 のこと 21 上 記 の 命 令 は 戻 り 値 を 使 用 しない 場 合 以 下 のように 記 述 することも 可 能 である Application.Dialogs(xlDialogPrint).Show arg12:=2 このように VB では 戻 り 値 を 使 用 するときに 引 数 にカッコを 使 い 戻 り 値 を 使 用 しないときにはカッコを 記 述 しない 規 則 になっ ている - 32 -

Sub 印 刷 _その 2() Dim msg_ans As Integer Dim i As Integer Dim dl_ans As Boolean msg_ans = MsgBox(" 印 刷 を 開 始 します", vbokcancel, " 確 認!!") If msg_ans = vbcancel Then End Sheets(" 結 果 個 票 ").Select ActiveSheet.PageSetup.PrintArea = "$a$1:$h$29" Range("b5").Value = 1 dl_ans = Application.Dialogs(xlDialogPrint).Show(arg12:=2) If dl_ans = False Then End For i = 2 To Range(" 人 数 ").Value Range("b5").Value = i ActiveWindow.SelectedSheets.printout Copies:=1 ' 印 刷 確 認 メッセージボックスの 結 果 ' 繰 り 返 し 用 変 数 ' 印 刷 ダイアログの 結 果 'キャンセルが 押 されたら 終 了 ' 印 刷 するシートの 選 択 ' 印 刷 範 囲 の 設 定 ' 最 初 の1 人 目 の 番 号 を 番 号 欄 に 記 入 ' 印 刷 のダイアログを 出 す 'キャンセルが 押 されたら 終 了 ' 人 数 分 繰 り 返 す ' 番 号 欄 に 記 入 ' 印 刷 のダイアログを 出 さずに 印 刷 Next i このマクロでは 以 下 の 手 順 によって 印 刷 を 実 行 している 1 印 刷 確 認 のメッセージボックス(メッセージとして 印 刷 を 開 始 します ボタンの 種 類 を OK と Cancel タイトルを 確 認!! )を 表 示 2 キャンセルが 押 されて 戻 ってきた 場 合 には ENDによってマクロを 終 了 3 OK で 戻 ってきた 場 合 には 印 刷 するシートと 印 刷 範 囲 を 指 定 4 番 号 欄 に1を 設 定 することによって 1 人 目 の 結 果 を 表 示 5 印 刷 のダイアログを 表 示 6 キャンセルで 戻 ってきた 場 合 (dl_ans=false)には マクロを 終 了 7 OKで 戻 ってきた 場 合 には (1 人 目 の 印 刷 は 終 わったので)2 人 目 以 降 を 印 刷 - 33 -

6 エクセルシートの 取 り 込 み エクセルでは いくつかのファイルに 分 けてデータを 管 理 することがある また 生 徒 がそれぞれ に 記 入 した 多 数 のエクセルファイルを 対 象 に 同 一 の 操 作 を 行 いたいこともある ここでは このよ うな 場 合 に 利 用 できる マクロによるシートの 取 り 込 みを 取 り 扱 う 最 初 に 特 定 のフォルダ(ここでは sample とする)に 入 っているファイルすべてを 対 象 として そのファイルを 開 いたときに 最 初 に 表 示 されるシートを 1つのファイル( 同 じく prog4.xlsm とす る)に 集 める 場 合 を 考 える prog4.xlsm 取 り 込 むシート 01.xlsx 02.xlsx 03.xlsx 04.xlsx 05.xlsx アンケートの 回 答 (sample フォルダ 内 ) 図 8 ファイルの 取 り 込 み 6.1 ディレクトリの 操 作 読 み 込 むファイルを 指 定 する 場 合 そのファイル 名 を 指 定 しなければならない ファイル 名 が 分 かっている 場 合 はそのファイル 名 を 直 接 指 定 できるが ファイル 名 が 分 からない 場 合 何 らか の 方 法 で 指 定 しなければならない ディレクトリ 内 のファイル 名 を 取 得 するためには Dir 関 数 を 利 用 する この 関 数 では ディ レクトリ 内 のファイルの 名 前 を 順 に 取 得 することができる Dir 関 数 の 書 式 filename = Dir(パス 名, 属 性 ) パス 名 :フォルダ 名 やファイル 名 ( 省 略 可 能 ) 属 性 : 対 象 とするファイルの 属 性 の 合 計 値 ( 省 略 可 能 省 略 すると 標 準 ファイ ルとなる) vbnormal 標 準 ファイル vbreadonly 読 み 取 り 専 用 ファイル vbhidden 隠 しファイル vbsystem システムファイル vbvolume ボリュームラベル vbdirectory フォルダ Dir 関 数 を 最 初 に 呼 び 出 すときにパス 名 を 省 略 するとエラーとなる また パス 名 属 性 の 両 方 を 省 略 した 場 合 前 回 に 取 得 したファイル 名 の 次 のファイル 名 を 取 得 する 例 :D:ドライブのファイルとフォルダを 取 得 filename = Dir( d:\, vbnormal + vbdirectory) この Dir 関 数 を 用 いたファイルの 指 定 方 法 の 例 を 以 下 に 示 す このマクロでは まず ActiveWorkbok.Path によって 現 在 のファイル(prog4.xlsm)のある ディレクトリ 名 を 取 得 し 文 字 型 変 数 strpath に 代 入 している 次 に このディレクトリ 名 に \sample\ を 結 合 22 することによって prog4.xlsm のあるディレクトリの 中 の sample フォルダ を 指 定 している 次 に Dir 関 数 によって 指 定 したパスにある1つ 目 のファイル 名 を 取 得 し その 文 字 列 が 何 もなくなるまで(""でない 間 は) メッセージボックスでそのファイル 名 を 表 示 する 処 理 と 次 の ファイル 名 を 読 み 込 む 処 理 を 繰 り 返 す 22 文 字 列 の 結 合 には + も 使 うことができるが あいまいさを 避 けるため できる 限 り & を 用 いる - 34 -

Sub ファイル 名 の 取 得 () Dim strpath As String Dim strfn As String 'ファイル 名 一 覧 の 作 成 strpath = ActiveWorkbook.Path strpath = strpath & "\sample\" strfn = Dir(strPATH, vbnormal) Do While strfn <> "" MsgBox "ファイル 名 :" & strfn strfn = Dir() Loop 'ファイルへのパス 'ファイル 名 ' 現 在 のワークブックのパスを 取 得 'パス 名 に\sample\を 追 加 する ' 指 定 パスにあるファイルを 取 得 'ファイル 名 がなくなるまで 繰 り 返 す 'ファイル 名 をメッセージボックスで 表 示 ' 次 のファイル 名 を 読 み 込 み ' 繰 り 返 し 終 わり なお このマクロに 使 用 されている2つの 変 数 名 は 先 頭 が str で 始 まっている これは こ の 変 数 の 型 が String 型 であることを 表 しており このような 変 数 の 型 を 先 頭 に 付 ける 記 述 ( 接 頭 語 プレフィックス) 方 法 を ハンガリアン 記 法 と 呼 ぶ 以 前 は この 記 法 を Microsoft が 推 奨 していたことから 多 くのプログラムでこの 記 法 が 見 られる 6.2 シートの 取 り 込 み マクロを 利 用 せずに 1つのシートを 別 のエクセルファイルにコピーする 場 合 次 のような 手 順 を 行 う 1 コピー 元 となるエクセルファイルを 開 く 2 コピー 元 シートを 選 択 し 移 動 またはコピー を 選 ぶ 3 移 動 先 ブック 名 を 選 択 し 挿 入 先 シートを 選 び コピーする 4 ( 必 要 に 応 じて)コピーしたシートのシート 名 を 変 更 する 5 コピー 元 となったエクセルファイルを 保 存 せずに 閉 じる 多 くのシートを1つのファイルにまとめたい 場 合 3D 参 照 資 料 17 を 利 用 する 方 法 もある が 利 用 できる 関 数 が 限 定 されていたり 手 作 業 で 行 うには 非 常 に 時 間 がかかるため これをマ クロを 使 って 自 動 で 行 う このマクロは 次 のようになる Sub ファイルから 読 み 込 む() Dim strpath As String Dim strfn As String Dim cnt As Integer 'ファイルへのパス 'ファイル 名 ' 人 数 を 数 える strpath = ActiveWorkbook.Path strpath = strpath & "\sample\" strfn = Dir(strPATH, vbnormal) cnt = 0 Do While strfn <> "" cnt = cnt + 1 ' 現 在 のワークブックのパスを 取 得 'パス 名 に\sample\を 追 加 する ' 指 定 パスにあるファイルを 取 得 ' 人 数 をゼロにする 'ファイル 名 がなくなるまで 繰 り 返 す ' 人 数 を 増 やす Workbooks.Open Filename:=strPATH & strfn, ReadOnly:=True 'ファイルを 開 く1 ActiveSheet.Copy before:=workbooks("prog4.xlsm").sheets("tmp") 'シートをコピーする3 ActiveSheet.Name = "t" & cnt 'シート 名 を 変 更 する4 Workbooks(strFN).Close SaveChanges:=False strfn = Dir() Loop Range(" 人 数 ").Value = cnt 'ファイルを 保 存 しないで 閉 じる5 ' 次 のファイル 名 を 読 み 込 み ' 繰 り 返 し 終 わり ' 最 終 人 数 を 保 存 このマクロでは 先 の ファイル 名 の 取 得 プロシージャを 変 更 し 1~4を 挿 入 したもので ある(2は3に 含 まれる) また 取 得 した 人 数 を 数 えながら "t"とその 番 号 を 結 合 し シート - 35 -

名 (t1, t2, t3, )としている ファイル 名 は そのまま prog4.xlsm とする ファイルを 開 くための 命 令 Workbooks.Open は ここではファイル 名 (Filename := strpath & strfn パス 名 とファイル 名 を 結 合 したもの)と 読 み 込 み 専 用 (ReadOnly:=True)であることを 指 定 し エクセルのファイルを 開 く この 時 エクセルファイルを 開 くと 自 動 的 にそのファイルが 選 択 された 状 態 になる 次 の ActiveSheet.Copy 命 令 は 現 在 のシート(すなわち 上 記 で 開 き 選 択 された 状 態 になったシート)をコピーするが コピー 先 として ワー クブック prog4.xlsm のシート tmp の 前 (before)を 指 定 している この 命 令 によって コピー 後 のシートが 選 択 された 状 態 となる さらに ActiveSheet.Name によって 選 択 されたシート( 今 回 は コピー 後 のシート)の 名 前 を t と 人 数 を 文 字 として 結 合 したものに 変 更 して いる 最 後 に 先 ほどオープンしたワークブック(ファイル 名 :strfn)を 保 存 せ ず(SaveChanges:=False)に 閉 じ(Workbooks.Close) 次 のファイル 名 を 取 得 し 繰 り 返 しを 行 う このように 多 数 のファイルに 分 かれたシートを1つのファイルに 結 合 することができる Open メソッドの 書 式 Workbooks.Open Filename:=ファイル 名, ReadOnly:= 読 み 書 きモード ファイル 名 :パス 名 を 含 むファイル 名 読 み 書 きモード:ファイルを 読 み 込 みのみ(True)か 読 み 書 き 可 (False) とするか Close メソッドの 書 式 ワークブック 名.Close SaveChanges:= 保 存 の 有 無 ワークブック 名 : 閉 じるワークブック(ファイル 名 パスは 不 要 ) 保 存 の 有 無 : 保 存 して 終 了 (True)か 保 存 せずに 終 了 (False)か Copy メソッドの 書 式 コピー 元 シート 名.Copy Before :=コピー 先 シート 名 コピー 元 シート 名.Copy After :=コピー 先 シート 名 コピー 元 シート 名 :コピーを 行 うシート コピー 先 シート 名 : 貼 り 付 け 先 のシート 名 (ワークブック 名 を 指 定 する ことも 可 ) コピー 先 シートの 前 に 貼 り 付 ける(Before)か 後 に 貼 り 付 ける(After) のいずれかを 選 択 する Name プロパティの 設 定 シート 名.Name = 新 しいシート 名 シート 名 : 名 前 を 変 更 するシート 新 しいシート 名 : 変 更 後 の 名 前 問 6-1 何 枚 のシートまで 結 合 できるか 試 しなさい 図 9 ファイル 読 み 込 み シート 結 合 の 途 中 経 過 - 36 -

6.3 基 礎 データ 表 の 作 成 ここまでに 複 数 のエクセルシートから 1つのファイルにまとめる 方 法 を 示 した(prog4.xlsm) ここでは このファイル 内 の 全 シートのデータを 1つの 表 としてまとめる 方 法 を 説 明 する Sub 表 の 作 成 () Dim i As Integer Dim syozoku As String Dim namae As String Sheets(" 基 礎 データ").Select Range("b6:z100").Value = "" For i = 1 To Range(" 人 数 ").Value syozoku = Sheets("t" & i).range("c6").value namae = Sheets("t" & i).range("e6").value ' 繰 り 返 し 変 数 何 番 目 を 処 理 しているか ' 所 属 名 ' 氏 名 ' 集 計 先 シートの 選 択 ' 集 計 先 セルのクリア ' 人 数 分 繰 り 返 す ' 所 属 を 取 得 ' 氏 名 を 取 得 Next i Sheets(" 基 礎 データ").Range("b5").Offset(i, 0).Value = i Sheets(" 基 礎 データ").Range("b5").Offset(i, 1).Value = syozoku Sheets(" 基 礎 データ").Range("b5").Offset(i, 2).Value = namae Sheets("t" & i).select Range("e9:e28").Copy Sheets(" 基 礎 データ").Select Sheets(" 基 礎 データ").Range("b5").Offset(i, 3).Select Selection.PasteSpecial Paste:=xlPasteFormulas, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=True ' 番 号 を 集 計 先 に 転 記 ' 所 属 を 集 計 先 に 転 記 ' 氏 名 を 集 計 先 に 転 記 ' 転 送 元 シートの 選 択 'データの 範 囲 をコピー ' 集 計 先 シートの 選 択 ' 集 計 先 セルの 選 択 ' 集 計 先 シートへ 貼 り 付 け ' 繰 り 返 しここまで このマクロのポイントは 以 下 の3 点 である 1) 集 計 先 シートの 集 計 表 をクリアすること これは このマクロを 複 数 回 実 行 したとき 後 から 実 行 したときのほうが 人 数 が 少 なかっ た 場 合 前 回 のデータが 残 ってしまうことを 防 ぐ 必 要 があるためである ここでは 範 囲 を b6:z100 として 広 めの 範 囲 を 消 去 している 2)シートから 変 数 に 値 を 読 み 出 し それを 別 のシートに 書 き 込 むための 方 法 ここでは 所 属 と 氏 名 を 取 得 しているが 対 象 となるシート 名 は 毎 回 変 化 するため そ のシート 名 を Sheets オブジェクトで "t"と 番 号 を 結 合 した 名 前 として 指 定 している さ らに コピー 先 は 1つのシートであるが 行 が 変 わるため offset によって 上 から 行 を 変 化 させながら 値 を 記 入 している 3)セルのコピーアンドペースト 最 初 に コピー 元 となるシートを 選 択 し データの 範 囲 を Copy メソッドでコピーしてい る この Copy メソッドは 先 のシートコピーのためのメソッドと 同 じ 名 前 であるが ここ ではシート 名 ではなく セルの 範 囲 を 指 定 している その 後 コピー 先 シートを 選 択 して コピー 先 セルを1つ 選 択 している 貼 り 付 けは PasteSpecial メソッドを 使 用 して 貼 り 付 けの 条 件 を 指 定 している 特 に コピー 元 のデータは 列 で 与 えられるが コピー 先 は 行 となるため 行 と 列 の 変 換 (Transpose:=True)を 指 定 している - 37 -

Copy メソッドの 書 式 セルの 範 囲.Copy セルの 範 囲 :クリップボードへコピーする 範 囲 を Range 等 で 指 定 PasteSpecial メソッドの 書 式 セルの 範 囲.PasteSpecial Paset:= 貼 り 付 ける 部 分, Operation:= 貼 り 付 け 操 作, SkipBlanks:= 空 白 セルの 処 理, Transpose:= 行 列 入 れ 替 え セルの 範 囲 :クリップボードから 貼 り 付 けるセルの 指 定 貼 り 付 ける 部 分 : 数 式 書 式 入 力 規 則 すべてなど 何 を 貼 り 付 けるか 指 定 貼 り 付 け 操 作 : 貼 り 付 けるとき 数 値 データがどのように 計 算 されるか 指 定 空 白 セルの 処 理 : 空 白 セルを 貼 り 付 ける(False) 貼 り 付 けない(True) 行 列 入 れ 替 え: 行 と 列 を 入 れ 替 える(True) 入 れ 替 えない(False) 問 6-2 集 計 表 ( 基 礎 データ)の 行 列 を 反 転 せず そのまま 貼 り 付 けて 利 用 するマクロを 作 成 しな さい(すなわち 全 員 分 のデータが 縦 に 並 ぶ) - 38 -

7 ユーザーフォームの 作 成 これまでに 作 成 した 個 票 の 印 刷 ファイル 読 み 込 み シートデータの 統 合 のそれぞれの 処 理 を 順 に 実 行 するためのユーザーフォームを 作 成 する 7.1 ユーザーフォームとは これまで 使 用 したダイアログボックスを 表 示 する MsgBox は メッセージの 内 容 とボタンの 種 類 程 度 しか 変 更 することはできなかった オリジナルのメニューや エクセルの 表 形 式 以 外 の 出 力 をダイアログボックスとして 用 いる 場 合 ユーザーフォーム を 作 成 して 使 用 する このフォー ムには テキストやボタン チェックボックスなどの 部 品 (コントロール)を 自 由 な 大 きさ 位 置 に 貼 り 付 けて 使 用 することができる 7.2 ユーザーフォームの 作 成 ここでは これまでに 作 成 した 3 つの 処 理 を 選 択 して 実 行 するようなフォームを 作 成 する こ こでは prog5.xlsm を 使 用 する 図 10 完 成 したユーザーフォーム (1) シート 基 礎 データ のセルJ2からM2に 以 下 のように 入 力 し 設 定 する セル 内 容 名 前 罫 線 J2 処 理 (なし) 上 下 左 右 K2 ( 空 欄 ) 読 込 処 理 上 下 左 右 L2 ( 空 欄 ) 表 作 成 処 理 上 下 左 右 M2 ( 空 欄 ) 印 刷 処 理 上 下 左 右 (2) メニューの 挿 入 から ユーザーフォーム をクリックする - 39 -

(3) フォーム 内 で 右 クリックし プロパティを 表 示 する (4) (オブジェクト 名 )を syori Captionを 処 理 の 選 択 Heightを 280 Widthを 390 とする (5) ツールボックスから (ラベル)をクリックし フォームにラベルを 貼 り 付 ける さら に プロパティで 次 の 表 のように 設 定 する ラベルオブジェクトは 画 面 に 値 (Caption) を 表 示 するためのものである 項 目 値 Caption アンケート 集 計 システム Font MS UI Gothic サイズ:18 Left 24 Top 24 Height 24 Width 204 Left 以 下 は 参 考 値 である この 通 りでなくてもよい オブジェクトの 左 上 の 点 の 座 標 :(Left, Top) 横 縦 のサイズ :(Width, Height) - 40 -

(6) 同 様 に もう1つラベルを 追 加 し Captionを どの 処 理 を 行 いますか? と 設 定 する (7) 図 のようにチェックボックスを3つ 追 加 し それぞれ 以 下 のようにプロパティを 設 定 する チェックボックスは 項 目 を 選 択 する 場 合 に 用 いられ チェックが 入 っている 場 合 True チェックが 入 っていない 場 合 Falseの 値 を 持 つ CheckBox1 CheckBox2 CheckBox3 (オブジェクト 名 ) readfile maketable printout Caption ファイル 読 み 込 み 基 礎 データ 表 の 作 成 個 票 の 印 刷 Height 15 15 15 Left 40 40 40 Top 60 80 100 (8) チェックボックス ファイル 読 み 込 み で 右 クリックし コードの 表 示 を 選 択 する なお ここで 表 示 されたコードウィンドウは 左 のプロジェクトウィンドウを 見 ると 分 かる 通 り フォーム syori に 付 与 されるコードであり これまでマクロを 記 述 してきた 標 準 モジュール Module1 とは 異 なる すなわち フォーム syori と 標 準 モジュール Module1 は 互 いに 相 手 の 変 数 やモジュール 等 を 直 接 参 照 することができない 点 に 注 意 が 必 要 である - 41 -

(9) 以 下 のコードを 入 力 する Private Sub readfile_click() このコードは シート 基 礎 データ のセル K2 に(1)で 付 けた 名 前 読 込 処 理 を 利 用 し そ のセルの 値 を syori.readfile(syori オブジェクトの readfile オブジェクト すなわち 先 ほ ど 追 加 したチェックボックス)の 値 (Value)とする 命 令 である (10) 同 様 に チェックボックス 基 礎 データ 表 の 作 成 個 票 の 印 刷 で コードを 入 力 する Private Sub maketable_click() Range(" 表 作 成 処 理 ").Value = syori.maketable.value Private Sub printout_click() Range(" 読 込 処 理 ").Value = syori.readfile.value Range(" 印 刷 処 理 ").Value = syori.printout.value (11) ここまでで フォームの 動 作 を 確 認 する 最 初 に シート 基 礎 データ のJ2からM2が 見 えるように 画 面 上 に 表 示 されているウィンドウを 整 理 移 動 する 続 いて フォーム syori のウィンドウを 選 択 した 状 態 で 実 行 ボタン をクリックすると syoriフォームが 実 行 状 態 で 表 示 される このウィンドウを 先 ほどのJ2からM2の 下 に 移 動 し チェックボックス のチェックを 入 れると 対 応 するセルがTRUEに チェックを 外 すとFALSEにと 連 動 して 動 作 することを 確 認 する 終 了 は 右 上 の をクリックする - 42 -

(12) フォームの 下 部 に コマンドボタンを2つ 追 加 し 以 下 のように 設 定 する CommandButton1 CommandButton2 (オブジェクト 名 ) jikko syuryo Caption 実 行 保 存 して 終 了 Height 18 18 Left 30 150 Top 132 132 Width 72 72 (13) 実 行 をダブルクリックしてコード 入 力 画 面 を 表 示 し 以 下 のコードを 入 力 する Private Sub jikko_click() Range(" 読 込 処 理 ").Value = syori.readfile.value Range(" 表 作 成 処 理 ").Value = syori.maketable.value Range(" 印 刷 処 理 ").Value = syori.printout.value Unload Me このマクロは 実 行 ボタンがクリックされた 時 の 処 理 として 各 チェックボックスの 状 態 を 改 めてシートの 該 当 領 域 に 読 み 込 み フォーム 自 身 (Me)をメモリから 削 除 (Unload)することに よって このフォームの 処 理 を 終 了 する - 43 -

(14) 同 様 に 保 存 して 終 了 をダブルクリックし 以 下 のコードを 入 力 する Private Sub syuryo_click() ActiveWorkbook.Save DoEvents If Workbooks.Count <= 1 Then Application.Quit End If DoEvents ThisWorkbook.Close False ' 保 存 する 'OS の 処 理 の 実 行 'Excel を 終 了 する 'OS の 処 理 の 実 行 'Book を 閉 じる 保 存 して 終 了 では 最 初 に 現 在 のワークブックを 保 存 (ActiveWorkbook.Save)し 残 りの ワークブックが1つ 以 下 の 場 合 は エクセル 自 体 を 終 了 する このために Application.Quit と ThisWorkbook.Close をこの 順 に 実 行 しなければならない 各 処 理 の 間 には 念 のため DoEvents 命 令 を 入 れ 各 処 理 を 発 行 した 後 OS がそのメッセージ 処 理 を 受 け 取 り 実 行 するようにしてい る ここまでで ユーザーフォーム syori の 設 定 が 終 了 する コードおよびフォームは 以 下 の 通 り となる Subはどの 順 序 でもよい - 44 -

(15) 標 準 モジュールを 選 択 し 次 のコードを 入 力 する Sub 開 始 () Sheets(" 基 礎 データ").Select Range("k2:m2").Value = False syori.show If Range(" 読 込 処 理 ").Value Then Call ファイルから 読 み 込 む If Range(" 表 作 成 処 理 ").Value Then Call 表 の 作 成 If Range(" 印 刷 処 理 ").Value Then Call 印 刷 フォームを 呼 び 出 すために ここでは 標 準 モジュールに 開 始 プロシージャを 作 成 する この 中 では 最 初 に 処 理 内 容 を 記 録 する 基 礎 データ シートを 選 択 し 各 処 理 の 初 期 値 とし て False を 設 定 する その 後 フォーム syori を 表 示 (Show 呼 び 出 し)して 処 理 を 委 譲 し ている フォーム syori が 終 了 すると 開 始 マクロが 継 続 し 各 処 理 の 状 態 が True であれば その 処 理 を 呼 び 出 し(Call)ている (16) エクセルを 起 動 したときに 自 動 的 に 開 始 プロシージャを 実 行 するようにするため 以 下 のコードを 標 準 モジュールに 入 力 する Sub auto_open() Call 開 始 プロシージャ auto_open()は 特 別 なプロシージャ 名 で このファイルを 起 動 したときに 自 動 的 に 実 行 したい 処 理 を 記 述 することによって 自 動 で 実 行 を 開 始 することができる 23 (17) ここまで 作 成 したエクセルのファイルを 上 書 き 保 存 して 一 度 終 了 し 改 めて 起 動 して ユー ザーフォームが 自 動 で 起 動 することを 確 認 する 23 この 他 にも 終 了 時 に 自 動 実 行 する Auto_Close などもある - 45 -

8 その 他 の 例 8.1 問 題 と 解 答 のシャッフル あらかじめ 用 意 されたいくつかの 問 題 を 順 番 を 変 えて 出 題 したい 場 合 用 意 された 問 題 を シャッフルして 作 成 すればよい ここでは このような 問 題 用 紙 および 解 答 を 作 成 する 手 順 につ いて 説 明 する (1) 新 規 作 成 で 新 しいブックを 作 成 する ファイル 名 問 題 作 成.xlsm として 保 存 (2) シート 問 題 一 覧 と 問 題 用 紙 を 作 成 し 問 題 一 覧 に 問 題 を 用 意 する (3) シート 問 題 用 紙 を 作 成 する 改 ページプレビューで 試 験 問 題 を1ページ 目 正 解 を 2ページ 目 に 設 定 する (4) 開 発 タブからVisualBasicを 起 動 し 標 準 モジュールを 挿 入 する - 46 -

(5) 標 準 モジュールに 以 下 のコードを 入 力 する Sub 問 題 作 成 () Dim i As Integer ' 繰 返 し 用 変 数 Sheets(" 問 題 一 覧 ").Range("b3:b12").Copy ' 問 題 の 原 本 を Sheets(" 問 題 用 紙 ").Range("b7:b16").PasteSpecial ' 問 題 用 紙 にコピー Sheets(" 問 題 一 覧 ").Range("c3:c12").Copy ' 解 答 の 原 本 を Sheets(" 問 題 用 紙 ").Range("g7:g16").PasteSpecial ' 問 題 用 紙 の2 枚 目 にコピー Sheets(" 問 題 用 紙 ").Select Randomize For i = 1 To 100 t1 = Int(Rnd() * 10) + 1 t2 = Int(Rnd() * 10) + 1 Range("B" & (t1 + 6)).Copy Range("j1").PasteSpecial Range("G" & (t1 + 6)).Copy Range("j2").PasteSpecial ' 問 題 用 紙 を 選 択 ' 乱 数 を 初 期 化 ' 以 下 の 処 理 を100 回 '1つ 目 の 乱 数 生 成 '2つ 目 の 乱 数 生 成 '1つ 目 の 問 題 をコピーして 'j1へ 避 難 '1つ 目 の 正 解 をコピーして 'j2へ 避 難 Range("B" & (t2 + 6)).Copy '2つ 目 の 問 題 を Range("B" & (t1 + 6)).PasteSpecial '1つ 目 の 欄 に 貼 り 付 け Range("G" & (t2 + 6)).Copy '2つ 目 の 正 解 を Range("G" & (t1 + 6)).PasteSpecial '1つ 目 の 欄 に 貼 り 付 け Range("j1").Copy ' 避 難 した 問 題 を Range("B" & (t2 + 6)).PasteSpecial '2つ 目 の 欄 に 貼 り 付 け Range("j2").Copy ' 避 難 した 正 解 を Range("G" & (t2 + 6)).PasteSpecial '2つ 目 の 欄 に 貼 り 付 け Next i 'ここまで 繰 り 返 す このマクロでは 問 題 の 元 となる 問 題 一 覧 シートから 問 題 及 び 正 解 を 問 題 用 紙 にコピーし 問 題 用 紙 側 で 問 題 と 正 解 をいっしょに 100 回 シャッフルしている シャッフルは 2つの 乱 数 24を 生 成 し その 値 を 問 題 番 号 として 該 当 する 問 題 と 正 解 を 入 れ 替 えている 問 題 と 正 解 の 入 れ 替 えは セルの 値 をコピーして 貼 り 付 けるだけで 済 むが 同 時 の 交 換 はできないため セル J1 と J2 を 一 時 退 避 領 域 として 使 用 し 1つ 目 の 問 題 を J1 へ 空 いた1つ 目 の 問 題 領 域 に2つ 目 の 問 題 をコピー 空 いた J2 の 問 題 領 域 に 退 避 した 問 題 をコピー としなければならない 24 次 に 出 現 する 値 が 予 測 できない でたらめな 数 のこと コンピュータは でたらめ ができないため 計 算 式 を 使 って 乱 数 のよう に 見 える 値 を 返 す このような 乱 数 を 疑 似 乱 数 と 呼 ぶ また この 計 算 の 最 初 に 使 われる 値 を 設 定 することを 乱 数 の 初 期 化 と 呼 ぶ 乱 数 値 は Single 型 で 0 以 上 1 未 満 の 値 を 返 す - 47 -