交互に繰り返し処理するような流れは、カウンタに対する偶数/奇数の判定で行うことが多いです。
今回のケースも、何人目かのカウントを数えておき、n人目のnが偶数か奇数かの判断で出力列を変更してあげればいいと思います。
偶数/奇数の判定方法ですが、
・n/2の値と、少数部を切り捨てたInt(n/2)の値が同じなら偶数と判断
・2で割った余りが0なら偶数、1なら奇数という判断
のようにいくつか方法あります。
以下サンプルです。
Dim rng as Range '読込セル
Dim shtRead as Sheet '読込シート
Dim shtWrite as Sheet '出力シート
Set shtRead = Sheets("得点入力シート") '読込シートを設定
Set shtWrite = Sheets("得点表印刷シート") '出力シートを設定
Dim iCnt as Integer '読込件数カウンタ
Dim iWriteCol as Integer '出力基準列
'カウンタ初期化
iCnt = 0
'A4~A9の範囲をループ処理
For Each rng In shtRead.Range("A4:A9")
'カウンタをインクリメント
iCnt = iCnt + 1
'カウンタの偶数/奇数を判断
'If (iCnt / 2) <> Int(iCnt / 2) Then '判定方法① Int型で整数にした値と同じかどうかで判断(同じ:偶数 異なる:奇数)
If (iCnt Mod 2) = 1 Then '判定方法② 2で割った余りで判断(余り0:偶数 余り1:奇数)
'奇数の場合:I列
iWriteCol = 9
Else
'奇数の場合:L列
iWriteCol = 12
End If
'読込セルの行から各列の値を取得し、出力シートに転記する
shtWrite.Cells(1 , iWriteCol + 1) = shtRead.Cells(rng.Row, 1).Value '学生番号
shtWrite.Cells(4 , iWriteCol + 0) = shtRead.Cells(rng.Row, 2).Value '名前
shtWrite.Cells(5 , iWriteCol + 1) = shtRead.Cells(rng.Row, 3).Value '国語
shtWrite.Cells(6 , iWriteCol + 1) = shtRead.Cells(rng.Row, 4).Value '算数
shtWrite.Cells(7 , iWriteCol + 1) = shtRead.Cells(rng.Row, 5).Value '英語
Next
机上で書いたコードなのでそのまま動くかはわかりませんが、参考までに。
追記
VBA初学者ということでしたので、提示したソースのポイントを解説させていただきます。
ポイント①:対象範囲をループ処理
For Each rng In shtRead.Range("A4:A9")
~
Next
の部分で読込シートのA4~A9の範囲をループ処理しています。
これによりrng変数には、
1週目:A4セル
2週目:A5セル
・・・
6週目:A9セル
という具合に、範囲内のセルが1セルずつ繰り返し処理されるようになっています。
ポイント②:偶数/奇数判定
今回のコードでは、参考までに2つの判定方法を記述してあります。
(判定方法①はコメント化してあるので、実際には判定方法②で動作しています。)
判定方法①は、n/2についてInt型で整数にした値と同じかどうかで判断する方法です。
例えば3人目の場合、n/2 は 3÷2 = 1.5です。
これに対し、Int型は整数値しか持たないため、Int(1.5)は1に丸められます。
このため 1.5 ≠ Int(1.5)となります。
これが4人目の場合だと、n/2 は 4÷2 = 2.0、Int(n/2)もInt(2.0)=2となるため、
2.0 = Int(2.0)となります。
これを利用して、n/2 が Int(n/2)と同じなら偶数、異なれば奇数と判断しています。
判定方法②は、2で割った時の余りを求めて判断する方法です。
VBAには割り算の余りを返すMODという演算子が用意されています。
偶数なら2で割った余りは0、奇数なら1となることを利用して判断しています。
ポイント③:出力基準列の設定
先の偶数/奇数判断の結果によって、
・奇数なら iWriteCol = 9
・偶数なら iWriteCol = 12
を設定しています。
これはコード内のコメントにも記載したとおり、出力シートのI列、L列を指すための値ものです。
出力する際には、この基準列に対して
・学生番号:iWriteCol + 1 (奇数なら9+1 = J列、偶数なら12+1=M列に出力)
・名前 :iWriteCol + 0 (奇数なら9+0 = I列、偶数なら12+0=L列に出力)
・国語 :iWriteCol + 1 (奇数なら9+1 = J列、偶数なら12+1=M列に出力)
というように位置調整して出力しています。
※Cellsの座標指定はX,Y座標のように勘違いしやすいですが、Cells(行,列)なのでY,Xのイメージになります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/04 09:49
2016/09/07 07:33
2016/09/11 10:24