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

エクセルについての質問です。

A列、複数行(3から5行程度)が結合されたセルでタイトルデータ、B列の各行は詳細が入力されています。

これをA列のセルを結合を解除、B列の詳細データは、それぞれB列、C列、D列、・・・というように一行にしたいと考えています。

手作業で無く効率よくこなせる方法を教えて下さい。



1186030784
●拡大する


●質問者: WATANABE
●カテゴリ:コンピュータ
✍キーワード:エクセル セル タイトル データ 入力
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● momoko2004
●100ポイント ベストアンサー

別途「処理結果」シートを作成し、結果を出力する形の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とでるのですが、何がいけないのでしょうか?結合も解除して貼り付けています。


2 ● y3b5
●0ポイント

(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列は数値では無いので、上記では出来ませんでした。


3 ● stingerwolf
●0ポイント

関数でやってみます。

念のため、作業シートを一枚作ってやってみてください。



こんな表になります。

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


4 ● momoko2004
●0ポイント

申し訳ありません。マクロ作成時に作った大元のファイルは問題なく動くのですが、なぜか貼り付けたテキストをコピーしてステップで動かしたとき、以下で引っかかりました。(でもエラーコードは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

よろしくお願いします。

関連質問


●質問をもっと探す●



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