エクセルにて入力されたデータで下記のような動きをするマクロを教えてください。


例:
変換前:
      A1  B1  C1
一行目 加藤 国語 90
二行目 斉藤 国語 80
三行目 田中 国語 85
四行目 

変換後:
      A1
一行目 加藤
二行目 国語
三行目 90 
四行目 斉藤
五行目 国語 
六行目 80
七行目 田中
八行目 国語
九行目 85


例では3回の繰り返しですが、変換前のデータが数学や社会など教科が増えた場合に対応出来る様に変更できるとさらに嬉しいです。

回答の条件
  • 1人2回まで
  • 登録:2009/03/30 04:39:43
  • 終了:2009/03/30 21:46:45

ベストアンサー

id:SALINGER No.1

SALINGER回答回数3454ベストアンサー獲得回数9692009/03/30 08:27:40

ポイント50pt

前回と逆ですね。

今回は列の数を入れなくても、表から取得できます。

Option Explicit

Sub Macro1()
    Dim lastRow As Long
    Dim lastCol As Long
    Dim s As String
    Dim r As Long
    Dim c As Long
    
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row
    lastCol = Cells(1, Columns.Count).End(xlToLeft).Column
    
    For r = lastRow To 1 Step -1
        For c = 1 To lastCol
           s = Cells(r, c).Value
           Cells(r, c).Value = ""
           Cells((r - 1) * lastCol + c, 1).Value = s
        Next
    Next
End Sub

その他の回答(1件)

id:SALINGER No.1

SALINGER回答回数3454ベストアンサー獲得回数9692009/03/30 08:27:40ここでベストアンサー

ポイント50pt

前回と逆ですね。

今回は列の数を入れなくても、表から取得できます。

Option Explicit

Sub Macro1()
    Dim lastRow As Long
    Dim lastCol As Long
    Dim s As String
    Dim r As Long
    Dim c As Long
    
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row
    lastCol = Cells(1, Columns.Count).End(xlToLeft).Column
    
    For r = lastRow To 1 Step -1
        For c = 1 To lastCol
           s = Cells(r, c).Value
           Cells(r, c).Value = ""
           Cells((r - 1) * lastCol + c, 1).Value = s
        Next
    Next
End Sub
id:taknt No.2

きゃづみぃ回答回数13539ベストアンサー獲得回数11982009/03/30 07:11:07

ポイント35pt
Sub 変換()

'展開するシート名  新しくシートを作ってそのシート名をセットしてください。
c = "Sheet2"

Worksheets(c).Columns("A:A").Delete Shift:=xlToLeft

e = 1

For a = 1 To 65536
    For b = 1 To 256
        If Cells(a, b) = "" Then Exit For
        Worksheets(c).Cells(e, 1) = Cells(a, b)
        e = e + 1
        If e > 65536 Then End
    Next b
Next a

End Sub

実行はするにあたり、新しいシートを作成して、ソース中に そのシート名を セットしてください。

実行するときは データがあるシートを 開いた状態で 実行させてください。

質問では AからC列とありますが、プログラムでは 256列まで展開します。

もし問題が あれば

For b = 1 To 256

の 256を 3とか に変えてください。

変換前の教科が 増えるかもしれないようなことが 書いてあったので

教科の数が いくつでも できるようにしてあります。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません