特定のセル値に基づいて値 1 または 2 を持つ列を追加して、データを均等に半分に分割します - Excel

特定のセル値に基づいて値 1 または 2 を持つ列を追加して、データを均等に半分に分割します - Excel

学生情報を含むデータベースから取得したクエリがあります。テーブルには、StudentID、CourseID、CourseGrade の列があります。

CourseGrade 列には、「Satisfactory」、「Above Average」、「Average」、「Fair」、「Poor」、最後に「Withdrawn」のいずれかの値を含めることができます。

これらの学生にアドバイスや指導を行うために 2 人のカウンセラーが割り当てられます。

注記:学生は1つのコースのみ、または複数のコースに登録できます。

各カウンセラーには、同じ数の学生を割り当てる必要があります (学生リスト全体を半分に分割する必要があります。ただし、一意の StudentID が奇数の場合は、1 人のカウンセラーに 1 人の学生が追加で割り当てられます)。学生が登録しているコースの数に関係なく、1 人のカウンセラーのみが割り当てられます。


私が達成したいことは次のとおりです:

CounsellorNbr というテーブルに 4 番目の列を追加し、テーブル内のすべての行をトラバースして、各学生のレコードに値 '1' と '2' を交互に追加したいと思います。また、同じ StudentID が複数のコースの隣接する行に表示される場合は、この新しい列で両方に同じ番号が付与される必要があります。

数字 1 または 2 の列を追加する代わりに、StudentID 列を 2 色のいずれかで強調表示することもできます。その方が簡単です。

使用できるプログラムは Microsoft Excel と Access だけです。最終的には、このタスクは技術者以外の人が頻繁に行う必要があるため、マクロを実行して実行できるようにしたいのですが、このようなリストをトラバースして、上記のように値 (またはセルの色) を追加するにはどのような種類の関数が必要かを判断するのに苦労しています。

役に立つヒントや提案、始める場所などがあれば、ぜひ教えてください。

答え1

1に設定D1D2

=IF(A1=A2, D1, 3-D1)

そして下にドラッグ/フィルします。これは、前の行の StudentID が現在の行の StudentID と等しい場合、これはこの学生の 2 番目の行であることを意味します (つまり、これは学生の複数行データ クラスターの一部であり、最初の行ではありません)。その場合、この行の CounsellorNbr は、前の行の CounsellorNbr と同じである必要があります (両方の行が同じ学生のものであるため)。それ以外の場合 ( A1A2)、これは学生の最初の行であるため、前の行の CounsellorNbr から別の CounsellorNbr を割り当てます。これを行うにはさまざまな方法がありますが、最も簡単な方法は算術です。3 から引きます。3−1=2、3−2=1。

将来的にカウンセラーが2人以上(例えば5人)になる場合は、3-D1上記の式のを、やや単純な

IF(D1=5, 1, D1+1)

これは、「前の生徒が最後の(5番目の)カウンセラーに当たった場合は、この生徒は最初のカウンセラーに当たって、そうでない場合は次のカウンセラーに進む」というものです。あるいは、もう少し芸術的な

MOD(D1,5)+1

これは、「前のカウンセラー番号を 5 で割り、余りに 1 を足す」というものです。これは実際よりも複雑に見えます。

  • 1÷5は0で余りは1
  • 2÷5は0で余りは2
  • 3÷5は0で余りは3
  • 4÷5は0で余りは4です
  • 5÷5は1で余りは0です

つまり、他の式とまったく同じ結果になります。最後の式に達していない場合は 1 を加算し、最後の式に達した場合は最初の式に戻ります。

関連情報