こんにちは。
Excelで下記のように横並びの表を作成しています。
A列〜C列には重複するデータも入ってます。
D列〜G列には全て異なるデータが入ってます。
A列 B列 C列 D列 E列 F列 G列
A-1 B-1 C-1 D-1 E-1 F-1 G-1
A-1 B-1 C-2 D-2 E-2 F-2 G-2
A-1 B-2 C-3 D-3 E-3 F-3 G-3
A-2 B-3 C-4 D-4 E-4 F-4 G-4
A-2 B-3 C-4 D-5 E-5 F-5 G-5
これを下記のように配置換えをして別の表を作りたいのですが、コピペの作業ではとても時間がかかってしまいます。
関数やマクロを使ってできる方法があれば教えていただけないでしょうか?
(A列に、元の表A列〜C列にあるデータを字下げのように表示させたい。)
A列 B列 C列 D列 E列
A-1
B-1
C-1 D-1 E-1 F-1 G-1
C-2 D-2 E-2 F-2 G-2
B-2
C-3 D-3 E-3 F-3 G-3
A-2
B-3
C-4 D-4 E-4 F-4 G-4
C-4 D-5 E-5 F-5 G-5
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
>ご提案いただいたピボットテーブルで作業もしてみたのですが、
>お示しいただいたように旧C列の重複データが集約されてしまう
>ため、理想した形にはならず、他に手段がないかと困っていた
>ところです。
とのことですが、前回回答でお示しした、手順を少し変更するたけで、ご希望の形にすることは可能だと思います。
前回回答のピボットテーブル作成手順のうち、「コンパクト形式で表示」の手順を省きます。
その次の手順から「OFFSET関数を使用し不要な行を削除する作業まで」を完了します。
「コンパクト形式で表示」の作業を省略しているので、(B)の貼り付けはできません。
その代わりとして、C列とD列の間に空白の列を挿入します。これが添付画像①です。
添付画像でいえばD2に以下の数式を記述します。
=IF(A2<>"",A2,IF(B2<>""," "&B2,IF(C2<>""," "&C2,"")))
これを下方向へオートフィル等でコピーします。この後、全体をコピーして値貼り付けしたものが添付画像➁です。
ほぼ、D列より右はご質問者のご希望の形になっていると思います。ここで、A列からC列を削除したものが添付画像③です。
最上段に見出し行が残っていますが、これを削除するなり他の見出しに変更すれば完成です。
No.4
- 回答日時:
ご質問者の説明だと、A列、B列、C列には重複したデータが存在するとのことです。
だとすると、目指すべき表の重複するデータのある列は新A列に見出しセルが存在し、字下げするため、そのセルのB列以降右側が空白になることを許容するというルールではだめなのでしょうか?
ご質問者の例示を見ると旧A列と旧B列は新A列に見出しセルが存在し、そのセルのB列以降右側が空白になることを許容しているようです。
ところが、旧C列には重複データがあるにもかかわらず、新A列の旧C列のデータの右側は空白にせずに、旧D列以降右側データを表示するような構造になっています。
この違いは何なのでしょうか?・・・(A)
添付画像をご覧ください。
添付画像①は、ご質問者がお示しになったデータに「階層1、階層2、階層3、・・・」という見出しをつけたものです。これをSheet1とします。
まず、これを基にピボットテーブルを作成します。別シートに作成するものとして、レポートのレイアウトを「コンパクト形式で表示」を選択し、小計、総計をそれぞれ表示しないとして、階層1~階層3までを行ボックスにドラッグ&ドロップして作成します。
すると、ご質問者のご希望の新A列の内容に極めて近いものが出来上がります。これをコピーして同位置に値貼り付けしておきます(添付画像④オレンジ枠)。・・・(B)
次に別方法のピボットテーブルを作成します。レポートのレイアウトを「アウトライン形式で表示」を選択し、小計、総計をそれぞれ表示しないとして、階層1~階層4までを行ボックスにドラッグ&ドロップして作成したものが、添付画像➁です。
そのうえで、E7に以下の数式を記述し、下方向、右方向にコピーします。すると添付画像➁のような表が出来上がります。
=IF(D7="","",VLOOKUP($D7,Sheet1!$D:$G,COLUMN(B1),FALSE))
しかし、このままでは、前述の(A)の違いがあるので、ご質問者のご希望のものになりません。
表全体をコピーして同じ位置に値貼り付けし、オートフィルターを付けて、C列が空白、D列が空白以外の行を抽出し、C7に以下の数式を記述し、下方向へコピーします。(添付画像③)
=OFFSET(C7,-1,0)
オートフィルターを解除して、表全体をコピーし、値貼り付けします。もう一度オートフィルターをつけて、C列が空白以外、D列が空白の行を抽出して削除します。
このC列に(B)を貼付けします。その後A列、B列は削除します。これで添付画像④のような、ご質問者のご希望の表が完成します。
すみません、わたしの説明不足なのですが旧C列にあるデータは重複したデータも表示させたいのです。
理由としてはD列〜G列には日付のデータが入っていて、旧C列のデータと紐づいているからです。
ご提案いただいたピボットテーブルで作業もしてみたのですが、お示しいただいたように旧C列の重複データが集約されてしまうため、理想した形にはならず、他に手段がないかと困っていたところです。
No.3
- 回答日時:
こんばんは
・不可逆なので、テストデータでテストしてください。
・インデントは適当なので、調整願います。
Sub Sample_12357444()
Dim keys(0 To 1) As String
Dim sSht, dSht, sRng, dRng, i
Set dSht = ActiveSheet
Set dRng = dSht.Range("A1")
dSht.Copy dSht
Set sSht = ActiveSheet
dSht.Columns("A:G").ClearContents
sSht.Columns("A:G").Sort key1:=Range("A1"), order1:=xlAscending, _
key2:=Range("B1"), order2:=xlAscending, _
key3:=Range("C1"), order3:=xlAscending
For Each sRng In Range(sSht.Cells(1, 1), sSht.Cells(Rows.Count, 1).End(xlUp))
For i = 0 To 1
If sRng.Offset(, i).Value <> keys(i) Then
dRng.Value = String(i * 2, Asc(" ")) & sRng.Offset(, i).Value
keys(i) = sRng.Value
Set dRng = dRng.Offset(1)
End If
Next i
dRng.Value = String(4, Asc(" ")) & sRng.Offset(, 2).Value
dRng.Offset(, 1).Resize(, 4).Value = sRng.Offset(, 3).Resize(, 4).Value
Set dRng = dRng.Offset(1)
Next sRng
Application.DisplayAlerts = False
sSht.Delete
Application.DisplayAlerts = True
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 数学 【 数A 順列 】 問題 A,B,C,D,E,F,Gの7人が1列に並ぶとき, A,Bの2人が間に2人 4 2022/06/19 12:48
- Excel(エクセル) エクセルデーターの並び替え 5 2022/08/06 09:59
- Excel(エクセル) Excelの列から検索して該当する行を別シートに転記するVBA 2 2022/12/20 09:35
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Excel(エクセル) EXCEL 行内のデータを2行に分けて、表を作り直したいのです。教えてください。 5 2023/06/25 14:00
- Excel(エクセル) EXCEL 関数を教えてください。(A列の同じ値が複数ある場合vlookupで出来ますか) 4 2022/12/07 20:54
- Excel(エクセル) エクセルシートのデータを1列飛ばしで別ブックのシートに貼り付けるマクロが知りたい 2 2023/06/05 22:37
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- Visual Basic(VBA) Worksheets メソッドは失敗しました。のエラー処理のやり方 4 2022/05/29 21:29
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 3 2022/06/12 11:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル初心者です 関数の入れ...
-
エクセルで二つの数字の小さい...
-
LOOKUP関数を使えばいいのでし...
-
PowerPointで表の1つの列だけ...
-
エクセルで最初のスペースまで...
-
エクセル 文字数 多い順 並...
-
VBAで文字列を数値に変換したい
-
2つのエクセルのデータを同じよ...
-
Excelで半角の文字を含むセルを...
-
エクセルの並び変えで、空白セ...
-
EXCELで 一桁の数値を二桁に
-
エクセルの表から正の数、負の...
-
Excel、市から登録している住所...
-
エクセルで文字が混じった数字...
-
A列がない・・・A列が非表示に...
-
エクセルの項目軸を左寄せにしたい
-
エクセルで一列おきに空白列を...
-
【ACCESS/必須条件とOR条件を組...
-
エクセルの隣り合う列のグループ化
-
エクセル(勝手に太字になる)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
エクセルで最初のスペースまで...
-
2つのエクセルのデータを同じよ...
-
エクセル(勝手に太字になる)
-
「B列が日曜の場合」C列に/...
-
エクセル 文字数 多い順 並...
-
EXCELで 一桁の数値を二桁に
-
エクセル 同じ値を探して隣の...
-
VBAで文字列を数値に変換したい
-
エクセルの並び変えで、空白セ...
-
Excelで半角の文字を含むセルを...
-
エクセルで文字が混じった数字...
-
Excel、市から登録している住所...
-
A列がない・・・A列が非表示に...
-
エクセルの表から正の数、負の...
-
[関数得意な方]教えて下さい・...
-
エクセルの項目軸を左寄せにしたい
-
エクセル 時間帯の重複の有無
-
Excelにてある膨大なデータを管...
おすすめ情報