こんな感じですかね。
あとはご自身で手を加えて下さい。
Sub Sample()
Dim nRow, i
Sheets("Sheet3").Range("D:E,K:K,V:Y").Copy
With Sheets("Sheet1")
'Y列もSheet1にコピー(G列)
.Range("A1").PasteSpecial Paste:=xlPasteValues
nRow = .Cells(Rows.Count, 1).End(xlUp).Row 'データのある最終行
'最初にブランクを埋める(埋めるのは5行目から)
For i = 5 To nRow
If .Cells(i, 2) = "" Then .Cells(i, 2) = .Cells(i - 1, 2) 'B列
If .Cells(i, 4) = "" Then .Cells(i, 4) = .Cells(i - 1, 4) 'D列
Next i
'Y列(Sheet1のG列)のデータ分行を追加
For i = nRow To 4 Step -1
'Y列(Sheet1のG列)にデータがあるか
If .Cells(i, 7) <> "" Then
.Rows(i).Copy
.Rows(i).Insert
.Cells(i + 1, 3) = "―"
.Cells(i + 1, 6) = .Cells(i, 7)
.Cells(i + 1, 7) = "★"
End If
.Cells(i, 7) = "●"
Next i
End With
End Sub
質問者
補足
サンプルをありがとうございます。
ご意見をいただけませんか?
(1)
●は、Sheet3(変更前)Y列に値があるときだけSheet1(変更後)G列にコピーをしたいです。
Y列に値がないときはブランクにします。(混乱させて申し訳ございません。)
V列にはセル結合している箇所がいくつかあり、対象行のすべてのセルGにコピーできません。
↓定義を追加しましたがうまくいきません。
.Cells(i, 14).MergeCells = False 'G列のセル結合箇所の削除
出来る限るオリジナル書式を変更したくありません。
(2)
AM-AF列を追加しました。
AM-AF間のセル情報はコピーするだけでセルに値がなくても構いません。
Gの結果を最後列へ追加したいのですがうまくいきません。
-------
コード;
Option Explicit
Sub Sample()
Dim nRow, i
'Worksheets("バッチ帳票一覧(勘定系)").Range("D:E,K:K,V:Y").Copy
Worksheets("バッチ帳票一覧(勘定系)").Range("D:E,K:K,V:X,AF:AM,Y:Y").Copy
With Worksheets("編集後")
'Y列も"編集後"にコピー(G列)
.Range("A1").PasteSpecial Paste:=xlPasteValues
nRow = .Cells(Rows.Count, 1).End(xlUp).Row 'データのある最終行
'最初にブランクを埋める(埋めるのは5行目から)
For i = 5 To nRow
If .Cells(i, 2) = "" Then .Cells(i, 2) = .Cells(i - 1, 2) 'B列
If .Cells(i, 4) = "" Then .Cells(i, 4) = .Cells(i - 1, 4) 'D列
Next i
'Y列("編集後"のG列)のデータ分行を追加
For i = nRow To 4 Step -1
'Y列("編集後"のG列)にデータがあるか
If .Cells(i, 14) <> "" Then
.Rows(i).Copy
.Rows(i).Insert
.Cells(i + 1, 3) = "-"
.Cells(i + 1, 6) = .Cells(i, 14)
.Cells(i, 14).MergeCells = False
.Cells(i, 14) = "●"
.Cells(i + 1, 14) = "★"
End If
Next i
End With
End Sub
お礼
ありがとうございました。 質問がゴチャゴチャしてきましたので再度、質問し直します。
補足
ありがとうございました。 ご意見をいただけませんか? 1. 列移動の件は???.Cutメソッド、???.Insertメソッドで解決できました。 Y列("Sheet1"のG列)の最後尾列(Q列)へ移動しました。 2. 提示例が悪くて申し訳ございません。 G列に●をコピーする箇所はY列に値がある行だけです。 今回はY列に値があれば、最後に行の追加処理をしてG列に"★"をコピーします。 Y列("Sheet3")はセル結合しているデータです。 すべての対象行にはG列に"●"をコピーしたいです。 現行コードはセル結合を解除すると対象行毎に新規に一行を追加されてG列に"★"がコピーされてしまいます。 ご提供していただいたサンプルですと対象行を1行見て、G列に"●"をコピーして行の追加処理をしてG列に"★"がコピーします。 だだし、他の対象行のG列には"●"がコピーされません。 対象行のG列すべてに"●"がコピーして、行の追加処理をしたいのです。 方法としては、X列("Sheet3")がY列("Sheet3")に値の有無を見てG列に"●"をコピーして、行の追加処理をしたいのです。 また、行の追加処理ですがY列値が連なっているケースがございますので現在処理の対象としているY列は直下の値を見て 値が異なるならば、その直前で行の追加処理をしたいのです。 変更前(Sheet3); (X列) (Y列) 1 ABC000 テーブル4 2 ABC000 (同上) 3 ABC000 テーブル5 4 ABC000 (同上) . . 変更後(Sheet1); (F列) (G列) 1 ABC000 ● 2 ABC000 ● 3 テーブル4 ★ 4 ABC000 ● 5 ABC000 ● 6 テーブル5 ★ . . ------- コード; Option Explicit Sub Sample() Dim nRow, i Worksheets("Sheet3").Range("D:E,K:K,V:Y,AF:AM").Copy With Worksheets("Sheet1") 'Y列も"Sheet1"にコピー(G列) .Range("A1").PasteSpecial Paste:=xlPasteValues nRow = .Cells(Rows.Count, 1).End(xlUp).Row 'データのある最終行 '最初にブランクを埋める(埋めるのは5行目から) For i = 5 To nRow If .Cells(i, 2) = "" Then .Cells(i, 2) = .Cells(i - 1, 2) 'B列 If .Cells(i, 4) = "" Then .Cells(i, 4) = .Cells(i - 1, 4) 'D列 If .Cells(i, 7) = "" Then .Cells(i, 7) = .Cells(i - 1, 7) 'G列 Next i 'Y列("Sheet1"のG列)のデータ分行を追加 For i = nRow To 4 Step -1 'Y列("Sheet1"のG列)にデータがあるか If .Cells(i, 7) <> "" Then .Rows(i).Copy .Rows(i).Insert .Cells(i + 1, 3) = "-" .Cells(i + 1, 6) = .Cells(i, 7) .Cells(i, 7) = "●" .Cells(i + 1, 7) = "★" End If Next i 'Y列("Sheet1"のG列)の最後尾列(Q列)への移動 .Range("G:G").Cut .Range("Q:Q").Insert End With End Sub