- ベストアンサー
エクセルVBA 行列を一気に変換する方法教えて
エクセル シート1 A1列 東京駅 9:30 出身大阪 男性 56番 大阪駅 10:00 出身京都 女性 22番 名古屋駅 12:00 出身東京 男性 102番 といったデータを シート2 に 東京駅 9:30 出身大阪 男性 56番 大阪駅 10:00 出身京都 女性 22番 名古屋駅 12:00 出身東京 男性 102番 に転記したいのですが、 行列を変換してコピーという手作業をやってます。 限界なんでVBAでやりたいのですが どのような記述になりますでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは! Sheet1・A列のデータは1行目からあり、5行で一塊とします。 標準モジュールにしてください。 Sub Sample1() Dim i As Long, cnt As Long, wS As Worksheet Set wS = Worksheets("Sheet2") Application.ScreenUpdating = False With Worksheets("Sheet1") For i = 1 To .Cells(Rows.Count, "A").End(xlUp).Row Step 5 cnt = cnt + 1 .Cells(i, "A").Resize(5).Copy wS.Cells(cnt, "A").PasteSpecial Paste:=xlPasteAll, Transpose:=True Next i Application.CutCopyMode = False End With Application.ScreenUpdating = True wS.Activate End Sub こんな感じではどうでしょうか?m(_ _)m
その他の回答 (1)
- keithin
- ベストアンサー率66% (5278/7941)
わざわざマクロを持ち出してやりたいならそれも一つの方法ですが、簡単に手作業で。 手順: シート2のA1に =Sheet1!A1 シート2のB2に =Sheet1!A2 シート2のC3に =Sheet1!A3 シート2のD4に =Sheet1!A4 シート2のE5に =Sheet1!A5 の数式を記入 A1:E5を選択、下向けにシート1に用意したリストの下端までオートフィルドラッグしてコピー #参考 =IF(Sheet1!A1="","",Sheet1!A1) のような数式にしても勿論構わない A:E列を選択 Ctrl+Gを押す 現れたダイアログでセル選択をクリックする 現れたダイアログで空白セルにマーク 右クリックして削除を選択、上に詰めて完成。 >…という手作業をやってます という作業を毎回やってるなら、上述で準備したシート1に新しいデータを埋めてやれば、次回からはシート2に勝手に欲しい結果が並んでます。 必要に応じてシート2から更にコピーし、どこか必要な場所に形式を選んで貼り付けの「値」で貼り付けて値化しても勿論構いません。 #参考 sub macro1() dim n as long worksheets("Sheet2").range("A:E").clearcontents n = worksheets("Sheet1").range("A65536").end(xlup).row \ 5 worksheets("Sheet2").range("A1:E" & n).formula = "=INDEX(Sheet1!$A:$A,(ROW()-1)*5+COLUMN())" worksheets("Sheet2").range("A1:E" & n).value = worksheets("Sheet2").range("A1:E" & n).value end sub とかで一気にやっても構いません。 このマクロで記入させてるような数式を、マクロとか使わず手で記入するだけでも勿論出来ます。
お礼
素早い回答ありがとうございました。 関数をマクロを使って入力してしまう方法もあったんですね ありがとうございます。
お礼
素早い回答ありがとうございました。 セルにしてデータが 2400こデータがあり なんとかならないかと考えているところです。 また 質問させていただきます。