よねさんのWordとExcelの小部屋 なんでも掲示板

HOME HELP 新規作成 新着記事 ツリー表示 トピック表示 検索 過去ログ

[ 最新記事及び返信フォームをトピックトップへ ]

■13449 / inTopicNo.1)  質問 複数シート内データコピー
  
□投稿者/ yunao Mail -(2020/06/20(Sat) 18:56:32)
    2020/06/20(Sat) 23:48:15 編集(投稿者)
    2020/06/20(Sat) 23:47:57 編集(投稿者)

    教えていただければと思います。

    複数のシートのデータを1つのシートにまとめる:Excel VBA入門

    を参考にさせていただいているのですが、
    コピー元のデータが数式で参照したりしてる
    部分が複数あり、うまくいきません。
    コピー先に値で貼り付けたいのですが、
    どのようにしたらいいでしょうか。

    日毎のデータを(1から31までのシート)
    集計用のデータに値で貼り付けしたいです。
    そして集計させたくないシートがあるので、除外方法も
    教えてほしいです。


    よろしくお願いします。



引用返信/返信 削除キー/
■13450 / inTopicNo.2)  Re[1]: 質問 複数シート内データコピー
□投稿者/ よねさん -(2020/06/22(Mon) 16:37:04)
    2020/06/22(Mon) 16:58:20 編集(投稿者)
    2020/06/22(Mon) 16:43:34 編集(投稿者)

    書き込みに気付くのが遅くなり、申し訳ありません。
    http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_data_matome.html
    のSub matome()に書いてあるコピーはセルをそのままコピー、貼り付けしていますので、
    Range(Cells(2, 1), Cells(lRow, lCol)).Copy Worksheets(1).Cells(lRow2, 1)

    値の貼り付けに書き換えればいかがでしょう?
    Range(Cells(2, 1), Cells(lRow, lCol)).Copy
    Worksheets(1).Cells(lRow2, 1).PasteSpecial xlPasteValues


    (修正します)
    ファイルをコピーしておき、このコピーファイルで不要なシートを削除して、データをまとめるVBAを動かします。
    データをまとめることができたら、
    まとめたシートを元のファイルへ移動またはコピーするのはいかがでしょう?

引用返信/返信 削除キー/
■13451 / inTopicNo.3)  Re[2]: 質問 複数シート内データコピー
□投稿者/ yunao Mail -(2020/06/22(Mon) 21:28:16)
    Sub matome2()
    Dim Sh
    Dim i As Integer
    Dim lRow As Long, lCol As Long, lRow2 As Long
    Application.ScreenUpdating = False

    sh_check

    Worksheets(3).Range("B6:J6").Copy Worksheets(2).Range("A1")

    Sh = Array("1", "2", "3", "4")
    For i = LBound(Sh) To UBound(Sh)
    With Worksheets(Sh(i))
    lRow = .Cells(Rows.Count, 1).End(xlUp).Row
    lCol = .Cells(1, Columns.Count).End(xlToLeft).Column
    If lRow >= 7 Then
    lRow2 = Worksheets(2).Cells(Rows.Count, 1).End(xlUp).Row + 1
    .Activate
    .Range(Cells(7, 2), Cells(lRow, lCol)).Copy    Worksheets(2).Cells(lRow2, 1).PasteSpecial xlPasteValues 
    End If
    End With
    Next i
    Worksheets(2).Activate
    Range("A1").Select
    Application.ScreenUpdating = True
    End Sub

    上記で入力してみたところ、構文エラーが出てしまいました。
    原因がわかれば教えていただきたいです。
    教えていただいた通り、(.PasteSpecial xlPasteValues)を追加してみたのですが、うまくいきません。
    (追加前はデータコピーだけならできました)

    ファイルをコピーしておき、このコピーファイルで不要なシートを削除して、データをまとめるVBAを動かします。
    データをまとめることができたら、
    まとめたシートを元のファイルへ移動またはコピーするのはいかがでしょう?
    →除外したいシートからコピー元データへデータ参照していたりします。
     現状、Sh = Array("1", "2", "3", "4")参考にさせていただき、シートを指定してみたのですが、1〜31まで指定すれば可能なのでしょうか?

    ご指導お願いします。


