1/10 ページ Excel VBA Excel VBAに 関 すすノノノノをUUししす しすま 便 便 だだ 思 っっ 内 容 記 録 ししししっし 内 容 を 書 し 込 みしす まるの 記 事 検 索 検 索 語 句 検 索 まるの 投 稿 記 事 (01/05)4データの 取 得 (セルの 数 字 ) (01/04)4データの 取 得 (データ 範 囲 ) (06/29)マクロ 実 行 中 の 警 告 メッセ ージを 表 示 しない (06/15)VBAで 改 行 (06/08)ショートカットキーにマクロ を 登 録 する (06/07) 自 動 記 録 マクロで 作 れな い 処 理 (05/27)Option Explicit (05/17)マクロ 記 録 (05/14)マクロの 自 動 実 行 (05/13)3セルの 操 作 (05/12)2シートの 操 作 (05/11)1ブックの 操 作 ( 作 成 保 存 ) (05/10)VBAの 基 本 用 語 と 基 本 構 文 2005 年 01 月 05 日 4データ データの 取 得 (セル セルの 数 字 ) セルのデータを 取 得 するには ValueプロパティやTextプロパティを 使 います 両 者 を 厳 密 に 使 い 分 けなければならないケースは 少 ないと 思 われますが プロパティを 省 略 したときは Valueプロパティが 指 定 されたと 判 断 されますので Range("A1")とValueプ ロパティを 省 略 することもあります セル セルの 数 字 を 取 得 する セルに 入 力 されている 数 字 を 取 得 するには RangeオブジェクトのValueプロパティを 設 定 します 例 えば セルA2に 入 力 されている 数 字 に1を 加 えた 数 字 をセルにA3に 入 力 する 方 法 は 次 の 通 りです Sub sample1() Dim Number NUmber = Range("A2").Value Range("A3").Value = Number + 1 ここでは セルA2の 数 字 を 変 数 Numberに 格 納 しています その 後 セルA3には 変 数 Numberの 値 に1を 加 えた 数 字 を 入 力 します 変 数 を 使 わないで 以 下 のように 書 くこともできます Sub sample2() Range("A3").Value =Range("A2").Value + 1 posted by まる at 13:11 Excel 2005 年 01 月 04 日 4データ データの 取 得 (データ 範 囲 ) データ 範 囲 を 取 得 する ワークシートに 存 在 するデータの 範 囲 が 不 定 のことはよくあります データ 範 囲 が 不 定 の 時 その 範 囲 を 取 得 する 便 利 な 方 法 にEndメソッドの 使 用 がありま す Endは 列 または 行 の 終 端 のセルを 返 すメソッドです 構 文 は 以 下 の 通 りです object.end(direction) objectには 基 準 になるセルを 指 定 directionは 検 索 の 方 向 を 指 定 xltoleft: 左 へ xltoright: 右 へ xlup: 上 へ
2/10 ページ Sheet1のA 列 の 終 端 セルの 行 を 取 得 する e=worksheets("sheet1").range("a1").end(xldown).row Sheet1のA 列 (A1からはじまる) 選 択 範 囲 を 空 白 のセルに 達 するまで 延 長 するプロシー ジャ A 列 でデータのあるセル 全 てを 選 択 する Sub allselect( ) e=worksheets("sheet1").cells(1,1).end(xldown).row Worksheets("sheet1").Range(Cells(1,1),Cells(e,1)).Select ただし Endメソッドは 空 白 のセルに 出 会 うとそこを 終 端 と 判 断 するので 空 白 の 先 にまた データの あるセルが 続 く 場 合 別 の 工 夫 が 必 要 になります 例 えば 下 表 のような 場 合 A2がA 列 の 終 端 セル となってしまいます A B C 1 3 2 9 3 4 5 空 白 が 途 中 にあっても データの 終 端 セルをみつける 方 法 は 最 終 セルからさかのぼって 調 べれば 解 決 できます A 列 の 終 端 セルの 行 の 取 得 は e=worksheets("sheet1").range("a65536").end(xlup).row セルの 行 数 は65536 行 なので(EXCEL97 以 上 ) 最 終 セルからさかのぼって 終 端 セルを みつけます posted by まる at 10:50 Excel 2004 年 06 月 29 日 マクロ 実 行 中 の 警 告 メッセージを 表 示 しない DisplayAlerts プロパティ 関 連 項 目 対 象 使 用 例 アプリケーション 情 報 True の 場 合 マクロの 実 行 中 に 特 定 の 警 告 や メッセージを 表 示 します 値 の 取 得 および 設 定 が 可 能 です ブール 型 (Boolean) の 値 を 使 用 します 解 説 このプロパティの 既 定 値 は True です マクロの 実 行 中 に ユーザーに 入 力 を 促 すメッセー ジや 警 告 メッセージを 表 示 させないようにするには このプロパティに False を 設 定 してくだ さい このプロパティを False に 指 定 した 場 合 クロス プロセス コードの 実 行 中 以 外 は コードの 終 了 時 に 自 動 的 に True に 変 更 されます ブックを 変 更 し SaveAs メソッドで 既 存 のファイルを 上 書 きする 場 合 上 書 きの 警 告 メッセ ージは 既 定 値 では 表 示 されません DisplayAlerts プロパティが True に 設 定 されている 場
3/10 ページ 合 に 表 示 されます 使 用 例 次 の 使 用 例 は Book1.xls ブックを 閉 じますが 変 更 の 保 存 を 確 認 するメッセージを 表 示 し ません Book1.xls の 内 容 の 変 更 は 保 存 されません Application.DisplayAlerts = False Workbooks("BOOK1.XLS").Close Application.DisplayAlerts = True 次 の 使 用 例 は 実 行 中 でないアプリケーションへの DDE チャネルを 開 こうとしたときのメッ セージを 表 示 しないようにします Application.DisplayAlerts = False channelnumber = Application.DDEInitiate( _ app:="winword", _ topic:="c:\winword\formletr.doc") Application.DisplayAlerts = True Application.DDEExecute channelnumber, "[FILEPRINT]" Application.DDETerminate channelnumber Application.DisplayAlerts = True posted by まる at 14:41 Excel 2004 年 06 月 15 日 VBAで 改 行 VBAプログラムは 改 行 を 入 れた 位 置 が 一 文 の 終 わりとなります そのため プログラムは 処 理 一 つにつき 一 行 ずつ 書 いていくことになります また VBAの 改 行 文 字 には 制 限 があって 一 定 の 数 以 上 は 使 えません ちなみにC 言 語 では 途 中 にどれだけ 改 行 を 入 れても セミコロン ; で 終 端 するまでは 一 文 と 判 断 されますよね プログラムの 処 理 一 つを 何 行 かに 分 けて 書 くときには 行 継 続 文 字 (VBA ではこれを 改 行 文 字 と 呼 びます)である" _" ( 半 角 空 白 &アンダースコア)を 行 の 終 わりに 入 れて 繋 ぎ ます 例 : sample = "これは" & _ " 改 行 例 です " ActiveCell.Value = sample また プログラムの 中 では MsgBox 等 で 文 字 列 を 表 示 する 際 に 改 行 を 入 れる 方 法 として Chr 関 数 があります Chr 関 数 は 文 字 コードを 指 定 して 文 字 を 返 すもので,Chr(10)により 改 行 動 作 を 行 ないま す. 例 : Sub test() Msg1 = "これは" & Chr(10) Msg = Msg1 & " 改 行 例 です " MsgBox Prompt:=Msg, _ Buttons:=vbOKOnly + vbexclamation
4/10 ページ posted by まる at 06:57 Excel 2004 年 06 月 08 日 ショートカットキーにマクロ マクロを 登 録 する ショートカットキーの 登 録 時 には 大 文 字 と 小 文 字 が 区 別 されます たとえば [Caps Lock]キーがオンの 状 態 で T と 大 文 字 で 登 録 すると [Ctrl]キー+[Shift] キー+[T]キーの 組 み 合 わせになります 一 方 マクロを 登 録 したショートカットキーの 実 行 時 には [Caps Lock]キーの 状 態 とは 無 関 係 に 大 文 字 と 小 文 字 の 区 別 ではなく [Shift]キーが 押 されているかどうかが 区 別 されま す また Excelに 割 り 当 てられている 既 定 のショートカットキーとマクロに 登 録 したショートカット キーが 重 複 した 場 合 には マクロに 登 録 したショートカットキーが 優 先 されます たとえば Excelで[Ctrl]+[C]キーは コピーコマンドとして 利 用 できます しかし マクロのショートカットキーとして[Ctrl]+[C]キーを 登 録 した 場 合 そのマクロの 実 行 コマンドが 優 先 されます また マクロの 登 録 先 としては 次 の4つに 登 録 が 可 能 です ショートカットキー 図 形 オブジェクト ツールバー ツールバーのボタン メニュー 項 目 posted by まる at 06:58 Excel 2004 年 06 月 07 日 自 動 記 録 マクロで 作 れない 処 理 マクロを 記 録 で 生 成 される 自 動 記 録 マクロを 見 れば 必 要 な 処 理 をする 関 数 の 名 前 や 使 い 方 がわかって 便 利 です 本 の 解 説 などでも たいてい 自 動 記 録 マクロから 始 めているようですね しかし プログラミングでは 最 も 重 要 で 自 動 記 録 ではどうしても 作 れないものが2つありま す それは 条 件 分 岐 と 繰 り 返 しです VBAでは 条 件 分 岐 をIfやSelectで 繰 り 返 しをDo...LoopやFor...Nextなどで 実 行 しま す 繰 り 返 しはループとも 呼 ばれ 無 限 に 繰 り 返 し 続 けるわけにはいかないので どこで 止 める かを 指 定 して 使 用 します 従 って ループには 条 件 分 岐 が 伴 います 条 件 分 岐 と 繰 り 返 しを 覚 えれば 後 はこれを 組 み 合 わせるだけで マクロプログラミングは 半 分 できたようなものです しかし この 条 件 分 岐 と 繰 り 返 しがなぜ 自 動 記 録 マクロで 作 れないかというと コンピュータ には 物 事 を 選 択 する 判 断 をする といった 抽 象 的 な 処 理 ができないからです プログラミングが 自 動 化 できない 要 因 である 永 遠 の 課 題 かもしれませんね この 他 にも Excel 自 動 記 録 マクロでは 思 わぬ 操 作 が 記 録 されたり 記 録 されなかったりと いうことがあります 自 動 記 録 される 操 作 されない 操 作 には 次 のようなものがあります 自 動 記 録 される 操 作 スクロールバーで 画 面 をスクロールする 操 作 ツールバーや 作 業 ウィンドウを 表 示 したり 閉 じる 操 作
5/10 ページ 自 動 記 録 されない 操 作 ツールバーを 移 動 する 操 作 ツールバーのサイズを 変 更 する 操 作 ダイアログボックスを 表 示 / 非 表 示 する 操 作 IME( 日 本 語 入 力 システム)の 起 動 や 文 字 の 変 換 操 作 Excel 以 外 のアプリケーションで 行 なった 操 作 posted by まる at 16:34 Excel 2004 年 05 月 27 日 Option Explicit ExcelVBAのプログラミングの 中 身 を 見 ると 1 行 目 に Option Explicit と 記 述 されていることがあります Option Explicit の 意 味 は プロシージャ(マクロ 内 の 処 理 ) 内 で 使 用 する 変 数 は 先 に 宣 言 しておかなければならないという 宣 言 文 です 自 分 でモジュールの 先 頭 に 記 述 すれば 良 いのですが VBEの ツール の オプション を 選 択 して [ 変 数 の 宣 言 を 強 制 する(R)]をチェックしておけば 新 しいモジュールを 作 成 する 時 に 自 動 的 に 書 き 込 まれます ( 初 期 状 態 ではチェックがついていません) これはチェックすべきです なぜかというと Option Explicit を 宣 言 しない 場 合 プロシージャ 内 で 使 われる 新 しいキーワードが 自 動 的 に 新 しい 変 数 として 扱 われるからです 要 は 1 文 字 間 違 えてもエラーにもならず 新 しい 変 数 として 認 識 されます マクロが 正 しい 動 作 を 行 なわず エラーにもならないので 原 因 究 明 が 遅 れてしまうこと があります posted by まる at 12:59 Excel 2004 年 05 月 17 日 マクロ 記 録 VBA はエクセルやワードといったオフィス 製 品 に 搭 載 されているプログラム 言 語 です しかし プログラミングというとうーんと 考 えてしまいますよね でも 心 配 する 必 要 はぜん ぜんありません なぜなら エクセルには マクロ 記 録 という エクセルでの 操 作 を そのままVBAに 出 力 す る 大 変 便 利 な 機 能 があるからです これは マクロ 記 録 機 能 を 使 えば VBAやプログラムの 知 識 がなくても VBAを 使 ったプ ログラム を 作 ることができる ということです それでも プログラムを 作 るほど 必 要 ではない と 思 っている 方 もいることでしょう しかし エクセルの 作 業 の 中 に 毎 回 同 じことをしている 面 倒 くさい 操 作 がある というも のがないでしょうか? そんなとき これらの 操 作 を 簡 単 に 実 行 できる マクロ が 役 立 つのです マクロを 作 成 実 行 する 方 法 は とても 簡 単 で エクセルの 基 本 操 作 ができれば 誰 でも 作 る ことができるものなので ぜひ マクロ 作 成 のコツを 習 得 し いつもの 作 業 をもっと 楽 にしま しょう まるも 最 初 はやりたいことを 自 動 記 録 することから 始 めました 記 述 されたコードをエディタで 眺 めながら 内 容 を 理 解 していったものです
6/10 ページ マクロ 実 行 で 簡 単 自 動 化 簡 単 なエクセル 操 作 の 組 み 合 わせでも 何 度 も 繰 り 返 すとなると 間 違 いやすくなるだけでな く 何 よりも 面 倒 です こんなときはエクセルの マクロの 記 録 機 能 を 利 用 すると 便 利 です Excelのセキュリティレベルの 設 定 の 内 容 により マクロの 警 告 画 面 が 表 示 される 場 合 が あります マクロの 警 告 画 面 は セキュリティレベル 設 定 を 低 にすると 表 示 されず マクロ が 有 効 になります また セキュリティレベル 設 定 を 高 以 上 に 設 定 した 場 合 はマクロの 警 告 画 面 が 表 示 せず マクロが 無 効 となります マクロの 記 録 マクロ とは あらかじめアプリケーションでの 操 作 を 登 録 しておき いつでも 実 行 できる ようにしたものです エクセルでは マクロ 記 録 機 能 によって 操 作 内 容 の 登 録 ができま す マクロを 作 るための 準 備 マクロを 記 録 する 前 に 表 示 する[マクロの 記 録 ]ダイアログの 説 明 をします このダイアログでは マクロを 実 行 するときの 名 前 やショートカットキーなど マクロを 実 行 するための 情 報 を 設 定 することができます 1.[ツール(T)]メニューから[マクロ(M)]- [ 新 しいマクロの 記 録 (R)...]を 選 択 すると [マクロの 記 録 ]ダイアログが 起 動 します 2.[ショートカット キー(K)]の 項 目 に マクロ をショートカットで 実 行 できるように 設 定 するこ とができます ここでは キーボードのアルファベットや 数 字 を 一 文 字 入 力 して 指 定 できます たとえば K を 入 力 すると CtrlキーとKキー 押 下 でマクロが 実 行 できます この 項 目 は 省 略 してショートカットを 設 定 しなく てもがまいません 3.[マクロの 保 存 先 (I)]の 項 目 に マクロをどこに 保 存 するかをリストから 必 ず 選 択 する 必 要 があります 通 常 の 場 合 は[ 作 業 中 のブック]に 保 存 しますが エクセルの 起 動 のたびに マクロを 使 いたい 場 合 は 個 人 用 マクロ ブック に 保 存 すると 便 利 です 4.[ 説 明 (D)]の 項 目 に これから 記 録 するマクロの 説 明 を 記 述 します
7/10 ページ やユーザー 名 などが 入 力 されている 場 合 があります 初 期 値 の 値 マクロ 記 録 日 :2003/9/13 ユーザー 名 : を 利 用 して ユーザー 名 のみ 追 加 してもよいでしょう 例 えば マクロ 記 録 日 :2004/5/17 ユーザー 名 :Maru のように 記 述 します 5.[OK]ボタンをクリックします マクロの 記 録 が 開 始 されて [ 記 録 終 了 ]ツールバーが 表 示 されます エクセルの 操 作 をマクロに 記 録 マクロ 記 録 中 のエクセルの 操 作 はすべて 記 録 されます レコーダーの 録 音 ボタンを オ ン にした 状 態 をイメージするといいと 思 います 記 録 中 は ステータスバーに マクロの 記 録 中 という 文 字 と[ 記 録 終 了 ]ツールバーが 表 示 されます マクロの 記 録 を 開 始 すると エクセルの 操 作 はすべて 記 録 されてしまいます したがって 関 係 のないセルを 選 択 した などのマクロとは 無 関 係 の 操 作 も 記 録 されてしま いますので あらかじめマクロにする 操 作 を 整 理 しておくことが 大 切 です ここで マクロを 記 録 するときのヒントですが 現 在 のシートに 対 して 操 作 するマクロを 作 り たいときは マクロ 記 録 で シートを 選 択 する 操 作 はしないようにします すると マクロに は シートを 選 択 する 操 作 は 記 録 されませんので 現 在 選 択 されているシートに 対 してマ クロを 実 行 します 同 様 に 最 初 にセルを 選 択 してからマクロ 記 録 を 始 めると 現 在 選 択 されているセルに 対 し てマクロを 実 行 すると プログラミングが 流 用 できます 特 定 のシートに 対 して 操 作 するマクロを 作 りたいときは あらかじめ そのシート 以 外 のシ ートを 選 択 した 状 態 でマクロ 記 録 を 開 始 し 特 定 のシートを 選 択 しなおします すると シ ートを 選 択 する という 操 作 が 記 録 されますので マクロはまず シートを 選 択 する 操 作 を 実 行 するのです このコツは エクセルの 操 作 をそのまま 記 録 して 実 行 する マクロ 記 録 の 特 徴 を 生 かした ものです まるもこれを 意 識 しながら 自 動 化 マクロを 作 成 しています 逆 に VBAエディタからプログラミングをする 場 合 は アクティブなブック シート セルを 常 に 意 識 しながら 記 述 する 必 要 があります 記 録 したマクロを 実 行 する [ツール(T)]メニューから[マクロ(M)]-[マクロ(M)...]を 選 択 して 呼 び 出 される[マクロ]ダイ アログでは リストに 表 示 されたマクロの 実 行 や 編 集 ( 中 身 の 確 認 ) 削 除 などの 操 作 がで きます たとえば マクロ 記 録 で 作 成 したマクロを 実 行 するには リストから 作 成 したマクロ を 選 択 し [ 実 行 ]ボタンをクリックします このダイアログからのマクロ 実 行 は 最 も 基 本 的 な 方 法 です マクロの 実 行 記 録 したマクロをメニューから 実 行 してみましょう 記 録 した 操 作 が マクロ 実 行 で 正 しく 再 現 できるか 確 認 してください また 別 のシートでも 正 しく 実 行 できるかを 確 認 してみましょ う
8/10 ページ マクロのダイアログでショートカットや 説 明 なども 設 定 できることにより マクロをより 活 用 しやすくできます また マクロの 記 録 を 行 った 際 VBエディタにその 操 作 が 出 力 されます プログラムなんてできない と 思 っていても マクロの 記 録 をした 際 知 らず 知 らずにVBA でコーディングをしています 最 初 は マクロの 記 録 からどのようにVBAで 操 作 が 出 力 され るかを 眺 めて コードに 慣 れていくと 良 いと 思 います VBAに 対 する 不 安 がなくなってくる と 次 第 にマクロの 記 録 だけでは 物 足 りなくなったり もっと 複 雑 な 事 を 自 動 化 したくなると 思 います みなさん まると 一 緒 にVBAを 楽 しみましょう posted by まる at 23:54 Excel 2004 年 05 月 14 日 マクロの 自 動 実 行 Excelを 起 動 すると 同 時 にマクロを 実 行 させる 方 法 があります これは Excelの 起 動 と 同 時 に 他 のファイルを 開 いたり テキストファイルの 読 み 込 みをして データを 表 示 したりするのに 便 利 です [1]Excelの 起 動 で 開 きたいブック ブックを 自 動 的 に 開 く Excelの 起 動 フォルダに 開 きたいブックを 保 存 しておく 起 動 フォルダの 名 前 はWindows 版 では XLStart です PCでの 所 在 は [スタート]メニューの [ 検 索 ]で 調 べることができます Office 95 \MSOffice\Excelか \Program Files\Microsoft Office\Office\XLStart Office 97 \Program Files\Office97をインストールしたフォルダ\Office\XLStart Office 2000 \Program Files\Office2000をインストールしたフォルダ \Office\XLStart Office XP \Program Files\OfficeXPをインストールしたフォルダ\Office10 \XLStart [2]マクロ マクロを 自 動 的 に 実 行 する ブックを 最 初 に 開 いたときに 自 動 的 に 実 行 される Auto_Openプロシージャを 標 準 モジュ ール( 注 )に 記 述 する ( 注 )Excel97 以 上 では 標 準 モジュール Excel95では モジュールシート 'Excelの 起 動 と 同 時 にマクロを 実 行 させる Sub Auto_Open() Worksheets("Sheet1").Activate 'ここに 必 要 な 処 理 を 記 述 します なお Auto_Openプロシージャを 実 行 せずにブックを 開 きたい 場 合 は [Shift]キーを 押 しな がら 開 きます 注 意 : マクロの 自 動 実 行 は 言 い 換 えれば マクロウィルスの 要 因 でもあります 初 めて 使 用 するマクロを 含 むブックを 開 くときには マクロを 起 動 せずに 中 身 を 確 認 して からマクロを 実 行 することをおすすめします なぜかと 言 うと VBAは WindowsAPI のほとんどの 関 数 を 利 用 することができ Officeソ
9/10 ページ リューションだけではなくオぺレーティングシステム(OS)も 制 御 することができるので 大 変 に 危 険 な 要 素 を 含 んでいるからです それをマクロを 走 らせただけで 勝 手 にOSを 制 御 されたら とんでもない 事 態 に 陥 る 可 能 性 もあります posted by まる at 06:41 Excel 2004 年 05 月 13 日 3セル セルの 操 作 ' 単 一 のセルを 選 択 する Sub RangeSel1() Range("C5").Select ' 連 続 するセル 範 囲 を 選 択 する Sub RangeSel2() Range("B2:D4").Select 'Range("B2", "D4").Select ' 非 連 続 のセル 範 囲 を 選 択 する Sub RangeSel3() 'Range("B2,B4,D2,D4").Select Range("B2:D3,B5:D6").Select ' 名 前 が 定 義 されたセルを 選 択 する Sub RangeSel4() Range(" 売 上 合 計 ").Select ' 行 列 全 体 を 選 択 する Sub RangeSel5() Range("1:1").Select 'Range("A:A").Select
10/10 ページ 'Range("1:3").Select 'Range("A:C").Select 'Range("1:3,6:6").Select 'Range("A:C,F:F").Select 'Cellsプロパティで 単 一 のセルを 選 択 する Sub CellsSel1() Cells(5, 3).Activate 'Cells(5, "C").Activate ' 連 続 番 号 でセルを 選 択 する Sub CellsSel2() Cells(1027).Activate 'Cellsプロパティで 全 セルを 選 択 する Sub CellsSel3() Cells.Select 'Cellsプロパティでセル 範 囲 を 選 択 する Sub CellsSel4() Range(Cells(1, 2), Cells(5, 4)).Select posted by まる at 06:13 Excel