[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『列ごと3番目の列の下に移動を繰り返したい』(アークン)
SHEET Aのような表が合って、右横5列見出しはそれぞれ日付です。
これをSHEET Bのような日付順、部門(DEPT.)順、ビル番号(BUIL.)順に
並び替えたいのですが、このようなファイルが大量にあるのと、
それぞれのファイルでDEPT. の行数がまちまち(あるファイルでは10が3行、あるファイルは7行あったりします)なので、記録式マクロでは対応できないと思います。
イメージとしては、この例ですと8/2の列を、8/1列の下に順次移動して、ついでにその日付を一番左の列に挿入して行く。次にその下に8/3の列のデータを移動,次に8/4の列をその下に..という繰り返しです。
何か良い方法はないでしょうか。
[SHEET A]
DEPT. BUIL. 8/1 8/2 8/3 8/4 8/5
[SHEET B]
DATE DEPT. BUIL. 実績
8/1 10 AAA 110
8/1 10 BBB 200
8/1 10 CCC 10
8/1 20 AAA 10
8/1 20 BBB 1
8/1 20 CCC 5
8/1 30 AAA 10
8/1 30 BBB 1
8/1 30 CCC 327,190
8/1 40 AAA 5
8/1 40 BBB 200
8/1 40 CCC 10
8/2 10 AAA 210
8/2 10 BBB 300
8/2 10 CCC 0
8/2 20 AAA 124,138
8/2 20 BBB 2
8/2 20 CCC 6
8/2 30 AAA 124,138
8/2 30 BBB 2
8/2 30 CCC 0
8/2 40 AAA 6
8/2 40 BBB 300
8/2 40 CCC 124,138
8/3 10 AAA 310
8/3 10 BBB 400
8/3 10 CCC 200
8/3 20 AAA 200
8/3 20 BBB 3
8/3 20 CCC 7
8/3 30 AAA 200
8/3 30 BBB 3
8/3 30 CCC 0
8/3 40 AAA 7
8/3 40 BBB 400
8/3 40 CCC 200
8/4 10 AAA 410
8/4 10 BBB 500
8/4 10 CCC 300
8/4 20 AAA 300
8/4 20 BBB 4
8/4 20 CCC 8
8/4 30 AAA 300
8/4 30 BBB 4
8/4 30 CCC 581,037
8/4 40 AAA 8
8/4 40 BBB 500
8/4 40 CCC 300
8/5 10 AAA 510
8/5 10 BBB 600
8/5 10 CCC 400
8/5 20 AAA 400
8/5 20 BBB 5
8/5 20 CCC 9
8/5 30 AAA 400
8/5 30 BBB 5
8/5 30 CCC 0
8/5 40 AAA 9
8/5 40 BBB 600
8/5 40 CCC 400
< 使用 Excel:Excel2016、使用 OS:Windows7 >
(マナ) 2020/06/02(火) 22:43
(マナ) 2020/06/03(水) 08:00
こんにちは ^^ エクセル。。。便利ですね(*^^*) マクロでちゃちゃっとすますなら。。。いろいろと方法は有ると思いますが 1.配列に取り込む 2.それを必要な箇所から横、縦、とループ処理で、御入用の物を読み込む 3.別途用意した、配列にぽいぽい、と入れる 4.最後に一括で、所定の箇所へ書き出す。 とかでも出来なくは無いかと。。。← 多分 ^^; m(_ _)m (隠居じーさん) 2020/06/03(水) 09:40
>(こちらEXCEL2013です..) Excel2016じゃないの? (mar) 2020/06/03(水) 17:58
Sub test() Dim wk1 As Worksheet Dim wk2 As Worksheet Dim i As Long Dim j As Long Dim iMax As Long Dim jMax As Long Dim iR As Long
Set wk1 = Sheets("SheetA") Set wk2 = Sheets("SheetB")
iMax = wk1.Cells(1, wk1.Columns.Count).End(xlToLeft).Column jMax = wk1.Cells(wk1.Rows.Count, "A").End(xlUp).Row iR = 1
wk2.Range("A1:D1") = Array("DATE", "DEPT.", "BUIL.", "実績") For i = 3 To iMax For j = 2 To jMax iR = iR + 1 wk2.Cells(iR, "A").Value = wk1.Cells(1, i).Value wk2.Cells(iR, "B").Value = wk1.Cells(j, "A").Value wk2.Cells(iR, "C").Value = wk1.Cells(j, "B").Value wk2.Cells(iR, "D").Value = wk1.Cells(j, i).Value Next j Next i End Sub (???) 2020/06/03(水) 18:06
こんばんは ^^ 既に適切なご案内があるようですが。作ってみましたので。。。 ワークシート Sheet1 が元情報で ワークシート Sheet2 を初期化後、書き出しています。 Option Explicit Sub OneInstanceMain() Const zProgramID As String = "IJ00024.xlsm" Dim zTb As Workbook Dim i As Long Dim j As Long Dim zBase() As Variant Dim zd As Object Dim t As Date t = Timer Set zTb = Workbooks(zProgramID) Set zd = CreateObject("System.Collections.ArrayList") With zTb.Worksheets("Sheet1") zBase = .Cells(1).CurrentRegion.Value End With For i = 3 To UBound(zBase, 2) For j = 2 To UBound(zBase, 1) zd.Add Array(zBase(1, i), zBase(j, 1), zBase(j, 2), zBase(j, i)) Next Next With zTb.Worksheets("Sheet2") .UsedRange.Clear .Cells(1).Resize(, 4) = Array("Date", "DEPT", "BUIL", "実績") .Cells(2, 1).Resize(zd.Count, 4) = Application.Transpose(Application.Transpose(zd.ToArray)) .UsedRange.Offset(1).Resize(.UsedRange.Rows.Count - 1, _ .UsedRange.Columns.Count).Columns(4).NumberFormatLocal = "#,0" End With zd.Clear Erase zBase Set zd = Nothing Set zTb = Nothing MsgBox "終了 " & Format(Timer - t, "0.0") & " 秒" End Sub (隠居じーさん) 2020/06/03(水) 19:50
ごめんなさい。確かにそうでした。
作業列作って、DEPT.とBUIL.フィールドを結合せて
最後に、区切り位置で分割するとできました。
下記のマクロをステップ実行してみてください。
手作業なら、こんな手順になる、という例です。
すでに、マクロでの回答がありますし
手作業だと、ステップ数も多いので、
マクロがよいのかもしれませんが、参考まで。
Sub test() Dim ws As Worksheet Dim tbl As Range Dim pvc As PivotCache Dim pvt As PivotTable Dim pvf As PivotField Dim r As Range
Set ws = ActiveSheet ws.Columns(3).Insert Set tbl = Cells(3).CurrentRegion tbl.Columns(3).Formula = "=a1&""_""&b1" Set tbl = tbl.Resize(, tbl.Columns.Count - 2).Offset(, 2)
Set pvc = ws.Parent.PivotCaches.Create(xlConsolidation, tbl.Address(, , xlR1C1, True)) Set pvt = pvc.CreatePivotTable(tbl(1).Offset(, tbl.Columns.Count + 2))
pvt.RowAxisLayout xlTabularRow pvt.ColumnGrand = False pvt.RowGrand = False For Each pvf In pvt.PivotFields pvf.Subtotals(1) = False Next pvt.RepeatAllLabels xlRepeatLabels pvt.AddFields RowFields:=Array("列", "行")
Set r = pvt.TableRange1
r.Copy r.PasteSpecial xlPasteValues r.Columns(1).NumberFormatLocal = "m/d" r.Columns(3).Insert r.Columns(2).TextToColumns DataType:=xlDelimited, Other:=True, Other:="_" r.Rows(1).Value = Array("DATE", "DEPT.", "BUIL.", "実績")
tbl.Columns(1).Delete xlToLeft
End Sub
(マナ) 2020/06/03(水) 20:49
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.