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

ExcelのVBAに挑戦しよう Part2



 Excelで表を作り自動で処理するには関数が多く使われますね。関数を覚えてしまえばほとんどのことが処理できてしまいます。でも、中には簡単な処理にもかかわらず関数で処理できない、または処理しにくいものもあります。

 今回は処理に適する関数があるにもかかわらず制約によって処理しきれないものを紹介しましょう。

関数のネストレベルは「7」!
 ネストレベル???何じゃそりゃ???
ネストは「入れ子」とも呼ばれ、関数の内部に関数を使うことです。レベルが「7」ということは関数の中に7個の関数を使えるということです。

今回は成績処理をしましょう!
C列の得点をもとに90点以上は「A」、80点以上は「B」というように10段階の成績をつけることにします。

1.関数で作ってみましょう!
 関数が得意の方なら、すぐ「IF関数」が思い浮かびますよね。条件分けなら「IF関数」。
”D2”セルに「IF関数」を入れて、”D3”から”D11”まで式をコピーすれば完成。
式はこんな感じでしょうか

 =IF(""A1"">=90,"A",IF("A1">=80,"B",IF("A1">=70,"C",IF("A1">=60,"D",IF("A1">=50,"E",IF("A1">=40,"F",
IF("A1">=30,"G",IF("A1">=20,"H",IF("A1">=10,"I","J")))))))))


ちょっと待って下さい。式はあっています。しかしエラーが出てしまいます。     

2.ネストレベルを超えたときの処理は?
 =IF("A1">=90,"A",IF("A1">=80,"B",IF("A1">=70,"C",IF("A1">=60,"D",IF("A1">=50,"E",IF("A1">=40,"F"
,IF("A1">=30,"G",IF("A1">=20,"H",IF("A1">=10,"I","J")))))))))


この式はネストレベル「7」を超えてしまっているので、式としては正しいのですがエラーになってしまうのです。 

ネストレベルを超えたときにはVBAを使って処理をせざるをえません。    

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



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

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

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

'***********************************************************************************************
Dim i As Integer '変数の宣言文
Dim CellData As Variant

i = 1 '得点を拾い出す行、得点の入力した行の1つ前から

Application.ScreenUpdating = False '画面のちらつきを止める処理、画面の再表示をOffにする

Worksheets("Sheet1").Range(Cells(2, 4), Cells(11, 4)).Select '入力する範囲を空欄にする処理
Selection.ClearContents

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

If CellData >= 90 Then '90点以上の時
Worksheets("Sheet1").Cells(i, 4) = "A"
ElseIf CellData >= 80 Then '80点以上の時
Worksheets("Sheet1").Cells(i, 4) = "B"
ElseIf CellData >= 70 Then '70点以上の時
Worksheets("Sheet1").Cells(i, 4) = "C"
ElseIf CellData >= 60 Then '60点以上の時
Worksheets("Sheet1").Cells(i, 4) = "D"
ElseIf CellData >= 50 Then '50点以上の時
Worksheets("Sheet1").Cells(i, 4) = "E"
ElseIf CellData >= 40 Then '40点以上の時
Worksheets("Sheet1").Cells(i, 4) = "F"
ElseIf CellData >= 30 Then '30点以上の時
Worksheets("Sheet1").Cells(i, 4) = "G"
ElseIf CellData >= 20 Then '20点以上の時
Worksheets("Sheet1").Cells(i, 4) = "H"
ElseIf CellData >= 10 Then '10点以上の時
Worksheets("Sheet1").Cells(i, 4) = "I"
Else 'その他の時
Worksheets("Sheet1").Cells(i, 4) = "J"
End If
Loop While CellData <> "" '空欄でないかぎり繰り返す
Application.ScreenUpdating = True '画面の再表示をOnにする

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

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

今回は「If」を使った条件式の使い方です。基本的には以下のような使い方をします。
1)If 条件式 Then
   条件にあう時に行う処理
  End If

2)If 条件式 Then
   条件成立の時に行う処理
  Else
   条件にあわない時に行う処理
  End If

3)If 条件式1 Then
   条件式1にあう時に行う処理
  ElseIf 条件式2 Then
   条件式1にあわなくかつ条件式2にあう時に行う処理
  Else
   条件式1,条件式2ともにあわない時に行う処理
  End If

いろいろなシートで応用してみよう!
評価点やシートの名前行や列等の数値をいじれば自分のやりたいコードに変身するのではないかと・・・。

今回は条件分けに関数と同じ「If」を使いましたがVBAには「Select Case」という式も用意されています。
興味のあるからはインターネットで検索してみたらいかがでしょうか?
「Excel、VBA、Select Case」ですぐに見つかると思います。

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