アプリ版:「スタンプのみでお礼する」機能のリリースについて

Excelの別ブックの表を1つにまとめたい

Book1(会社A)とBook2(会社B)があります。

それぞれ表の形は同じです。

イメージのように会社Aの下に会社Bのデータを差し込みたいです。

会社Aの東京店の最終行に会社Bの東京を入れたいです。

上記を各ブックにあるデータ全てに対して同様に処理させたいです。

VBAコードなどで一括処理させる方法をご教授いただけますと幸いです。

「Excelの別ブックの表を1つにまとめた」の質問画像

A 回答 (4件)

こんばんは



順序指定をどうしたいのかよくわかりませんが・・

VBAで処理をなさりたいのであれば、
 1)新しいシートにA社のデータの下にB社のデータを転記
 2)A:C列を、第一キーをA列、第二キーをC列にしてソート
という手順で行えば宜しいのでは?

※ 通常の昇順、降順で済む範囲であれば、そのままで行けると思います。
 特殊な順序を指定したい場合は、D列等にその順序を記入しておいて、そちらをキーにするか、ユーザー設定の並べ替え順を設定しておいてそれを利用するとか。
※ データ範囲の取得方法をご存じなら、あとは「マクロの記録」などを利用して参考になされば、作成は可能と思います。


※ スピル機能が利用できる環境で、かつ、データ数がさほど多くない様であれば、関数を1セルに設定しておくことでも可能です。
VSTACK関数で両方のデータを結合して、SORTBY関数等でSORTすれば可能と思います。
    • good
    • 7
この回答へのお礼

お礼遅くなり申し訳ございません。
具体的な方法を教えてくださりありがとうございます。

おかげさまでぶじ並べ替えができました。

お礼日時:2023/12/28 14:48

こんばんは


”あくまでサンプルデータでの” 話ですが
既にある回答の通りの手順で処理するのが普通(簡単)だと思います

>Book1(会社A)とBook2(会社B)があります。
これだけですとどこに結果をまとめるのかわかりません

まとめるブックをAAA.xlsmとして
AAA.xlsmはマクロを記録しているブック(まとめるブック)

あくまでマクロで処理したいのであれば、条件は付きますが
(各ブックが開いている)ほぼマクロの自動記録で記録する事が出来ますね
(エラー処理などはできません)

最初にBook1のシートをコピー
Windows("Book1.xlsx").Activate
Range("A1").Select
Selection.CurrentRegion.Select
Selection.Copy
Windows("AAA.xlsm").Activate
Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode = False

少し分かり難いのはBook2のデータコピーや貼り付け先の記録ですが
少し添削が必要

コピー範囲は

Windows("Book2.xlsx").Activate
Range("A2:C2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy

貼り付け先は
Windows("AAA.xlsm").Activate
Range("A1").Select
Selection.End(xlDown).Select
Selection.End(xlDown).Select
Selection.End(xlUp).Offset(1).Select ’Offset(1)を追加
ここのRangeを削除
ActiveSheet.Paste

後はAAA.xlsmの作業シートのA1セルを選択して Ctrl+Shift+*で選択
リボンの並び替えでA列C列を並び替えして A1セルを選択で終了かな?

記録マクロは分かり難いのであまりお勧めではありませんが、自身で作るという意味で試す価値はあると思います

上記をなぐり書きすると

Sub qqq()
Dim wb As Workbook
Dim wbA As Workbook, wbB As Workbook
Set wb = ActiveWorkbook
Dim bk As Workbook
For Each bk In Workbooks
If bk.Name = "Book1.xlsx" Then Set wbA = bk
If bk.Name = "Book2.xlsx" Then Set wbB = bk
Next
If wbA Is Nothing Or wbB Is Nothing Then
MsgBox "ブックを全て開いて実行してください"
Exit Sub
End If

wbA.Sheets(1).Range("A1").CurrentRegion.Copy wb.Sheets(1).Range("A1")
wbB.Sheets(1).Range("A1").CurrentRegion.Offset(1).Copy wb.Sheets(1).Cells(Rows.Count, "A").End(xlUp).Offset(1)

With wb.Sheets(1).Sort
.SortFields.Clear
.SortFields.Add Key:=Range("A1"), Order:=xlDescending
.SortFields.Add Key:=Range("C1"), Order:=xlAscending
.SetRange wb.Sheets(1).Range("A1").CurrentRegion
.Header = xlYes
.Apply
End With
End Sub

シートが何処かわからないので処理シートはすべて一番左のシートです
もし出来た結果シートを各ブックに追加したい場合は最後に・・・
これも記録できますね
    • good
    • 5

その出来上がり図を見て差し込んだと捉えているのはわかりますけど、慣れた人が見るとそういう処理は考えないんです。


だって結構ふくざつじゃないですか?
挿し込む場所をみつけて、一行開けて貼るのを繰り返すんでしよ?
それよりもまとめてとりあえず最後の続きに貼って並べ替えしたほうが早いと思うんです。
VBAはステップ実行の使い方とか判りますか?コードだけ訊いても応用出来なかった意味が無いので。
    • good
    • 4

自分でコード書いて、うまく行かないから直して欲しいというなら分かるけど、


コード書けないなら、
コピペして並べ替えたらいいんじゃない?
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A