| 
    
     |  | みなさま、はじめまして。コスモスです。何も知りませんので、どうぞよろしくご指導お願いします。 
 ExcelのRANK関数の第2引数は、順位を調べる範囲を絶対参照で指定しますね。
 =RANK(対象,Sheet1:Sheet3!$B$2:$B$26)
 たとえば、あらかじめこういう計算式が格納されたセルとシートを持つブックを、集計用に作成しておきます。国語、英語、数学……と各教科担当の先生方が自分の受け持ちの生徒の点数だけを入力すれば、あとは自動的に学級順位、全校順位が出るようにしたいのです。この計算式が格納されたブック単体であれば、点数だけを入力すればあとは自動的に全校順位が出ますよね。これを、VBAのプログラミングで複数のブックを呼び出して(ファイルの入出力し)、RANK関数の戻り値を全校順位としてして印刷したいのです。
 
 たとえば、高校の5教科の実力テストのクラス順位ではなく全校順位をはじき出す方法とか……。各クラスごとに、独立したブックがクラスの数だけあります。ちなみに、うちの学校の古い成績処理システムのVBAのソースコードの概略を下記に転記してみますね。ところが、このVBAの成績処理システムでは全校順位が出るはずなのに出ないのです。どう修正すれば、すっきり全校順位が出るのでしょう? どなたか、おわかりになる方、よろしくご指導お願いします。「自分ならこうする」というまったく別のコードや、大体の一般論や、ちょっとしたヒントや部分的な思いつきだけでもOKです。
 
 -----------------------------------------------------
 Public Sub Seiseki_Rank()
 
 Application.ScreenUpdating = False
 fname12 = "定期" & クラス略称 & ".xls"
 fname11 = ThisWorkbook.Path & "\DATA\" & fname12
 fname32 = "実力テスト" & クラス略称 & ".xls"
 fname31 = ThisWorkbook.Path & "\DATA\" & fname32
 
 '学科順位を記載する場合、集計表を開く
 学科あり = False
 If 学科処理 = True Then
 学科集計book = "学科" & Left(クラス略称, 2) & ".xls"
 学科集計path = ThisWorkbook.Path & "\GAKKA\" & 学科集計book
 
 '集計用シートがなければ順位転記処理をスキップ
 If Dir(学科集計path) = "" Then
 MsgBox "集計シートがないので学科順位の転記をスキップします"
 学科あり = False
 Else
 '集計シートを開く
 Workbooks.Open Filename:=学科集計path
 学科あり = True
 Set 学科ブック = Workbooks(学科集計book)
 End If
 End If
 
 
 '全校集計シートを参照して全校順位を印刷するために集計表を開く
 全校集計book = "実力テスト集計.xls"
 全校集計path = ThisWorkbook.Path & "\DATA\" & 全校集計book
 
 '全校集計用シートがなければ順位転記処理をスキップするためフラグをオン
 If Dir(全校集計path) = "" Then
 MsgBox "集計シートがないので全校順位の転記をスキップします"
 全校あり = False
 Else
 '集計シートを開く
 Workbooks.Open Filename:=全校集計path
 全校あり = True
 Set 全校ブック = Workbooks(全校集計book)
 End If
 
 End Sub
 
 
 |  |