質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

7152閲覧

表を結合させたい VBA(EXCEL2013)

marikon

総合スコア7

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2016/06/13 06:08

###前提・実現したいこと
VBA超初心者です。

実現したいこと:別シート(日別)で同一箇所にある「日別」の表をループで結合させたい。

プログラミングに分かりやすく説明付けて頂けると助かります。
よろしくお願いいたします。

###発生している問題・エラーメッセージ

① ループさせたい。
② ないシート(日)もある。
③ 月によってある日(シート)が違う。

###該当のソースコード
Sub Macro6()
'
' Macro6 Macro
'

'
Sheets("01").Select
Range("S3:U30").Select
Selection.Copy
Sheets("集計表").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Sheets("02").Select Range("S3:U30").Select Application.CutCopyMode = False Selection.Copy Sheets("集計表").Select Range("A29").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("03").Select Range("S3:U30").Select Application.CutCopyMode = False Selection.Copy Sheets("集計表").Select Range("A57").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("06").Select Range("S3:U30").Select Application.CutCopyMode = False Selection.Copy Sheets("集計表").Select Range("A85").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("07").Select Range("S3:U30").Select Application.CutCopyMode = False Selection.Copy Sheets("集計表").Select Range("A113").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("08").Select Range("S3:U30").Select Application.CutCopyMode = False Selection.Copy Sheets("集計表").Select Range("A141").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("09").Select Range("S3:U30").Select Application.CutCopyMode = False Selection.Copy ActiveWindow.SmallScroll Down:=3 Sheets("集計表").Select Range("A169").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("10").Select Range("S3:U30").Select Application.CutCopyMode = False Selection.Copy Sheets("集計表").Select Range("A197").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveWindow.SmallScroll Down:=6 Sheets("11").Select Range("S3:U30").Select Application.CutCopyMode = False Selection.Copy ActiveWindow.ScrollWorkbookTabs Sheets:=-1 Sheets("集計表").Select Range("A225").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False

End Sub

###試したこと
上記で、現在あるデータは結合できた。

###補足情報(言語/FW/ツール等のバージョンなど)
VBA(EXCEL2013)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

PineMatsu

2016/06/13 09:34 編集

ソースコードは``` ```で囲って記述してください。そうすると見やすくなります。
marikon

2016/06/14 01:51

ご指摘ありがとうございます。 勉強しまていきます。
guest

回答1

0

ベストアンサー

まずシートの存在確認をして、あればコピー&ペースト、なければ次の日付、という流れで実現できると思います。

以下の改修案ですが、ずばり回答になってしまっているかもしれません。
そのまま動くとしても丸写しだけでは身に付きませんので、コードを自分なりに解析し、理解していただければ幸いです。

'シートの存在チェック Function SheetExist(vSheetName) As Boolean Dim ws As Worksheet 'すべてのシートをループ処理 For Each ws In Worksheets If ws.Name = vSheetName Then 'シート名が見つかったらTrueで終了 SheetExist = True Exit Function End If Next ws 'シート名が見つからなければFalseで終了 SheetExist = False End Function Sub Macro6() Dim strShtNm As String 'シート名 Dim lngPasteRow As Long '貼り付け位置 lngPasteRow = 1 For i = 1 To 31 strShtNm = Format(i, "00") 'シートの存在チェック If SheetExist(strShtNm) = True Then 'シートが見つかった場合、コピー&ペースト Range(strShtNm & "!S3:U30").Copy '集計表シートに貼り付け Sheets("集計表").Cells(lngPasteRow, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False '次の貼り付け位置 lngPasteRow = lngPasteRow + 28 End If Next End Sub

改修のポイントは
・すべてのシートをループ処理
・シート変更・選択範囲の変更をせずにコピペ
・コピペ後に次の貼り付け位置を準備
です。

がんばってください。

投稿2016/06/13 09:01

jawa

総合スコア3013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

marikon

2016/06/14 01:54

とても分かりやすく回答していただき、 本当にありがとうございました。 確かにずばり回答でした。 もっともっと色々してみたいことがあるので勉強します。 がんばります!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問