A列、複数行(3から5行程度)が結合されたセルでタイトルデータ、B列の各行は詳細が入力されています。
これをA列のセルを結合を解除、B列の詳細データは、それぞれB列、C列、D列、・・・というように一行にしたいと考えています。
手作業で無く効率よくこなせる方法を教えて下さい。
別途「処理結果」シートを作成し、結果を出力する形のEXCELマクロです。貼り付けると行頭スペースがとれて読みにくいですが、そのままSubからEnd Subまでをコピーしていただければ動きます。
結合セルの取り扱いが面倒なので、作業用シートにデータコピーし、結合解除して処理しています。
二列目のセルが空になったところでデータが終わったとみなし、作業用シートを削除して終了します。
----------------
Sub Macro1()
Dim WB_C As Integer '処理シートの行・列カウンタ
Dim RT_C, RT_R As Integer '結果シートの行・列カウンタ
Dim WB1 As String '処理シート名
WB1 = ActiveSheet.Name
ActiveWorkbook.Worksheets.Add.Name = "処理結果"
ActiveWorkbook.Worksheets.Add.Name = "作業用"
' シートを全コピー
Sheets(WB1).Select
Cells.Select
Selection.Copy
Sheets("作業用").Select
ActiveSheet.Paste
' 作業用シートで、A列のセル結合をすべて解除
Columns("A:A").Select
Selection.UnMerge
WB_C = 1
RT_R = 1 '処理結果ワークシートの行コントロール
RT_C = 1 '処理結果ワークシートの列コントロール
Do Until (Cells(WB_C, 2) = "")
CellA = Cells(WB_C, 1)
Worksheets("処理結果").Cells(RT_C, RT_R) = Worksheets("作業用").Cells(WB_C, 1)
RT_R = RT_R + 1
Worksheets("処理結果").Cells(RT_C, RT_R) = Worksheets("作業用").Cells(WB_C, 2)
RT_R = RT_R + 1
WB_C = WB_C + 1
Do While (Cells(WB_C, 1) = "")
Worksheets("処理結果").Cells(RT_C, RT_R) = Worksheets("作業用").Cells(WB_C, 2)
WB_C = WB_C + 1
RT_R = RT_R + 1
If Cells(WB_C, 2) = "" Then GoTo EOJ
Loop
RT_C = RT_C + 1
RT_R = 1
Loop
EOJ:
Worksheets("作業用").Delete
End Sub
----------------
別途「処理結果」シートを作成し、結果を出力する形のEXCELマクロです。貼り付けると行頭スペースがとれて読みにくいですが、そのままSubからEnd Subまでをコピーしていただければ動きます。
結合セルの取り扱いが面倒なので、作業用シートにデータコピーし、結合解除して処理しています。
二列目のセルが空になったところでデータが終わったとみなし、作業用シートを削除して終了します。
----------------
Sub Macro1()
Dim WB_C As Integer '処理シートの行・列カウンタ
Dim RT_C, RT_R As Integer '結果シートの行・列カウンタ
Dim WB1 As String '処理シート名
WB1 = ActiveSheet.Name
ActiveWorkbook.Worksheets.Add.Name = "処理結果"
ActiveWorkbook.Worksheets.Add.Name = "作業用"
' シートを全コピー
Sheets(WB1).Select
Cells.Select
Selection.Copy
Sheets("作業用").Select
ActiveSheet.Paste
' 作業用シートで、A列のセル結合をすべて解除
Columns("A:A").Select
Selection.UnMerge
WB_C = 1
RT_R = 1 '処理結果ワークシートの行コントロール
RT_C = 1 '処理結果ワークシートの列コントロール
Do Until (Cells(WB_C, 2) = "")
CellA = Cells(WB_C, 1)
Worksheets("処理結果").Cells(RT_C, RT_R) = Worksheets("作業用").Cells(WB_C, 1)
RT_R = RT_R + 1
Worksheets("処理結果").Cells(RT_C, RT_R) = Worksheets("作業用").Cells(WB_C, 2)
RT_R = RT_R + 1
WB_C = WB_C + 1
Do While (Cells(WB_C, 1) = "")
Worksheets("処理結果").Cells(RT_C, RT_R) = Worksheets("作業用").Cells(WB_C, 2)
WB_C = WB_C + 1
RT_R = RT_R + 1
If Cells(WB_C, 2) = "" Then GoTo EOJ
Loop
RT_C = RT_C + 1
RT_R = 1
Loop
EOJ:
Worksheets("作業用").Delete
End Sub
----------------
エラーで400とでるのですが、何がいけないのでしょうか?結合も解除して貼り付けています。
(1)A列のセル結合を解除
(2)A列が空いているセルを埋める
例: AAA 1 AAA 2 AAA 3 ・・・ CCC 5
(3)タイトルをつける
例: 名前 数値 AAA 1 AAA 2
(4)ピボットテーブルを作成
行のフィールド:名前 列のフィールド:数値 データアイテム:数値の合計
とすると
http://q.hatena.ne.jp/images/question/1186030/1186030784.jpg
と同じ並びはできましたが、いかがでしょうか?
なお、B列が数値じゃなく文字だと有無しか判らないですが・・
サンプル画像と違って、実際には、B列は数値では無いので、上記では出来ませんでした。
関数でやってみます。
念のため、作業シートを一枚作ってやってみてください。
こんな表になります。
A | B | C | D |
---|---|---|---|
AAA | AAA1 | 1 | |
AAA | AAA2 | AAA | 2 |
AAA | AAA3 | 3 | |
BBB | BBB1 | 1 | |
BBB | BBB2 | 2 | |
BBB | BBB3 | BBB | 3 |
BBB | BBB4 | 4 | |
BBB | BBB5 | 5 | |
CCC | CCC1 | 1 | |
CCC | CCC2 | CCC | 2 |
CCC | CCC3 | 3 | |
CCC | CCC4 | 4 |
以上ご参考まで。
http://www.eurus.dti.ne.jp/~yoneyama/Excel/jituyou/calendar.htm
申し訳ありません。マクロ作成時に作った大元のファイルは問題なく動くのですが、なぜか貼り付けたテキストをコピーしてステップで動かしたとき、以下で引っかかりました。(でもエラーコードは1004です。)
// ' 作業用シートで、A列のセル結合をすべて解除
// Columns("A:A").Select
この、"Columns("A:A").Select"を以下に書き換えてみてください。
Worksheets("作業用").Columns(1).Select
エラーコードが違うのが気になりますが、お手数ですが、ステップ(F8を押すと1ラインずつコマンドを実行してくれます)実行していただくとひっかかる箇所が特定できるので、回答がつけやすいです。
これが最後の回答になるので、もしまだ問題が出るようであれば、トラックバックかコメントで対応させていただきます。
ところで、結合はマクロの中で解除していますので、当初例示いただいた形のデータ形式で動くはずです。(ちょうど今回修正を加える部分が結合解除してる箇所です。)
Sub Macro1()
Dim WB_C As Integer '処理シートの行・列カウンタ
Dim RT_C, RT_R As Integer '結果シートの行・列カウンタ
Dim WB1 As String '処理シート名
WB1 = ActiveSheet.Name
ActiveWorkbook.Worksheets.Add.Name = "処理結果"
ActiveWorkbook.Worksheets.Add.Name = "作業用"
' シートを全コピー
Sheets(WB1).Select
Cells.Select
Selection.Copy
Sheets("作業用").Select
ActiveSheet.Paste
' 作業用シートで、A列のセル結合をすべて解除
Worksheets("作業用").Columns(1).Select
Selection.UnMerge
WB_C = 1
RT_R = 1 '処理結果ワークシートの行コントロール
RT_C = 1 '処理結果ワークシートの列コントロール
Do Until (Cells(WB_C, 2) = "")
CellA = Cells(WB_C, 1)
Worksheets("処理結果").Cells(RT_C, RT_R) = Worksheets("作業用").Cells(WB_C, 1)
RT_R = RT_R + 1
Worksheets("処理結果").Cells(RT_C, RT_R) = Worksheets("作業用").Cells(WB_C, 2)
RT_R = RT_R + 1
WB_C = WB_C + 1
Do While (Cells(WB_C, 1) = "")
Worksheets("処理結果").Cells(RT_C, RT_R) = Worksheets("作業用").Cells(WB_C, 2)
WB_C = WB_C + 1
RT_R = RT_R + 1
If Cells(WB_C, 2) = "" Then GoTo EOJ
Loop
RT_C = RT_C + 1
RT_R = 1
Loop
EOJ:
Worksheets("作業用").Delete
End Sub
で実行、”ActiveWorkbook.Worksheets.Add.Name = "処理結果"”のあとF8を入力するとストップします。エラー1004
よろしくお願いします。
エラーで400とでるのですが、何がいけないのでしょうか?結合も解除して貼り付けています。