dポイントプレゼントキャンペーン実施中!

シート1には名前・ID・クラスなどが入力してあります。
シート2に簡単なクラス別の表を作成したいです。
クラス1 田中 佐藤 小松 遠山 青山
     高橋 清水
クラス2 長井 鈴木 成田 横田
     
このような感じで1クラス5列で2段くらいで作成したいと考えています。クラスの人数はバラバラです。
クラス別に抽出する方法が知りたいです。また1→2に変更した場合に表のところでもクラス2に移動しているのが理想です。クラスの人数が増える場合もあるので抽出先のセルの指定している数式かコードも教えて頂けると大変助かります。
あまり詳しくないのでご教授お願いいたします。

A 回答 (3件)

No.1さん、No.2さんのおっしゃる通りだと思います。

でも、面白そうなので作ってみました。
ppiroさんのイメージと、ちょっと違いますが、お暇なら試してみて下さい。

【仕様】
クラス番号を入力(または変更)すると、その生徒を該当クラスの箇所にリアルタイムで移動します。
下記の準備を行った後、名前、ID、クラスを入力してください。
ちなみに、クラスを入力(変更)したタイミングで移動が発生しますので、先にクラスを入力すると中途半端な状態で移動させてしまいます。クラスは最後に入力しましょう!!
コピペ等で複数セルが一挙に変更された場合、最初の生徒のみが移動対象となります。2番目以降の生徒は、一人ずつ手でクラスを入力して、移動させる必要があります。

【準備】
Sheet1の1行目を見出しと、次のように入力します。(見出しなので、文字は適当でもOKです)
A1セル 名前
B1セル ID
C1セル クラス1 ※ここまでで、1クラス分です。このパターンで必要なだけ作成してください。
D1セル 名前
E1セル ID
F1セル クラス2
 ・
 ・
 ・

次に、Sheet1のコードモジュールに次のコードを張り付けます。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim MyRange As Variant
Dim Seito As Range

For Each Seito In Target
If Seito.Row <> 1 And _
Seito.Column Mod 3 = 0 Then
MyRange = Seito.Address()
Call MoveSeito(Seito)
Range(MyRange).Select
End If
Exit For
Next

End Sub


Public Sub MoveSeito(ByVal Target As Range)
Dim FromRange As Range
Dim ToRange As Range
Dim ClassColumn As Long
Dim I As Long

Cells.Interior.Pattern = xlNone

Set FromRange = Range(Target, Target.Offset(0, -2))
With FromRange.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 49407
.TintAndShade = 0
.PatternTintAndShade = 0
End With

ClassColumn = Target.Value * 3
For I = 2 To Cells(Cells(Rows.Count, ClassColumn).End(xlUp).Row, ClassColumn).Row + 1
If Cells(I, ClassColumn).Offset(0, -1) = "" Or _
Cells(I, ClassColumn).Offset(0, -1) > Target.Offset(0, -1) Then
Set ToRange = Cells(I, ClassColumn)
Set ToRange = Range(ToRange, ToRange.Offset(0, -2))
Exit For
End If
Next I

Application.EnableEvents = False
FromRange.Copy
ToRange.Insert Shift:=xlDown
FromRange.Delete Shift:=xlUp
Application.EnableEvents = True

End Sub
    • good
    • 0
この回答へのお礼

大量の、コピペを使うので私のやりたいこと違いましたが、コードをわざわざ作って頂いたことが嬉しかったのでベストアンサーに選ばせて頂きます。

お礼日時:2016/03/08 14:30

>1クラス5列で2段くらいで作成したいと考えています。


>クラスの人数はバラバラです。
クラスの人数がバラバラなら、5列2段で収まらない時も起きうるのでは?
年に一度程度であれば、わざわざシステム化する必要もなく
並び替えとコピペで対応した方が早くないですか?
    • good
    • 0
この回答へのお礼

収まらないので、セルの抽出先で何処を、変えたらいいかも質問しています。
年に1度とは言ってませんし。表の並べ替えとコピペそれとデータの方も書き変えないといけないので。毎回100件位あるとどうしてもミスが出てしまうので1度の処理で出来るよう考えていました。

お礼日時:2016/03/08 14:35

》 このような感じで…作成したいと考えています


「あまり詳しくない」とのことですが、貴方は何処までならお出来になるのでしょうか?
ひょっとして全く出来ないので、丸投げしているとか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!