人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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


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

●質問者: WATANABE
●カテゴリ:コンピュータ インターネット
✍キーワード:A1 エクセル データ マクロ 五行
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● SALINGER
●50ポイント ベストアンサー

前回と逆ですね。

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

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

2 ● きゃづみぃ
●35ポイント
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とか に変えてください。

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