引用返信/返信 削除キー/
■13452 / inTopicNo.4)  Re[3]: 質問 複数シート内データコピー
□投稿者/ よねさん -(2020/06/23(Tue) 08:53:48)
    シートのチェックは必要なさそうなので、コメントアウトしています。
    'sh_check
    
    まとめるシートはシート見出しの2番目のシートにしています。
    3番目のシートのB6:J6がデータの列見出しなので、コピーして2番目のシートに貼り付け
    まとめるシート名は1〜5で "4" を除くと仮定しました。面倒ですがコピーするシート名はすべて書き出してください。
    Sh = Array("1", "2", "3", "5")
    そのほか、lRow、lcolなども修正しています。
    以下のコードでいかがですか?
    
    Sub matome2()
    Dim Sh
    Dim i As Integer
    Dim lRow As Long, lCol As Long, lRow2 As Long
    Application.ScreenUpdating = False
    
    'sh_check
    
    Worksheets(3).Range("B6:J6").Copy Worksheets(2).Range("A1")
    
    Sh = Array("1", "2", "3", "5")
    For i = LBound(Sh) To UBound(Sh)
    With Worksheets(Sh(i))
    lRow = .Cells(Rows.Count, 2).End(xlUp).Row
    lCol = .Cells(6, Columns.Count).End(xlToLeft).Column
    If lRow >= 7 Then
    lRow2 = Worksheets(2).Cells(Rows.Count, 1).End(xlUp).Row + 1
    .Activate
    .Range(Cells(7, 2), Cells(lRow, lCol)).Copy
    Worksheets(2).Cells(lRow2, 1).PasteSpecial xlPasteValues
    End If
    End With
    Next i
    Worksheets(2).Activate
    Range("A1").Select
    Application.ScreenUpdating = True
    End Sub
    

引用返信/返信 削除キー/
■13453 / inTopicNo.5)  Re[4]: 質問 複数シート内データコピー
□投稿者/ yunao Mail -(2020/06/23(Tue) 21:54:36)
    ありがとうございます。

    今度はエラー表示なく値貼り付けできました。

    lRow、lcolなども修正しています。

    lRow = .Cells(Rows.Count, 2).End(xlUp).Row
    lCol = .Cells(6, Columns.Count).End(xlToLeft).Column

    これをなぜこのように修正したかも今後の為、教えていただけたらありがたいです。

    よろしくお願いします。
引用返信/返信 削除キー/
■13454 / inTopicNo.6)  Re[5]: 質問 複数シート内データコピー
□投稿者/ よねさん -(2020/06/24(Wed) 08:07:54)
    データがどのセル範囲にあるのかがこちらでは不明なので、
    列見出しのコピーからB6セルからデータがあるのだろうと推測しました。
    
    最終行lRowは  .Cells(Rows.Count, 2)として、B列で調べています。
    最終列lColは  .Cells(6, Columns.Count)と、6行目で調べています。
    
    以前のままだとA1セル基準で調べていたので、データがないと0になります。
    また、データと関係ないことが入力されていたら、
    目的のデータの最終行や最終列を求めることができません。
    
    
    あと、Worksheets(3).Range("B6:J6").Copy Worksheets(2).Range("A1") は
    シート見出しの3番目のシートの列見出しを使うことになっているので、
    Sh = Array("1", "2", "3", "5")
    Worksheets(Sh(0)).Range("B6:J6").Copy Worksheets(2).Range("A1")
    とか、シート名を使うべきと思います。
    
    以上です。
    

引用返信/返信 削除キー/
■13455 / inTopicNo.7)  Re[6]: 質問 複数シート内データコピー
□投稿者/ yunao Mail -(2020/06/24(Wed) 20:16:34)
    ありがとうございます。勉強になりました。

    値貼り付けした時に空白行も貼り付けられました。
    例えば1〜10行目はデータが入っていて、11行目〜20行目は空白行
    (11から20にかんしては見た目は空白ですが、数式が入っているためそのようになったんだと思います。)
    貼り付ける時、もしくは貼り付けたあとに空白行を消すことも可能でしょうか?
    その場合はどこにどのように追記したらよいでしょうか。

引用返信/返信 削除キー/
■13456 / inTopicNo.8)  Re[7]: 質問 複数シート内データコピー
□投稿者/ よねさん -(2020/06/25(Thu) 07:44:05)
    行の削除は最終行から上に向かって実行します。
    ↓のコードでは、ワークシート関数のCOUNTAで空白を判定しています。
    
    Sub 空白行の削除()
      Dim lRow As Long
      Dim i As Long
        lRow = Worksheets(2).Cells(Rows.Count, 1).End(xlUp).Row 
        For i = lRow To 6 Step -1
            If WorksheetFunction.COUNTA(Rows(i)) = 0 Then
                Rows(i).Delete
            End If
        Next i
    End Sub
    

引用返信/返信 削除キー/
■13457 / inTopicNo.9)  Re[8]: 質問 複数シート内データコピー
□投稿者/ yunao Mail -(2020/06/26(Fri) 19:40:35)
    いろいろ教えていただきありがとうございました。
    とても勉強になりました。
    またなにかある時はよろしくお願いします。
引用返信/返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

Pass/

HOME HELP 新規作成 新着記事 ツリー表示 トピック表示 検索 過去ログ

- Child Tree -