Excel (一般機能)

Excelの一般機能に関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10全般 : Excel 2013)
各シートのデータを1つのシートにまとめたい
投稿日時: 19/11/24 22:12:43
投稿者: kakaka

各シート(1月〜12月)のデータを1度に1枚のシートにまとめたいんですが、
今は各シートをいちいち開いて、コピーペーストしておます。
ないにかもう少し方法があれば教えてください。
 

回答
投稿日時: 19/11/24 22:26:55
投稿者: WinArrow
投稿者のウェブサイトに移動

一発で実行するというとマクロになります。
 
↓に参考例があります。
 
https://www.moug.net/tech/exvba/0040062.html
 
マクロは自分で作成しましょう。

投稿日時: 19/11/25 01:21:19
投稿者: kakaka

やはりマクロになりますか…
参考例、ありがとうございます。
 
 

回答
投稿日時: 19/11/25 08:22:57
投稿者: んなっと

PowerQueryをインストールすれば可能ですよ。
Web検索してみてください。
もし使えそうでしたら、インストール後の手順を書き込みます。

回答
投稿日時: 19/11/25 10:07:32
投稿者: メジロ2

>1枚のシートにまとめたい
どのようにまとめたいのかが不明ですが、
 
>各シート(1月〜12月)のデータ
この文書からは同じような構成の表のように思いますので
集計的なまとめ方でよろしければ「統合」という機能を
検討されてはいかがでしょうか?

回答
投稿日時: 19/11/25 21:43:30
投稿者: んなっと

どちらの方法も、元データに変更・増減があったら
 データ
→すべて更新
だけでOKです。
 
 
【方法1・テーブルに変換しておく・おすすめ】
 
●1月 シートで
 ホーム
→テーブルとして書式設定
→「先頭行をテーブルの見出しとして使用する」にチェックを入れてOK 
●2月 3月シートも同様に 
 

 PowerQuery
→その他のデータソースから
→空のクエリ
→詳細エディター
→「let ... in ..」の部分を全選択して削除
→以下の文字列を貼り付け
 
let
    Src = Excel.CurrentWorkbook(),
    Exp = Table.ExpandTableColumn(Src, "Content", List.Union(List.Transform(Src[Content], each Table.ColumnNames(_)))),
    Flt = Table.SelectRows(Exp, each Text.StartsWith([Name], "テーブル")),
    Del = Table.RemoveColumns(Flt,{"Name"})
in
    Del
 
→完了
→閉じて読み込む
 
 
【方法2・1月,2月,..シートをテーブルに変換しない】 
 
●新規シートに以下のように
   A
1 Path
2 
A1にPathと入力
A2
=SUBSTITUTE(LEFT(CELL("filename",A1),FIND("]",CELL("filename",A1))-1),"[",)
→ホーム
→テーブルとして書式設定
→「先頭行をテーブルの見出しとして使用する」にチェックを入れてOK
→数式
→名前の管理
→テーブル1を選択して編集
→名前を Bname に変更
→閉じる
 

 PowerQuery
→その他のデータソースから
→空のクエリ
→詳細エディター
→「let ... in ..」の部分を全選択して削除
→以下の文字列を貼り付け
 
let
    Nam = Excel.CurrentWorkbook(){[Name="Bname"]}[Content]{0}[Path],
    Src = Excel.Workbook(File.Contents(Nam), null, true),
    Sht = Table.SelectRows(Src, each [Kind] = "Sheet"),
    Shn = Table.SelectRows(Sht, each Text.EndsWith([Name], "月")),
    Slc = Table.SelectColumns(Shn,{"Name", "Data"}),
    Exp = Table.ExpandTableColumn(Slc, "Data", List.Union(List.Transform(Slc[Data], each Table.ColumnNames(_)))),
    Str0 = Exp[Name]{0},
    Str1 = Exp[Column1]{0},
    Idx = Table.AddIndexColumn(Exp, "Index", 1, 1),
    Flt = Table.SelectRows(Idx, each [Column1] <> Str1 or [Index] = 1),
    Del = Table.RemoveColumns(Flt,{"Index"}),
    Hed = Table.PromoteHeaders(Del, [PromoteAllScalars=true]),
    Ren = Table.RenameColumns(Hed,{{Str0, "SheetName"}})
in
    Ren
 
→完了
→閉じて読み込む

投稿日時: 19/11/26 00:44:29
投稿者: kakaka

教えてくださってありがとございます。
 
具体的にやりたいとこは、ゆうちょ銀行の入出金データをダウンロードすると月別にわかれているので
Sheet1月からSheet12月のデータ(数式は入っていません)を、1つのシートに集めて1月のデータの続きに2月、3月と順番に並べたいだけなんです。
 
・統合も試してみましたが、集計してしまうので不向きでした。
 
・PowerQueryをインストールしてみました。
こんなアドインソフトがあるんですね。
 
「外部データの書き込み」グループの、ファイルからでデータを
読み込んだのですが、そこからのまとめ方がわかりません。
 
 

投稿日時: 19/11/26 07:55:08
投稿者: kakaka

 んなっと様の以下の部分が出なくて
 
【PowerQuery
→その他のデータソースから
→空のクエリ
→詳細エディター
→「let ... in ..」の部分を全選択して削除
→以下の文字列を貼り付け」】
 
もう少し試してみます。
もう少し勉強しないとだめですね
 
結局、クリップボードを出して、
切り取りし、まとめたいSheetで、
すべて貼り付けしました
 
 
 
 
  
 
 

回答
投稿日時: 19/11/26 12:16:08
投稿者: んなっと

先に書いたのは同一ブックの場合です。
別ブックにまとめる場合は...
  
元のブック名がE:\office\Excel\ExcelVBA\月報.xlsxだと仮定して書きます。
  
●新規ブックで
 リボンの[PowerQuery]タブ
→[ファイルから]
→[ブックから]
→上の月報.xlsx選択
→[インポート]
→月報.xlsx[3のような数字]をクリック
→右下の[データの変換]([編集]の可能性もある )
→詳細エディター

  
let
    ソース = Excel.Workbook(File.Contents("E:\offi....\月報.xlsx"), null, true)
in
    ソース
  
の4行のうちの下2行(in + ソース)を以下の文字列に書き換え
  
   , Sht = Table.SelectRows(ソース, each [Kind] = "Sheet"),
    Slc = Table.SelectColumns(Sht,{"Name", "Data"}),
    Exp = Table.ExpandTableColumn(Slc, "Data", List.Union(List.Transform(Slc[Data], each Table.ColumnNames(_)))),
    Str0 = Exp[Name]{0},
    Str1 = Exp[Column1]{0},
    Idx = Table.AddIndexColumn(Exp, "Index", 1, 1),
    Flt = Table.SelectRows(Idx, each [Column1] <> Str1 or [Index] = 1),
    Del = Table.RemoveColumns(Flt,{"Index"}),
    Hed = Table.PromoteHeaders(Del, [PromoteAllScalars=true]),
    Ren = Table.RenameColumns(Hed,{{Str0, "SheetName"}})
in
    Ren
  
→完了
→[ホーム]タブの[閉じて読み込む

トピックに返信