次の方法で共有

同じブック内で特定のシートにデータを集計させるマクロ

Anonymous
2022-11-22T00:21:45+00:00

ネットに頼りマクロを組んでいるド素人です。

力を貸してください。

同じブック内での集計についてです。

sheet1(シート名を「集計表」としています)にsheet2以降(だいたいsheet10くらいまであります)の内容を

転記していくマクロを組もうとしています。(実際のシート名は数字で350~370以内です)

sheet2については組めたのですが、sheet3以降についてはコードが分からず悩んでおります。

sheet2の内容は集計表のA8からBA8まで

sheet3の内容は集計表のA9からBA9までと繰り返し組もうとしているところです。

Sheets(350).Select

    Range("E4").Select

    Selection.Copy

    Sheets("集計表").Select

    If Range("A8") = "" Then

        Range("A8").Select

        ActiveSheet.Paste

    Else

        Range("A8").Select

        Selection.End(xlToLeft).Select

        ActiveCell.Offset(rowOffset:=1, columnOffset:=0).Select

        ActiveSheet.Paste

    End If

これをBA8まで繰り返しているのですが、シート名”351”には適用されず、集計表の次の行にもいかないという

行き詰まり状態です。

さわりだけでもいいのでお分かりになる方、ご教示いただけないでしょうか。

どうぞよろしくお願いいたします。

※以前にも質問をさせて頂いたのですが、私自身の能力不足で理解できず、内容を変えて再度質問させていただきます。

どうぞよろしくお願いいたします。

Microsoft 365 と Office | Excel | ビジネス向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません
質問作成者が受け入れた回答
  1. Anonymous
    2022-11-22T04:37:40+00:00

    > sheet2のE5のセルを集計表のB8へ、> sheet2のN5のセルを集計表C8へと転記していきたく、> 最終的にsheet2のAF62のセルが集計表のBA8に来ます。

    つまり次のようなコードを実行できればよい、ということでしょうか。


    Sub CopyValues()
        
        '定数の宣言
        Const DestinationSheetName As String = "集計表" '転記先ワークシートの名前
        Const DestinationFirstRow As Long = 8           '転記先ワークシートの先頭のデータ行の行番号
    
        Dim wbkBook As Workbook
        Dim wsDestination As Worksheet
        
        'このマクロが記述されているブックを参照
        Set wbkBook = ThisWorkbook
        '転記先ワークシートを参照
        Set wsDestination = wbkBook.Worksheets(DestinationSheetName)
    
        '転記先ワークシートの A 列から BA 列までの全てのデータ行の値/数式をクリア
        With wsDestination
            .Range(.Cells(DestinationFirstRow, "A"), _
                   .Cells(.Rows.Count, "BA")).ClearContents
        End With
    
        Dim wsSource As Worksheet
        Dim lngDestinationRow As Long
        
        '転記先の行番号の初期値として、先頭のデータ行の行番号を代入
        lngDestinationRow = DestinationFirstRow
        
        'ブック内の全てのワークシートを順次参照する
        For Each wsSource In wbkBook.Worksheets
            
            '参照中のワークシートの名前をイミディエイトウィンドウに出力する(デバッグ用)
            Debug.Print wsSource.Name
        
            '参照中のワークシートの名前によって分岐する
            Select Case wsSource.Name
                '転記先ワークシート
                Case DestinationSheetName
                    '何もしない
                
                'その他のワークシート
                Case Else
                    '参照中のワークシートの各セルの値を、転記先ワークシートのデータ行の各列のセルに代入する
                    wsDestination.Cells(lngDestinationRow, "A").Value = wsSource.Range("E4").Value
                    wsDestination.Cells(lngDestinationRow, "B").Value = wsSource.Range("E5").Value
                    wsDestination.Cells(lngDestinationRow, "C").Value = wsSource.Range("N5").Value
                    '                  :
                    '                  :
                    'D 列から AZ 列 までのセルへの代入も同様に記述する
                    '                  :
                    '                  :
                    wsDestination.Cells(lngDestinationRow, "BA").Value = wsSource.Range("AF62").Value
                    
                    '転記先の行番号を1進める
                    lngDestinationRow = lngDestinationRow + 1
            End Select
        
        Next
        
        Set wsDestination = Nothing
        Set wbkBook = Nothing
    
    End Sub
    

    1 人がこの回答が役に立ったと思いました。
    0 件のコメント コメントはありません

6 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2022-11-22T02:38:48+00:00

    ご返信ありがとうございます。

    言葉足らずで申し訳ございません。

    > Sheets("350").Select →””を足しました > Range("E4").Select > Selection.Copy
    は最初のさわりの部分でして

    > sheet2の内容は集計表のA8からBA8まで

    sheet2のE5のセルを集計表のB8へ、sheet2のN5のセルを集計表C8へと転記していきたく、最終的にsheet2のAF62のセルが集計表のBA8に来ます。

    わかりにくく申し訳ございません。

    宜しくお願いいたします。

    ↓下記のような集計表に、ブック内の別シートのデータを移したいです。集計表は横に長いです。

    0 件のコメント コメントはありません
  2. Anonymous
    2022-11-22T02:12:27+00:00

    > sheet1(シート名を「集計表」としています)に> sheet2以降(だいたいsheet10くらいまであります)の内容を> 転記していくマクロを組もうとしています。

    参照元となるワークシートのどのセル範囲の内容を
    転記しようとしているのかが不明瞭です。

    少なくとも、以下のコードにおいて

    > Sheets(350).Select> Range("E4").Select> Selection.Copy

    あるワークシートの 1 つのセルをコピーしようとしているのに対し、

    > sheet2の内容は集計表のA8からBA8まで> sheet3の内容は集計表のA9からBA9まで

    貼り付け先が 1 行 53 列のセル範囲というのは
    明らかに列/セルの数が食い違っています。

    例えば「参照元となるそれぞれのワークシートの E4 セルから BE4 セルまでの範囲を、
    ワークシート[集計表]の 8 行目以降の A 列から BA 列までの範囲に繰り返し転記する」
    といったことなら、その旨を具体的に明記されることをお奨めします。

    > 実際のシート名は数字で350~370以内です

    また、複数ある参照元のワークシートをどのような順番で
    **参照したいか(転記したいか)**についても明記して下さい。

    「ワークシートの並び順(左から右、または右から左)」
    「ワークシートの名前の昇順/降順」
    「ワークシートの名前を数値とみなした場合の昇順/降順」
    とでは、ワークシート[集計表]への転記結果が異なる場合があります。

    0 件のコメント コメントはありません
  3. Anonymous
    2022-11-22T01:58:58+00:00

    ご返信ありがとうございます。

    ””つけ漏れです。

    名称に””をつける必要があるというのは、調べて確認済みです。

    すみませんでした。

    0 件のコメント コメントはありません
  4. Anonymous
    2022-11-22T00:53:07+00:00

    やりたいことがいまひとつ理解できませんが(コードがかなり非効率的のような)、ひとつ忠告しておきたいのは、

    「名前が 350 というシート」は Sheets("350") であって、Sheets(350) とは必ずしも同じではない

    ということです。そのことがマクロが思うように動かないことの直接的原因かは何ともいえませんが。

    0 件のコメント コメントはありません