VBAソフトを通じて、利便性を、驚異の低価格でお届けします。 アイデアを形に、Saphamy-softは、仕組み創りができます。

ExcelVBA(3)

ExcelVBAでできること(3)

今回は、繰り返し作業の一種で、「条件式を満たしている間、作業を続ける」コードの書き方を学びましょう。

構文
Do While 条件式
  
 Loop

Excelシート上に、生徒の氏名・数学・英語・国語の点数があるとします。このシートは複数のクラスで、先生が担当する教室の生徒用として使用するため、生徒の人員はまちまちになります。
このシートでは、各教科の合計点数と、各科目ごとの最低点数により合否判定をしています。

シート

hantei1

さて、どのようにプログラムしたらいのでしょうか。
必要な変数は、
合否判定の合計基準点数=kijun
合否判定の最低点数=minline
数学点数=suugaku
英語点数=eigo
国語点数=kokugo
合計点数=kei
行番号=r
とします。

プロシージャーは、Sub judge()とします。
ここで、変数はどういう型の変数にするか宣言すること、宣言していない変数は使えない設定をすることを学びましょう。
とりあえず、今回使用するのは正の整数のみ扱うInteger型を使います。Option Explicitは変数の宣言を強制するものです。
変数の宣言は
Dim ○○ as Integer
のようにします。

よって、
Option Explicit
Sub judge()
 Dim kijun As Integer
 Dim minline As Integer
 Dim suugaku As Integer
 Dim eigo As Integer
 Dim kokugo As Integer
 Dim kei As Integer
 Dim r As Integer

今回作業を行うワークシートjudgeをアクティブにします。ワークシートjudgeを開いているイメージです。
Worksheets(“judge”).Activate
変数に代入していきます。
kijun = Range(“B2”).Value
minline = Range(“C2”).Value
それぞれ、ワークシート上の200点、60点です。
r = 5
被判定者は5行目から始まっています。
Sub judge()
 Dim kijun As Integer
 Dim minline As Integer
 Dim suugaku As Integer
 Dim eigo As Integer
 Dim kokugo As Integer
 Dim kei As Integer
 Dim r As Integer
 Worksheets(“judge”).Activate
 kijun = Range(“B2”).Value
 minline = Range(“C2”).Value
 r = 5
End Sub

ここからが、今回学ぶ
Do While 判断式
 
Loop
です。
条件式を満たしている間、作業を続けます。
何を続けるのか、生徒一人づつ合否判断をしていくのです。
条件式は、生徒氏名が入力されている限り、
つまり、A列が空白でない限り作業を続けるのです。
この判断式は、
Cells(r, “A”) <> “”
です。
A5セルから順に、A6,A7,A8と順にセルの値が空白になるまで作業を続けます。
Do While Cells(r, “A”) <> “”
 
Loop
となります。
その作業は、まず、対象行の各科目の点数を読み込みます。
suugaku = Cells(r, “B”).Value
eigo = Cells(r, “C”).Value
kokugo = Cells(r, “D”).Value
そして、合計を計算し、変数に代入します。
kei = suugaku + eigo + kokugo
これらのデータを基にして、合否判断をします。
条件分岐構文は、
IF 条件式 then
 処理1
Else
 処理2
End If
です。条件式に一致したら処理1を実行し、そうでなかったら処理2を実行するものです。
ここでは、
If kei >= kijun And suugaku >= minline And eigo >= minline And kokugo >= minline Then
 Cells(r, “E”).Value = “合格”
Else
 Cells(r, “E”).Value = “不合格”
End If
です。合計点数が基準点数以上で、かつ各科目の点数が最低点数以上であれば、E列に合格と表示、そうでなければ不合格と表示します。
Do … Loop文で重要なこと、無限ループに陥らないコードを書くことです。ここでは、次々と判定行番号を増加させていかねばなりません。つまり、
r=r+1
を必ず記入します。
こうなります。
Do While Cells(r, “A”) <> “”
 suugaku = Cells(r, “B”).Value
 eigo = Cells(r, “C”).Value
 kokugo = Cells(r, “D”).Value
 kei = suugaku + eigo + kokugo
 If kei >= kijun And suugaku >= minline And eigo >= minline And kokugo >= minline Then
  Cells(r, “E”).Value = “合格”
 Else
  Cells(r, “E”).Value = “不合格”
 End If
 r = r + 1
Loop
あと、既に合否判定しているシートを使用するときは、最初に判定欄をクリアする必要がありますので、次のコードを合否判定作業の前に書きます。
Do While Cells(r, “E”) <> “”
 Cells(r, “E”).ClearContents
 r = r + 1
Loop
この結果、rは変化してしまっていますので、合否判定作業の前で、再度
r=5
を書いておきます。

結果はこうなります。
Option Explicit
Sub judge()
 Dim kijun As Integer
 Dim minline As Integer
 Dim suugaku As Integer
 Dim eigo As Integer
 Dim kokugo As Integer
 Dim kei As Integer
 Dim r As Integer
 Worksheets(“judge”).Activate
 kijun = Range(“B2”).Value
 minline = Range(“C2”).Value
 r = 5
 Do While Cells(r, “E”) <> “”
  Cells(r, “E”).ClearContents
  r = r + 1
 Loop
 r = 5
 Do While Cells(r, “A”) <> “”
  suugaku = Cells(r, “B”).Value
  eigo = Cells(r, “C”).Value
  kokugo = Cells(r, “D”).Value
  kei = suugaku + eigo + kokugo
  If kei >= kijun And suugaku >= minline And eigo >= minline And kokugo >= minline Then
   Cells(r, “E”).Value = “合格”
  Else
   Cells(r, “E”).Value = “不合格”
  End If
  r = r + 1
 Loop

End Sub

最後に、採点ボタンの作り方です。
judgeシート選択中に、開発をクリック、挿入をクリック、フォームコントロールのボタンをクリックします。そして、貼り付けたい位置でマウスをドラッグアンドドロップします。そのあと、マクロ名を問い合わせられますので、judgeを選択します。ボタンを右クリックして、テキストの編集をクリックし、採点と入力します。この採点ボタンをクリックすれば、マクロ(VBA)が実行されます。

 

結果

hantei2

ExcelVBAでできること(1)へ     次へ

 

VBAソフトのことなら何なりとお問い合わせください。 TEL Mail; customerdesk@saphamy.jp

 ゆめやど 

 成城石井 


 デコレーションケーキ 

 格安!月の土地 

 Stay Japan 

 フジテレビ フラワーネット 

 ひとてまい 

 赤い風船 日本旅行 

 大きいサイズはここ 

 マイナビトラベル 

 るるぶダイニング 

 近畿のプリンス鉄道 

 KDDIショッピングモール 

PAGETOP
Copyright © VBAソフトのSaphamy-soft All Rights Reserved.
Powered by WordPress & BizVektor Theme by Vektor,Inc. technology.