Excel (一般機能)

Excelの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Excel 2016)
空白セルを探してデータを貼り付ける
投稿日時: 24/04/17 10:08:54
投稿者: cassata

よろしくお願いいたします。
 
データが入力されたセル範囲を別シートへコピーする際にコピー先のシートの空白セルを
探して貼り付けるサンプルコードをこちらのサイトで見つけました。
 
こちらのサンプルコードはコピー先のシートに値や数式を含むセルがあったら、下方向に
10行ずつ範囲をずらし貼り付けます。 
 
右方向に範囲をずらして貼り付けていくにはどこをどのように変えたらいいでしょうか。
ご教示くださいますようお願いいたします。
 
 
Sub Sample()
    Dim Flag As Boolean
    Dim c As Variant
    Const RowCount As Long = 10
    Const ColumnCount As Long = 4
 
    Application.ScreenUpdating = False
     
    Sheets("Sheet1").Range("A1").Resize(RowCount, ColumnCount).Copy
    Sheets("Sheet2").Select
    Range("A1").Activate
     
    Flag = False
    Do Until Flag
        '貼り付け先のセル範囲がすべて空白かどうかをチェック
        For Each c In ActiveCell.Resize(RowCount, ColumnCount)
            If IsEmpty(c) Then
                Flag = True
            Else
                '空白でないセルが見つかった
                Flag = False
                ActiveCell.Offset(RowCount, 0).Activate
                Exit For
            End If
        Next c
    Loop
     
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
End Sub
 
 
 

回答
投稿日時: 24/04/17 10:20:02
投稿者: sk

引用:
データが入力されたセル範囲を別シートへコピーする際に
コピー先のシートの空白セルを探して貼り付ける

「コピー元のワークシート/セル範囲」と
「コピー先のワークシート/セル範囲」について
具体例を挙げられることをお奨めします。
 
引用:
右方向に範囲をずらして貼り付けていく

コピーアンドペーストを 1 回だけ実行すればよいのでしょうか。
それとも、何らかのループ処理によって(一定の回数/間隔で)
コピーアンドペーストを繰り返すことを想定されているのでしょうか。

投稿日時: 24/04/17 10:50:56
投稿者: cassata

ご説明が不足していました。
  
「コピー元のワークシート/セル範囲」→Sheet1のセル範囲A1:D10
「コピー先のワークシート/セル範囲」→Sheet2のA1セルから順に、値が入力されているかどうかを確認してコピー
  
右方向に範囲をずらして貼り付けていく
→ 1 回だけではなく Sheet1で作ったデータを連続でSheet2にずらして貼り付けたいです。
  
よろしくお願いいたします。
 

回答
投稿日時: 24/04/17 11:04:37
投稿者: WinArrow

サンプルコードでは、
指定の10行のセル範囲内に空白セルは存在した場合、
そこから10行スキップすることになります。
そこは、どのように考えているのですか?
 
 
私見ですが
Sheet2の空白セルを見つける
という考え方を
データが入っている最終行をさがす
という考え方に変更した方がよいと思います。
With worksheets("Sheet2")
    MaxRow = .Range("A" & .Rows.Count).End(xlUp).Row + 1
End With
で最終行+1の行番号が取得可能です。

回答
投稿日時: 24/04/17 11:16:03
投稿者: sk

引用:
「コピー元のワークシート/セル範囲」→Sheet1のセル範囲A1:D10
「コピー先のワークシート/セル範囲」→Sheet2のA1セルから順に、
値が入力されているかどうかを確認してコピー

1. Sheet2 のセル範囲 A1:D10 を最初の評価範囲とする。
 
2. 現在の評価範囲の全てのセルが空白セルである場合は
   その範囲を貼り付け先として Sheet1 のセル範囲 A1:D10 を
   コピーし、処理を終了する。
 
3. 現在の評価範囲に空白セルではないセルが含まれている場合は
   現在の評価範囲を 4 列ずつ右にずらした範囲
   ( E1:H10, I1:L10, M1:P10 ... )を次の評価範囲として
   再度上記 2 の処理を行なう。
 
ということなのであれば、とりあえず以下のステートメントを
書き換えればよろしいでしょう。
 
引用:
ActiveCell.Offset(RowCount, 0).Activate

ActiveCell.Offset(0, ColumnCount).Activate

投稿日時: 24/04/17 11:47:36
投稿者: cassata

sk様
 
ActiveCell.Offset(0, ColumnCount).Activate
 
こちらで見事に連続して右方向に貼りつきました!
助かりました。ありがとうございました。
 
WinArrow様
 
最終行を探すという考え方も参考になりました。
ありがとうございました。[/quote]