教育関連リンク集 画像・素材 コンピュータマニュアル集 ソフト集 本・情報 特 集 みんなで話そう 研究会概要 会員登録 TOP

ExcelのVBAに挑戦しよう Part3



 前回はIFを使った条件分岐を、前々回ではVLOOKUPもどきをVBAを使って作りました。
 今回は、それらを組み合わせてVBAでクラス分けを行って見ましょう。

今回用意するもの
・シートを4枚作成し、シートに名前をつける
・シート「全体」のレイアウト
・シート「1組」「2組」「3組」のレイアウト

1.今回の実行結果
1)シート「全体」の@”B1”に抽出するクラスを入れ、A抽出ボタンを押す
2)抽出するクラスの該当者とそのデータが抽出シートに転記される

2.VBAでやってみよう
1)[コマンドボタン]を作成してコードを記入します。



コマンドボタンの作成方法は前々回の特集を参考にして下さい。

前々回の特集「VBAに挑戦してみよう
2)コードを記入する(ここでは貼り付け)

Private Sub CommandButton1_Click()
 ここに下の青文字の部分をコピーして貼り付ける
End Sub

'***********************************************************************************************
Dim i As Integer, j As Integer, z As Integer
Dim Ws As Worksheet, Ws2 As Worksheet
Dim CellData As Variant

i = 2 'クラスを拾い出す行
j = 3 '拾い出した項目を入力する行
Set Ws = Worksheets("全体") '拾い出すシートの指定

z = CInt(Ws.Cells(1, 2))

If z < 1 Or z > 4 Then
MsgBox ("指定したクラスはありません!入力し直して下さい!")
Exit Sub
End If

Set Ws2 = Worksheets(z & "組") '入力シートの指定


Application.ScreenUpdating = False '画面のちらつきを止める処理

Ws2.Activate
Ws2.Range("B2:G46").Select
Selection.ClearContents

Do
i = i + 1
CellData = Ws.Cells(i, 2) '検索するセルの内容をCellDataに代入する
If CellData = "" Then 'CellDataが空欄ならば終了
Exit Do
End If

If CellData = Ws.Cells(1, 2) Then 'CellDataが検索する内容と一致したときの処理
Ws2.Cells(j, 2) = Ws.Cells(i, 3) '氏名
Ws2.Cells(j, 3) = Ws.Cells(i, 4) 'ふりがな
Ws2.Cells(j, 4) = Ws.Cells(i, 5) '住所
Ws2.Cells(j, 5) = Ws.Cells(i, 6) '電話番号
Ws2.Cells(j, 6) = Ws.Cells(i, 7) '保護者名
Ws2.Cells(j, 7) = Ws.Cells(i, 8) '保護者名
j = j + 1
End If
Loop While CellData <> "" '空欄でないかぎり繰り返す
Ws2.Range("R4").Select
Application.ScreenUpdating = True '画面の再表示をOnにする

'***********************************************************************************************

4.コードの解説
ここでの解説は多少の応用できる程度にとどめます。興味がある方はネット上に多くのVBAに関するサイトがありますので探してみて下さい。

z = CInt(Ws.Cells(1, 2))
抽出する組、変化するので変数 z と置いた
CInt()は自然数に直す関数 … 全角の数字を半角にするため。全角、半角どちらの数字を入れても抽出するクラスを確定できる。

ゆえに、シートのクラス名(数字)は半角にして下さい。

If z < 1 Or z > 4 Then
MsgBox ("指定したクラスはありません!入力し直して下さい!")
Exit Sub
End If


エラー処理、0組またはマイナス組はないので z < 1、このシートでは3組までしかないので z > 4 とした。
作成するシートに合わせて z > 4 を変更して下さい。 5組まで作成するなら z > 6
この処理を入れないと変な数字を入れるとデバックが表示され使用者が混乱してしまいます。

Ws2.Range("B2:G46").Select
Selection.ClearContents


入力する範囲を空欄にする処理です。

いろいろなシートで応用してみよう!
そろそろ慣れてきましたでしょうか?

シートの名前、行や列等の数値をいじれば自分のやりたいコードに変身するのではないかと・・・。

ご質問等ありましたら、掲示板またはメールでお願い致します。