こんばんは!
>特定商品の行だけを別のシートにコピーしたい。
すなわちB列の「特定商品」のみを別Sheetに表示したい!
というコトでしょうか?
一例です。
↓の画像のように左側がSheet1で右側のSheet2に表示するようにしてみました。
(画像ではSheet1のB列の「あ」という商品のみを表示するようにしています)
マクロでインプットボックスに「特定商品」を入力するようにしました。
標準モジュールです。
Sub Sample1()
Dim i As Long, lastRow As Long, str As String, wS As Worksheet
Set wS = Worksheets("Sheet2")
Application.ScreenUpdating = False
wS.Cells.Clear
With Worksheets("Sheet1")
lastRow = .Cells(Rows.Count, "B").End(xlUp).Row
str = Application.InputBox("検索商品名を入力")
.Range("A:A").Insert
.Range("A1") = .Range("B1")
With Range(.Cells(2, "A"), .Cells(lastRow, "A"))
.Formula = "=IF(B2="""",A1,B2)"
.Value = .Value
End With
.Columns("B:B").Hidden = True
.Range("A1").AutoFilter field:=3, Criteria1:=str
.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy wS.Range("A1")
Application.DisplayAlerts = False
For i = wS.Cells(Rows.Count, "A").End(xlUp).Row To 2 Step -1
If wS.Cells(i, "A") = wS.Cells(i - 1, "A") Then
wS.Cells(i - 1, "A").Resize(2).Merge
End If
Next i
Application.DisplayAlerts = True
wS.Range("A:A").HorizontalAlignment = xlCenter
wS.Range("A1").CurrentRegion.Borders.LineStyle = xlContinuous
.AutoFilterMode = False
.Columns.Hidden = False
.Range("A:A").Delete
End With
Application.ScreenUpdating = True
End Sub
こんな感じではどうでしょうか?m(_ _)m
添付画像のようなテストデータで行っています。
アクティブシートを隣へコピーし、結合セル解除後の空欄を各先頭項目で埋めてから、
偶数行を削除(ここは目的の削除方法に置き換えてください)して、同じ項目を再結合しています。
コード内の「'値の設定」項目で変数「strow」と「mycol」を適切に修正してからマクロ「sample」を実行してください。
■VBAコード
Sub sample()
Dim i As Long
Dim tar As Range
Dim row_max As Long
Dim key As String
Dim strow As Long
Dim mycol As String
'値の設定
strow = 2 'データの開始行
mycol = "A" '結合セルの列記号
'画面更新停止
Application.ScreenUpdating = False
'シートコピー
ActiveSheet.Copy after:=ActiveSheet
'結合セル解除
Columns(mycol).UnMerge
'最大行数取得
row_max = Cells(Rows.Count, mycol).Offset(0, 1).End(xlUp).Row
'初期値セット
Set tar = Cells(strow, mycol)
'空白を埋める
Do
Set tar = Range(tar, tar.End(xlDown).Offset(-1, 0))
If tar(tar.Count).Row > row_max Then
Set tar = tar.Resize(row_max - tar(1).Row + 1, 1)
tar = tar(1)
Exit Do
End If
tar = tar(1)
Set tar = tar.End(xlDown)
Loop
'偶数行を削除(この処理を目的の削除処理内容と置き換えてください)
For i = row_max To 1 Step -1
If i Mod 2 = 0 Then Rows(i).Delete
Next i
'セルを再結合
Set tar = Nothing
Application.DisplayAlerts = False
For i = Cells(Rows.Count, mycol).End(xlUp).Row To strow Step -1
If WorksheetFunction.CountIf(Range(Cells(strow, mycol), Cells(i, mycol)), Cells(i, mycol)) > 1 Then
If key <> Cells(i, mycol) Then
Set tar = Cells(i, mycol)
key = Cells(i, mycol).Value
End If
Else
Range(Cells(i, mycol), tar).Merge
key = Cells(i, mycol).Value
End If
Next i
Application.DisplayAlerts = True
'画面更新再開
Application.ScreenUpdating = True
End Sub
お礼
早速のご回答感謝します。 知りたかったことはまさしくこれです。 ありがとうございました。