最強のexcel vba基礎コース レジュメ
Post on 16-Apr-2017
1.303 Views
Preview:
TRANSCRIPT
最強の Excel VBA 講座
業務効率化のプロが教える
基礎
イントロダクション
1
講師プロフィール
2
Copyright © 日本頭脳株式会社 All rights reserved.
講師プロフィール
V - C O NVBA Consulting
EX celercise
エクセル本舗
日本頭脳株式会社 代表取締役。ITコーディネータ、調理師。世界最大級のコンサルティングファームであるプライスウォーターハウスクーパース出身のたたき上げITコンサルタント。10年以上にわたり大企業向けの業務改革プロジェクトをリード。オフィスワークの生産性向上実現をコンセプトとして事業を展開している。
永井 雅明
業務改善コンサルティング
高度IT業務アウトソーシング
高度IT人材育成
Copyright © 日本頭脳株式会社 All rights reserved.
事業コンセプトイメージ
4
仕様策定から任せられる
日本頭脳の実力
V -CONVBA Consulting
Copyright © 日本頭脳株式会社 All rights reserved.
事業コンセプトイメージ
5
V -CONVBA Consulting
VBAで
業務にイノベーションを
Copyright © 日本頭脳株式会社 All rights reserved.
実績
6
✓業務改善コンサルタント歴15年。
✓プロジェクトマネージャー経験7回。
✓全社システム導入会社数10社。
✓システム規模最大6,000ユーザ。
✓画面設計数500以上。
✓データベース(テーブル)設計数1,500以上。
講座の進め方
7
Copyright © 日本頭脳株式会社 All rights reserved.
スパイラル学習
目的の処理
(
日本語)
VBAプログラム
(
機械語)
知識のインプット 実習(ワーク)
知識のインプット 実習(ワーク)
知識のインプット 実習(ワーク)
知識のインプット 実習(ワーク)
知識のインプット 実習(ワーク)
全体像を捉えながら、目的の処理を段階的に作成していくアプローチ
8
本日のスケジュール
9
1. イントロダクション 5分
2. 勤務表データチェック<前半戦> 60分 ワーク1:ボタンを作るワーク2:ボタンから処理を呼び出すワーク3:セルの色を変えるワーク4:処理から処理を呼び出すワーク5:分岐処理を行う
・・休憩・・ 5分
3. 勤務表データチェック<後半戦> 60分 ワーク6:引数・戻り値を理解する(1)ワーク7:繰り返し処理を行うワーク8:関数の使い方を理解するワーク9:動作確認
・・休憩・・ -
4. オプション講義 30分 ワーク10:変数を理解するワーク11:引数・戻り値を理解する(2)ワーク12:Withを使いこなす
5. ステップアップ講座のご案内・アンケート
10分
Copyright © 日本頭脳株式会社 All rights reserved.
講義中のルール
講義中の質問OK
疲れたら手を休めてOK
ついてこれない場合は休憩中にフォロー
トイレ休憩はご自由に
携帯電話・スマートフォンは音が鳴らないように
10
勤務表データチェック
<前半戦>
11
VBAを使って実現したいこと
12
Copyright © 日本頭脳株式会社 All rights reserved.
<全体像>勤務表データを確認しよう
<入力ルールを確認>• 時刻の時と分は「:」区切り 例)11:00• 開始時刻と終了時刻は「~」区切り 例) 9:30~14:00
13
時間帯の両側に文字が混入していないかチェックするプログラムを作成する
9:30~14:00
Copyright © 日本頭脳株式会社 All rights reserved.
<全体像>処理の内容を理解しよう
'*****************************************'* エラーチェック処理'*****************************************'最初に、セルの色をクリアする
'処理開始の確認メッセージを表示する'キャンセルされた場合は、処理を終了する
'勤務表シートのC5:M35範囲内で、セル1つずつ繰り返し処理を行う
'セルの値の有無により、分岐処理を行う'値がある場合
'セルの値を表示する'文字の両端が数値でない場合、セルの色を赤にする'それ以外の場合は、セルの色をクリアする
'値がない場合'セルの色を薄いグレーにする
勤務表データに、時間以外の文字が混入していないかチェックするエラーの場合は赤、空欄の場合は薄いグレーにし、エラーがない場合は色をクリアする
14
Copyright © 日本頭脳株式会社 All rights reserved.
<全体像>処理の流れを理解しよう
ボタンを配置
エラーチェック処理
15
プログラムを書く準備
16
Copyright © 日本頭脳株式会社 All rights reserved.
開発タブを表示する
「開発」タブが表示されていない
17
Copyright © 日本頭脳株式会社 All rights reserved.
開発タブを表示する
ファイル>オプション>リボンのユーザー設定
18
知識
「開発」にチェック
Copyright © 日本頭脳株式会社 All rights reserved.
VBEを表示する
Visual Basic
19
知識
Copyright © 日本頭脳株式会社 All rights reserved.
VBEを表示する
プロパティウィンドウ イミディエイトウィンドウ ローカルウィンドウ ウォッチウィンドウ
プロジェクトエクスプローラー(オブジェクトの一覧)
20
知識
Copyright © 日本頭脳株式会社 All rights reserved.
プログラムを書く場所を表示する(1)
ダブルクリック
21
Copyright © 日本頭脳株式会社 All rights reserved.
プログラムを書く場所を表示する(2)
22
Copyright © 日本頭脳株式会社 All rights reserved.
参考)モジュールの違い
▼オブジェクトにくっつく シートモジュール ブックモジュール フォームモジュール
↓イベントが起こせるエラー箇所を特定できない
▼オブジェクトにくっつかない 標準モジュール
オブジェクト指向の設計は不要インスタンス化できないスコープが広い
クラスモジュールオブジェクト指向の設計が必要インスタンス化できるスコープが狭い
初心者向き
プログラマー向き
イベントを起こすときに
使う
23
ワーク1:ボタンを作る
24
Copyright © 日本頭脳株式会社 All rights reserved.
ボタンを配置しよう
開発タブ>挿入>ボタン(フォーム コントロール)
25
左上
ワーク
Copyright © 日本頭脳株式会社 All rights reserved.
ボタンの形を作ろう
26
+アイコンが表示されるので、右下方向にドラッグする
+
ワーク
Copyright © 日本頭脳株式会社 All rights reserved. 27
マクロの登録
開発タブ>挿入>ボタン(フォーム コントロール)>マクロの登録>新規作成
ワーク
Copyright © 日本頭脳株式会社 All rights reserved. 28
2つの画面を意識しよう
Excel(表)
開発用の画面VBE
(Visual Basic Editor)
Copyright © 日本頭脳株式会社 All rights reserved. 29
ボタンのラベルを変更しよう
Excel>ボタンを右クリック>テキストの編集
ボタン以外のところをクリックすると、文字が確定する
ワーク
Copyright © 日本頭脳株式会社 All rights reserved.
シートモジュール
ブックモジュール
標準モジュール
30
参考)シート・ブック・標準モジュールの違い
使わない理由その1:Publicが使えないその2:エラー箇所が不明
ワーク2:ボタンから処理を呼び出す
31
Copyright © 日本頭脳株式会社 All rights reserved.
プロシージャとは
プロシージャ(Procedure)=ひとまとまりの処理
Function 処理名()・・・・・・・・・・・・・・・・・・・・・
End Function
Sub 処理名()・・・・・・・・・・・・・・・・・・・・・
End Sub
プロシージャは、標準プロシージャとイベントプロシージャに分類される。FunctionもSubも標準プロシージャに分類されるが、Subは適用範囲が狭い。
「Sub」は「Subroutine(サブルーチン)」の略で、戻り値を返せない片道切符の処理のこと。
半角スペース
32
知識
Copyright © 日本頭脳株式会社 All rights reserved. 33
ボタンクリック時の処理
Sub ボタン1_Click()
End Sub
何も書かれていない
ボタンをクリックしても、何も起きない
Copyright © 日本頭脳株式会社 All rights reserved.
メッセージを表示する
34
Msgbox “メッセージ”, 表示形式
vbOKCancel vbCritical vbYesNoCancel
※表示形式に何も入力しないと、OKボタンだけ表示される
ダブルクォーテーション
知識
Copyright © 日本頭脳株式会社 All rights reserved. 35
便利機能を活用しよう
カンマ「,」を入力した瞬間に、候補が表示される
↑↓で選んでTAB(またはダブルクリック)
MsgBox+スペースを入力すると、入力補助が表示される
知識
Copyright © 日本頭脳株式会社 All rights reserved. 36
メッセージを表示しよう
Sub ボタン1_Click()
MsgBox "処理を開始します。よろしいですか?", vbOKCancel
End Sub
書き終わったら、ボタンをクリックしてみよう
ワーク
Copyright © 日本頭脳株式会社 All rights reserved. 37
メッセージを表示しよう ワーク
ワーク3:セルの色を変える
38
Copyright © 日本頭脳株式会社 All rights reserved.
<全体像>処理の内容
'*****************************************'* エラーチェック処理'*****************************************'最初に、セルの色をクリアする
'処理開始の確認メッセージを表示する'キャンセルされた場合は、処理を終了する
'勤務表シートのC5:M35範囲内で、セル1つずつ繰り返し処理を行う
'セルの値の有無により、分岐処理を行う'値がある場合
'セルの値を表示する'文字の両端が数値でない場合、セルの色を赤にする'それ以外の場合は、セルの色をクリアする
'値がない場合'セルの色を薄いグレーにする
勤務表データに、時間以外の文字が混入していないかチェックするエラーの場合は赤、空欄の場合は薄いグレーにし、エラーがない場合は色をクリアする
39
Copyright © 日本頭脳株式会社 All rights reserved. 40
Functionを書いてみよう
Sub ボタン1_Click()MsgBox "処理を開始します。よろしいですか?", vbOKCancel
End Sub
'**********************************************'* エラーチェック処理'**********************************************Function エラーチェック処理()
End Function
ワーク
Copyright © 日本頭脳株式会社 All rights reserved. 41
コメントを書く
Sub ボタン1_Click()MsgBox "処理を開始します。よろしいですか?", vbOKCancel
End Sub
'**********************************************'* エラーチェック処理'**********************************************
知識
シングルクォーテーション「’」を付けるとコメントになる
例)
Copyright © 日本頭脳株式会社 All rights reserved. 42
コメントを書いてみよう
'**********************************************'* エラーチェック処理'**********************************************Function エラーチェック処理()
'最初に、セルの色をクリアするEnd Function
ワーク
Copyright © 日本頭脳株式会社 All rights reserved. 43
命令の仕方
どのシートの、どのセルの、何を、このように変えなさい
シート.セル.〇〇〇 = 値(色)
知識
Copyright © 日本頭脳株式会社 All rights reserved. 44
何を変えるのか
どのシート? Sheets(“シート名”)
どのセル?範囲を指定 Range(“範囲”)特定セルを指定 Cells(行番号,列番号)
何を変える?値を変えるなら Value色を変えるなら Interior.ColorIndex
Sheets(“シート名”). Range(“範囲”).Value
知識
どのシートの、どのセルの、何を、このように変えなさい
Copyright © 日本頭脳株式会社 All rights reserved.
セルの指定方法
セルの範囲指定方法は2種類ある
Range(“範囲”) Cells(行番号,列番号)
Range(“B2:C3”) Cells(2,3)
45
知識
行や列を順番に処理していくとき、数値だと足し算ができるので使いやすい
Excelシートの表示形式と同じ表示なので、ぱっと見てわかりやすい
Copyright © 日本頭脳株式会社 All rights reserved. 46
どう変えるのか
値を「100」に変える ~.Value=100
値を「あいう」に変える ~.Value=”あいう”
色を「赤」に変える ~.Interior.ColorIndex=3
色をクリアする ~.Interior.ColorIndex=0
色を「薄いグレー」に変える~.Interior.Color
=RGB(217, 217, 217)
知識
どのシートの、どのセルの、何を、このように変えなさい
Copyright © 日本頭脳株式会社 All rights reserved.
セルの色の変え方
色の指定方法は2種類ある
ColorIndex Color
黒 1白 2赤 3緑 4青 5:
47
知識
黒 RGB(0,0,0)白 RGB(255,255,255):
あらかじめ決められた色
自由に指定
Copyright © 日本頭脳株式会社 All rights reserved. 48
セルの色を変えてみよう
'**********************************************'* エラーチェック処理'**********************************************Function エラーチェック処理()
'最初に、セルの色をクリアするSheets("勤務表").Range("C5:M35").Interior.ColorIndex = 3
End Function
「3」「4」「5」など試してみる
ワーク
Copyright © 日本頭脳株式会社 All rights reserved. 49
プログラムを単独で実行してみよう
'**********************************************'* エラーチェック処理'**********************************************Function エラーチェック処理()
'最初に、セルの色をクリアするSheets("勤務表").Range("C5:M35").Interior.ColorIndex = 3
End Function
赤枠内のどこかをクリックして、F5を押す
ワーク
Copyright © 日本頭脳株式会社 All rights reserved.
補足)メニューボタン
実行(F5)
中止
「■」ボタンは、正しくは「リセット」という「Ctrl+Break」がない場合は、「Winロゴキー+U」から「スクリーンボード」を使って入力
中断
「F5」で実行、「Ctrl+Break」で中断、は覚えておく!
知識
ワーク4:処理から処理を呼び出す
51
Copyright © 日本頭脳株式会社 All rights reserved.
処理を呼び出す
Call 処理名
52
知識
Copyright © 日本頭脳株式会社 All rights reserved. 53
処理を呼び出してみよう
Sub ボタン1_Click()Call エラーチェック処理
End Sub
'**********************************************'* エラーチェック処理'**********************************************Function エラーチェック処理()
'最初に、セルの色をクリアするSheets("勤務表").Range("C5:M35").Interior.ColorIndex = 0
MsgBox "処理を開始します。よろしいですか?", vbOKCancelEnd Function
ボタンをクリックして確認!
ワーク
メッセージ表示処理を移動
「0」にする
ワーク5:分岐処理を行う
54
Copyright © 日本頭脳株式会社 All rights reserved.
<全体像>処理の内容
'*****************************************'* エラーチェック処理'*****************************************'最初に、セルの色をクリアする
'処理開始の確認メッセージを表示する'キャンセルされた場合は、処理を終了する
'勤務表シートのC5:M35範囲内で、セル1つずつ繰り返し処理を行う
'セルの値の有無により、分岐処理を行う'値がある場合
'セルの値を表示する'文字の両端が数値でない場合、セルの色を赤にする'それ以外の場合は、セルの色をクリアする
'値がない場合'セルの色を薄いグレーにする
勤務表データに、時間以外の文字が混入していないかチェックするエラーの場合は赤、空欄の場合は薄いグレーにし、エラーがない場合は色をクリアする
55
Copyright © 日本頭脳株式会社 All rights reserved.
分岐処理
分岐の書き方は2種類ある
If 条件 Then ・・・・・・・
Else・・・・・・・
End If
Select Case 変数Case 値1Case 値2Case Else
End Select
順位が3位以上ならメダルをください。
順位が1位なら金を、2位なら銀をください。
「If」は、値の大小を比較する場合なども含めて幅広く使用できる。「Select Case」は、値が一致する場合にのみ使用する。
知識
Copyright © 日本頭脳株式会社 All rights reserved. 57
条件の書き方
値が100の場合 .Value=100
値が100を超える場合 .Value>100
値が100以下の場合 .Value<=100
値がない場合 .Value=””
値がある場合 .Value<>””=値が空ではない場合
知識
空であることを示す
ノット・イコールを示す
Copyright © 日本頭脳株式会社 All rights reserved. 58
分岐処理を書いてみよう
Function エラーチェック処理()'最初に、セルの色をクリアするSheets("勤務表").Range("C5:M35").Interior.ColorIndex = 0
'勤務表シートのD5セルの値の有無により、分岐処理を行う'値がある場合
'値がない場合'セルの色を薄いグレーにする
End Function
• まずは、コメントで処理を書く• 終わったら、分岐処理だけ書く
ワーク
• 「勤務表シートのD5セルの値」は?• 値がない場合=値が空ではない場合
Copyright © 日本頭脳株式会社 All rights reserved. 59
分岐処理を書いてみよう
Function エラーチェック処理()'最初に、セルの色をクリアするSheets("勤務表").Range("C5:M35").Interior.ColorIndex = 0
'勤務表シートのD5セルの値の有無により、分岐処理を行う'値がある場合If Sheets("勤務表").Range(“D5").Value <> "" Then
‘セルの値を表示する
'値がない場合Else
'セルの色を薄いグレーにするEnd If
End Function
ワーク
Copyright © 日本頭脳株式会社 All rights reserved.
値の表示
Debug.Print 値
表示>イミディエイトウィンドウ
プログラムが正しく動いているかを確認するために、開発途中でよく使う
イミディエイトウィンドウ
知識
Copyright © 日本頭脳株式会社 All rights reserved. 61
セルの値を表示してみよう
Function エラーチェック処理()'最初に、セルの色をクリアするSheets("勤務表").Range("C5:M35").Interior.ColorIndex = 0
'勤務表シートのD5セルの値の有無により、分岐処理を行う'値がある場合If Sheets("勤務表").Range(“D5").Value <> "" Then
'セルの値を表示する
'値がない場合Else
'セルの色を薄いグレーにするEnd If
End Function
ワーク
Copyright © 日本頭脳株式会社 All rights reserved. 62
セルの値を表示してみよう
Function エラーチェック処理()'最初に、セルの色をクリアするSheets("勤務表").Range("C5:M35").Interior.ColorIndex = 0
'勤務表シートのD5セルの値の有無により、分岐処理を行う'値がある場合If Sheets("勤務表").Range(“D5").Value <> "" Then
‘セルの値を表示するDebug.Print Sheets("勤務表").Range(“D5").Value
'値がない場合Else
'セルの色を薄いグレーにするEnd If
End Function
ワーク
Copyright © 日本頭脳株式会社 All rights reserved. 63
セルの色を変えてみよう
Function エラーチェック処理()'最初に、セルの色をクリアするSheets("勤務表").Range("C5:M35").Interior.ColorIndex = 0
'勤務表シートのD5セルの値の有無により、分岐処理を行う'値がある場合If Sheets("勤務表").Range(“D5").Value <> "" Then
‘セルの値を表示するDebug.Print Sheets("勤務表").Range(“D5").Value
'値がない場合Else
'セルの色を薄いグレーにするEnd If
End Function
ここでは、「.Interior.Color」を使う薄いグレーはRGB(217, 217, 217)
ワーク
Copyright © 日本頭脳株式会社 All rights reserved. 64
セルの色を変えてみよう
Function エラーチェック処理()'最初に、セルの色をクリアするSheets("勤務表").Range("C5:M35").Interior.ColorIndex = 0
'勤務表シートのD5セルの値の有無により、分岐処理を行う'値がある場合If Sheets("勤務表").Range(“D5").Value <> "" Then
‘セルの値を表示するDebug.Print Sheets("勤務表").Range(“D5").Value
'値がない場合Else
'セルの色を薄いグレーにするSheets("勤務表").Range(“D5").Interior.Color = RGB(217, 217, 217)
End IfEnd Function
ワーク
65
B r e a k T i m e
勤務表データチェック
<後半戦>
66
ワーク6:引数・戻り値を理解する(1)
67
Copyright © 日本頭脳株式会社 All rights reserved. 68
引数・戻り値とは
引数(インプット)
戻り値(アウトプット)
処理
知識
Copyright © 日本頭脳株式会社 All rights reserved. 69
引数・戻り値の例
Today()なし 今日の日付
SUM(…)範囲 合計値
MsgBox(…)テキスト 押されたボタン
引数 戻り値処理
知識
Copyright © 日本頭脳株式会社 All rights reserved. 70
引数・戻り値の例
表示テキスト表示形式
引数 戻り値処理
MsgBox(…)
押されたボタンの値・OKをクリック
→1(vbOK)
・Cancelをクリック→2(vbCancel)
知識
Copyright © 日本頭脳株式会社 All rights reserved. 71
メッセージで選択された値を取得する
メッセージを表示するだけならMsgBox “メッセージ”, 表示形式
メッセージを表示して、さらに値を取得するならMsgBox(“メッセージ”, 表示形式)
OKをクリック →vbOK
Cancelをクリック →vbCancel
知識
Copyright © 日本頭脳株式会社 All rights reserved. 72
分岐処理とメッセージの組み合わせ
もし、メッセージの値が「キャンセル」なら、そのときは
・・・
以上
If MsgBox(“メッセージ”, 表示形式) = vbCancel Then
・・・
End If
知識
Copyright © 日本頭脳株式会社 All rights reserved. 73
復習)条件
値が100の場合 .Value=100
値が100を超える場合 .Value>100
値が100以下の場合 .Value<=100
値がない場合 .Value=””
値が空ではない場合 .Value<>””
知識
Copyright © 日本頭脳株式会社 All rights reserved.
<全体像>処理の内容
'*****************************************'* エラーチェック処理'*****************************************'最初に、セルの色をクリアする
'処理開始の確認メッセージを表示する'キャンセルされた場合は、処理を終了する
'勤務表シートのC5:M35範囲内で、セル1つずつ繰り返し処理を行う
'セルの値の有無により、分岐処理を行う'値がある場合
'セルの値を表示する'文字の両端が数値でない場合、セルの色を赤にする'それ以外の場合は、セルの色をクリアする
'値がない場合'セルの色を薄いグレーにする
勤務表データに、時間以外の文字が混入していないかチェックするエラーの場合は赤、空欄の場合は薄いグレーにし、エラーがない場合は色をクリアする
74
• メッセージを表示する• メッセージで選択された値を取得する• 値によって分岐処理をする
Copyright © 日本頭脳株式会社 All rights reserved. 75
メッセージによる分岐処理を書いてみよう
'**********************************************'* エラーチェック処理'**********************************************Function エラーチェック処理()
'最初に、セルの色をクリアするSheets("勤務表").Range("C5:M35").Interior.ColorIndex = 0
'処理開始の確認メッセージを表示する
:End Function
ワーク
Copyright © 日本頭脳株式会社 All rights reserved. 76
メッセージによる分岐処理を書いてみよう
'**********************************************'* エラーチェック処理'**********************************************Function エラーチェック処理()
'最初に、セルの色をクリアするSheets("勤務表").Range("C5:M35").Interior.ColorIndex = 0
'処理開始の確認メッセージを表示するIf MsgBox("処理を開始します。よろしいですか?", vbOKCancel) = vbCancel Then
End If:
End Function
ワーク
Copyright © 日本頭脳株式会社 All rights reserved.
処理の終了
Exit Function
Function 処理名()
Exit Function
End Function
これ以降の処理は実行されない
ここまでの処理は実行される
知識
Copyright © 日本頭脳株式会社 All rights reserved. 78
処理の終了を書いてみよう
'**********************************************'* エラーチェック処理'**********************************************Function エラーチェック処理()
'最初に、セルの色をクリアするSheets("勤務表").Range("C5:M35").Interior.ColorIndex = 0
'処理開始の確認メッセージを表示するIf MsgBox("処理を開始します。よろしいですか?", vbOKCancel) = vbCancel Then
'キャンセルされた場合は、処理を終了する
End If:
End Function
ワーク
Copyright © 日本頭脳株式会社 All rights reserved. 79
処理の終了を書いてみよう
'**********************************************'* エラーチェック処理'**********************************************Function エラーチェック処理()
'最初に、セルの色をクリアするSheets("勤務表").Range("C5:M35").Interior.ColorIndex = 0
'処理開始の確認メッセージを表示するIf MsgBox("処理を開始します。よろしいですか?", vbOKCancel) = vbCancel Then
'キャンセルされた場合は、処理を終了するExit Function
End If:
End Functionボタンクリックで確認
ワーク
ワーク7:繰り返し処理を行う
80
Copyright © 日本頭脳株式会社 All rights reserved.
<全体像>処理の内容
'*****************************************'* エラーチェック処理'*****************************************'最初に、セルの色をクリアする
'処理開始の確認メッセージを表示する'キャンセルされた場合は、処理を終了する
'勤務表シートのC5:M35範囲内で、セル1つずつ繰り返し処理を行う
'セルの値の有無により、分岐処理を行う'値がある場合
'セルの値を表示する'文字の両端が数値でない場合、セルの色を赤にする'それ以外の場合は、セルの色をクリアする
'値がない場合'セルの色を薄いグレーにする
勤務表データに、時間以外の文字が混入していないかチェックするエラーの場合は赤、空欄の場合は薄いグレーにし、エラーがない場合は色をクリアする
81
Copyright © 日本頭脳株式会社 All rights reserved.
繰り返し処理(ループ)
繰り返し処理の書き方は、大きく分けて2種類ある
For・・・・・・・・・・・・・・・・・・・・・
Next
Do While 実行条件・・・・・・・・・・・・・・・・・・・・・
Loop
1行目から10行目まで計算してください
行数が100未満の間はずっと計算してください
「Do While」は、指定した条件を満たさないと永遠に処理をし続けるという、いわゆる「無限ループ」を起こしやすいため、「For」のほうが安全性が高い。
82
知識
Copyright © 日本頭脳株式会社 All rights reserved.
繰り返し処理(ループ)
Forの書き方は2種類ある
For 始点 To 終点・・・・・・・・・・・・・・・・・・・・・
Next
For each 要素 In 範囲・・・・・・・・・・・・・・・・・・・・・
Next
1行目から10行目まで計算してください
A1:D8の中にあるセル1個ずつこの文書の中にある図形1個ずつ
「Do While」は、指定した条件を満たさないと永遠に処理をし続けるという、いわゆる「無限ループ」を起こしやすいため、「For」のほうが安全性が高い。
83
知識
Copyright © 日本頭脳株式会社 All rights reserved. 84
For each の使い方
‘勤務表シートのC5:M35範囲内で、セル1つずつ・・
For each cell In Sheets("勤務表").Range("C5:M35")・・・・・・・・・・・・・・・・・・・・・
Next
• 名前は何でもよい• 次々に値が変わっていくので「変数」という
cell
知識
Copyright © 日本頭脳株式会社 All rights reserved. 85
Forループを書いてみよう
Function エラーチェック処理():
'勤務表シートのC5:M35範囲内で、セル1つずつ繰り返し処理を行う'勤務表シートのD5セルの値の有無により、分岐処理を行う'値がある場合If Sheets("勤務表").Range("D5").Value <> "" Then
'セルの値を表示するDebug.Print Sheets("勤務表").Range("D5").Value
'値がない場合Else
'セルの色を薄いグレーにするSheets("勤務表").Range("D5").Interior.Color = RGB(217, 217, 217)
End IfEnd Function
ワーク
Copyright © 日本頭脳株式会社 All rights reserved. 86
Forループを書いてみよう
Function エラーチェック処理():
'勤務表シートのC5:M35範囲内で、セル1つずつ繰り返し処理を行うFor Each cell In Sheets("勤務表").Range("C5:M35")
'勤務表シートのD5セルの値の有無により、分岐処理を行う'値がある場合If Sheets("勤務表").Range("D5").Value <> "" Then
'セルの値を表示するDebug.Print Sheets("勤務表").Range("D5").Value
'値がない場合Else
'セルの色を薄いグレーにするSheets("勤務表").Range("D5").Interior.Color = RGB(217, 217, 217)
End IfNext
End Function
ワーク
Copyright © 日本頭脳株式会社 All rights reserved. 87
既存のプログラムを、Forループの中に入れてみよう
Function エラーチェック処理():
'勤務表シートのC5:M35範囲内で、セル1つずつ繰り返し処理を行うFor Each cell In Sheets("勤務表").Range("C5:M35")
'勤務表シートのD5セルの値の有無により、分岐処理を行う'値がある場合If Sheets("勤務表").Range("D5").Value <> "" Then
'セルの値を表示するDebug.Print Sheets("勤務表").Range("D5").Value
'値がない場合Else
'セルの色を薄いグレーにするSheets("勤務表").Range("D5").Interior.Color = RGB(217, 217, 217)
End IfNext
End Function
cell.Interior.ColorIndex
cell.Value
ワーク
Copyright © 日本頭脳株式会社 All rights reserved. 88
既存のプログラムを、Forループの中に入れてみよう
Function エラーチェック処理():
'勤務表シートのC5:M35範囲内で、セル1つずつ繰り返し処理を行うFor Each cell In Sheets("勤務表").Range("C5:M35")
'勤務表シートのD5セルの値の有無により、分岐処理を行う'値がある場合If cell.Value <> "" Then
'セルの値を表示するDebug.Print cell.Value
'値がない場合Else
'セルの色を薄いグレーにするcell.Interior.Color = RGB(217, 217, 217)
End IfNext
End Function
Sheets("勤務表").Range("D5") ↓
cell
コメントも修正しておこう
ワーク
ワーク8:関数の使い方を理解する
89
Copyright © 日本頭脳株式会社 All rights reserved.
<全体像>処理の内容
'*****************************************'* エラーチェック処理'*****************************************'最初に、セルの色をクリアする
'処理開始の確認メッセージを表示する'キャンセルされた場合は、処理を終了する
'勤務表シートのC5:M35範囲内で、セル1つずつ繰り返し処理を行う
'セルの値の有無により、分岐処理を行う'値がある場合
'セルの値を表示する'文字の両端が数値でない場合、セルの色を赤にする'それ以外の場合は、セルの色をクリアする
'値がない場合'セルの色を薄いグレーにする
勤務表データに、時間以外の文字が混入していないかチェックするエラーの場合は赤、空欄の場合は薄いグレーにし、エラーがない場合は色をクリアする
90
Copyright © 日本頭脳株式会社 All rights reserved.
さまざまな関数
91
左側から指定した文字数を抽出 Left(文字列,文字数)例)Left(“あいうえお”, 1) →戻り値「あ」
右側から指定した文字数を抽出 Right(文字列,文字数)例)Right(“あいうえお”, 1) →戻り値「お」
知識
質問1.セルの値(cell.Value)の左側から1文字、はどのように書けばよいですか?
質問2.セルの値(cell.Value)の右側から1文字、はどのように書けばよいですか?
Copyright © 日本頭脳株式会社 All rights reserved.
さまざまな関数
92
指定した値が数値かどうか判定 IsNumeric(値)例)IsNumeric(“あ”) →戻り値「False」例)IsNumeric(1) →戻り値「True」
知識
質問3.セルの値(cell.Value)の左側から1文字が数値かどうか、はどのように書けばよいですか?
質問4.セルの値(cell.Value)の左側から1文字が数値である場合、という分岐処理はどのように書けばよいですか?
正・誤を表す・・は「数値」で合っていますか?という意味
Copyright © 日本頭脳株式会社 All rights reserved.
条件の組み合わせ
93
AND(~かつ~)
If A = 1 And B = 1 ThenbError = True
End If
OR(~または~)
If A = 1 Or B = 1 ThenbError = True
End If
AもBも、両方とも1でないといけない
AとBのいずれか一方が1であればよい
組み合わせ方は2種類ある
知識
Copyright © 日本頭脳株式会社 All rights reserved. 94
条件を組み合わせてみよう
Function エラーチェック処理():
'セルの値の有無により、分岐処理を行う'値がある場合If cell.Value <> "" Then
'セルの値を表示するDebug.Print cell.Value
'文字の両端が数値でない場合、セルの色を赤にする
'それ以外の場合は、セルの色をクリアする
'値がない場合:
ワーク
まずは分岐処理(If~)だけ書いてみよう
Copyright © 日本頭脳株式会社 All rights reserved. 95
条件を組み合わせてみよう
Function エラーチェック処理():
'セルの値の有無により、分岐処理を行う'値がある場合If cell.Value <> "" Then
'セルの値を表示するDebug.Print cell.Value
'文字の両端が数値でない場合、セルの色を赤にするIf IsNumeric(Left(cell.Value, 1)) = False Or _
IsNumeric(Right(cell.Value, 1)) = False Then'それ以外の場合は、セルの色をクリアするElseEnd If
'値がない場合:
ワーク
Copyright © 日本頭脳株式会社 All rights reserved. 96
条件を組み合わせてみよう
Function エラーチェック処理():
'セルの値の有無により、分岐処理を行う'値がある場合If cell.Value <> "" Then
'セルの値を表示するDebug.Print cell.Value
'文字の両端が数値でない場合、セルの色を赤にするIf IsNumeric(Left(cell.Value, 1)) = False Or _
IsNumeric(Right(cell.Value, 1)) = False Then
'それ以外の場合は、セルの色をクリアするElse
End If
'値がない場合:
ワーク
.Interior.ColorIndexを使う(赤は3、クリアは0)
Copyright © 日本頭脳株式会社 All rights reserved. 97
条件を組み合わせてみよう
Function エラーチェック処理():
'セルの値の有無により、分岐処理を行う'値がある場合If cell.Value <> "" Then
'セルの値を表示するDebug.Print cell.Value
'文字の両端が数値でない場合、セルの色を赤にするIf IsNumeric(Left(cell.Value, 1)) = False Or _
IsNumeric(Right(cell.Value, 1)) = False Thencell.Interior.ColorIndex = 3
'それ以外の場合は、セルの色をクリアするElse
cell.Interior.ColorIndex = 0End If
'値がない場合:
ワーク
F5で確認
Copyright © 日本頭脳株式会社 All rights reserved.
完成したプログラム
Function エラーチェック処理()'最初に、セルの色をクリアするSheets("勤務表").Range("C5:M35").Interior.ColorIndex = 0
'処理開始の確認メッセージを表示するIf MsgBox("処理を開始します。よろしいですか?", vbOKCancel) = vbCancel Then
'キャンセルされた場合は、処理を終了するExit Function
End If
'勤務表シートのC5:M35範囲内で、セル1つずつ繰り返し処理を行うFor Each cell In Sheets("勤務表").Range("C5:M35")
'セルの値の有無により、分岐処理を行う'値がある場合If cell.Value <> "" Then
'セルの値を表示するDebug.Print cell.Value
'文字の両端が数値でない場合、セルの色を赤にするIf IsNumeric(Left(cell.Value, 1)) = False Or _
IsNumeric(Right(cell.Value, 1)) = False Thencell.Interior.ColorIndex = 3
‘その他の場合は、セルの色をクリアするElse
cell.Interior.ColorIndex = 0End If
'値がない場合Else
'セルの色を薄いグレーにするcell.Interior.Color = RGB(217, 217, 217)
End IfNext
End Function
98
ワーク9:動作確認
99
Copyright © 日本頭脳株式会社 All rights reserved.
チェックボタンをクリックしてみよう ワーク
Copyright © 日本頭脳株式会社 All rights reserved. 101
実行結果
もう一度ボタンを押すと、セルの色がクリアされる
データを修正してもう一度ボタンを押すと、赤色が表示されなくなる
102
B r e a k T i m e
オプション講義
103
ワーク10:変数を理解する
104
Copyright © 日本頭脳株式会社 All rights reserved.
変数とは
変数=値を格納する「箱」
String = 文字列
Integerは-32,768~32,767の整数を扱える。ちなみに、Excelで扱える最大行数は1,048,576 行( Excel2007以降)。
ちなみに「Dim」は「Dimension」の略で、FORTRAN言語の名残りと言われている。
Integer = 整数
Boolean = 正誤 Long = 超整数
「s」を文字列として使います→ Dim s As String (宣言)
「s」に値を入れます→ s = “文字です”
「s」を表示します→ MsgBox s
105
知識
Copyright © 日本頭脳株式会社 All rights reserved. 106
変数を使ってみよう①(String)
Function エラーチェック処理()'文字列を格納する箱「sCell」を宣言する
'勤務表シートのC5:M35範囲内で、セル1つずつ繰り返し処理を行うFor Each cell In Sheets("勤務表").Range("C5:M35")
‘sCellに、cell.Valueを格納する
‘以降、cell.Valueの代わりにsCellを使う
NextEnd Function
ワーク
Copyright © 日本頭脳株式会社 All rights reserved. 107
変数を使ってみよう① (String)
Function エラーチェック処理()‘文字列を格納する箱「sCell」を宣言するDim sCell As String
'勤務表シートのC5:M35範囲内で、セル1つずつ繰り返し処理を行うFor Each cell In Sheets("勤務表").Range("C5:M35")
‘sCellに、cell.Valueを格納するsCell = cell.Value
‘以降、cell.Valueの代わりにsCellを使うIf cell.Value <> "" Then
Debug.Print sCell
If IsNumeric(Left(sCell, 1)) = False Or _IsNumeric(Right(sCell, 1)) = False Then
:Next
End Function
ワーク
Copyright © 日本頭脳株式会社 All rights reserved. 108
変数を使ってみよう②(Boolean)
Function エラーチェック処理()Dim sCell As String‘正誤を格納する箱「bLeft」「bRight」を宣言する
'勤務表シートのC5:M35範囲内で、セル1つずつ繰り返し処理を行うFor Each cell In Sheets("勤務表").Range("C5:M35")
sCell = cell.Value
‘bLeftに、 IsNumeric(Left(sCell, 1))を格納する‘bRightに、 IsNumeric(Right(sCell, 1))を格納する
‘以降、IsNumeric~の代わりに、bLeftまたはbRightを使う
NextEnd Function
ワーク
Copyright © 日本頭脳株式会社 All rights reserved. 109
変数を使ってみよう②(Boolean)
Function エラーチェック処理()Dim sCell As StringDim bLeft As BooleanDim bRight As Boolean
'勤務表シートのC5:M35範囲内で、セル1つずつ繰り返し処理を行うFor Each cell In Sheets("勤務表").Range("C5:M35")
sCell = cell.ValuebLeft = IsNumeric(Left(sCell, 1))bRight = IsNumeric(Right(sCell, 1))
‘以降、IsNumeric~の代わりに、bLeftまたはbRightを使うIf cell.Value <> "" Then
:'文字の両端が数値でない場合、セルの色を赤にするIf bLeft = False Or bRight = False Then :
NextEnd Function
ワーク
Copyright © 日本頭脳株式会社 All rights reserved. 110
動作確認
ボタンを押して、動作が変わっていないことを確認しよう
ワーク11:引数・戻り値を理解する(2)
111
難しいけど頑張って理解しよう!
Copyright © 日本頭脳株式会社 All rights reserved.
やりたいこと
処理1
知識
処理を小分けにする(外に出す)
勤務表データチェック
処理2
処理3
利点1スッキリして見やすくなる
利点2処理を再利用できる
利点3エラーを特定しやすくなる
Copyright © 日本頭脳株式会社 All rights reserved. 113
やりたいこと 知識
色番号取得処理(呼び出される側)
エラーチェック処理(呼び出す側)
色を番号ではなく名称で指定できるように、「色番号取得処理」をつくる
色の名称“赤” ”緑”
色番号3 4
引数 戻り値
Copyright © 日本頭脳株式会社 All rights reserved. 114
引数と戻り値がある処理の書き方
Function 処理名(引数名 As 引数の型) As 戻り値の型
処理名 = 値
End Function
知識
例)Function getColor(sColor As String) As Integer
If sColor = “赤” ThengetColor = 3
End IfEnd Function
上記の処理を呼び出すとき)cell.Interior.ColorIndex = getColor(“赤")
「3」
戻り値として、何らかの値をセットする
戻り値として「3」をセットする
Copyright © 日本頭脳株式会社 All rights reserved. 115
Functionを書いてみよう
'**********************************************‘* 色番号取得処理'**********************************************Function getColor(sColor As String) As Integer
Select Case sColorCase "赤"
‘赤の場合は戻り値に3をセットするCase "緑"
‘緑の場合は戻り値に4をセットするCase "クリア"
‘クリアの場合は戻り値に0をセットするEnd Select
End Function
ワーク
処理名は「getColor」とする引数は、色名称(String型)とする戻り値は、色番号(Integer型)とする
Copyright © 日本頭脳株式会社 All rights reserved. 116
Functionを書いてみよう
'**********************************************‘* 色番号取得処理'**********************************************Function getColor(sColor As String) As Integer
Select Case sColorCase "赤"
getColor = 3Case "緑"
getColor = 4Case "クリア"
getColor = 0End Select
End Function
ワーク
処理名は「getColor」とする引数は、色名称(String型)とする戻り値は、色番号(Integer型)とする
Copyright © 日本頭脳株式会社 All rights reserved. 117
色番号取得処理を呼び出してみよう
Function エラーチェック処理():
'勤務表シートのC5:M35範囲内で、セル1つずつ繰り返し処理を行うFor Each cell In Sheets("勤務表").Range("C5:M35")
:'文字の両端が数値でない場合、セルの色を赤にするIf bLeft = False Or bRight = False Then
cell.Interior.ColorIndex = 3'その他の場合は、セルの色をクリアするElse
cell.Interior.ColorIndex = 0End If
:Next
End Function
ワーク
色を名称で指定してみよう
色を名称で指定してみよう
Copyright © 日本頭脳株式会社 All rights reserved. 118
色番号取得処理を呼び出してみよう
Function エラーチェック処理():
'勤務表シートのC5:M35範囲内で、セル1つずつ繰り返し処理を行うFor Each cell In Sheets("勤務表").Range("C5:M35")
:'文字の両端が数値でない場合、セルの色を赤にするIf bLeft = False Or bRight = False Then
cell.Interior.ColorIndex = getColor("赤")'その他の場合は、セルの色をクリアするElse
cell.Interior.ColorIndex = getColor("クリア")End If
:Next
End Function
ワーク
ワーク12:Withを使いこなす
119
Copyright © 日本頭脳株式会社 All rights reserved.
Withとは
120
繰り返し書くのが面倒なので、省略する方法
知識
勤務表シートのA1セルの値を「1」にする勤務表シートのA1セルの値を「2」にする勤務表シートのB1セルの値を「3」にする
With 勤務表シートA1セルの値を「1」にするA1セルの値を「2」にするB1セルの値を「3」にする
End With
Copyright © 日本頭脳株式会社 All rights reserved.
Withとは
121
繰り返し書くのが面倒なので、省略する方法
知識
Sheets(“勤務表”).Range(“A1”).Value = 1Sheets(“勤務表”).Range(“A1”).Value = 2Sheets(“勤務表”).Range(“B1”).Value = 3
With Sheets(“勤務表”).Range(“A1”).Value = 1.Range(“A1”).Value = 2.Range(“B1”).Value = 3
End With
「.」をつけ忘れずに!
Copyright © 日本頭脳株式会社 All rights reserved.
Withの入れ子構造(「ネスト」と言う)
122
知識
With Sheets(“勤務表”).Range(“A1”).Value = 1.Range(“A1”).Value = 2.Range(“B1”).Value = 3
End With
With Sheets(“勤務表”)With .Range(“A1”)
.Value = 1
.Value = 2End With.Range(“B1”).Value = 3
End With
Copyright © 日本頭脳株式会社 All rights reserved. 123
Withを使ってみよう
例)Function サンプル処理()
Sheets("勤務表").Range("C5").Interior.ColorIndex = 0
If Sheets("勤務表").Range("C5") <> "" ThenSheets("勤務表").Range("C5").Interior.ColorIndex = 4
ElseSheets("勤務表").Range("C5").Interior.ColorIndex = 0
End If
End Function
ワーク
Copyright © 日本頭脳株式会社 All rights reserved. 124
Withを使ってみよう
例)Function サンプル処理()
With Sheets("勤務表").Range("C5").Interior.ColorIndex = 0
If .Value <> "" Then.Interior.ColorIndex = 4
Else.Interior.ColorIndex = 0
End IfEnd With
End Function
ワーク
top related