以下の様な処理をVBAで行いたいのですが、セルの内容が消えてしまいます。どうすればよいか教えてください
A列に商品タイプがあり、B列に商品名が入力されている。
1つの商品タイプは複数の商品があるため、A列は数行単位で結合されている。
今、マクロで特定商品の行だけを別のシートにコピーしたい。
そこで、
シート全体をコピーし
コピーしたシート上で該当商品を含まない行を削除
するマクロを作成しました。
しかし、商品タイプの列が結合されているため、商品タイプの1行目を削除してしまうと
新しいシート上でA列が空欄になってしまいます。
該当行のみコピーすることも考えましたが、
商品を抜き出す表以外はそのままコピーする(この方が情報量は多い)ため、上記の方法
を考えました。
何か良い方法はないでしょうか。
よろしくお願い申し上げます
No.1ベストアンサー
- 回答日時:
こんばんは!
>特定商品の行だけを別のシートにコピーしたい。
すなわち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
No.2
- 回答日時:
添付画像のようなテストデータで行っています。
アクティブシートを隣へコピーし、結合セル解除後の空欄を各先頭項目で埋めてから、
偶数行を削除(ここは目的の削除方法に置き換えてください)して、同じ項目を再結合しています。
コード内の「'値の設定」項目で変数「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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) Excelで該当しない項目(#N/Aの商品名)を簡単に表示・抽出させる方法についてです 1 2022/08/25 22:12
- Visual Basic(VBA) vbaマクロについて シート1のA列にある商品コードが シート2のB列にある商品コードに該当する場合 2 2023/05/17 13:41
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- Excel(エクセル) 【条件付き書式】countifsで複数条件を満たしたセルを赤くする方法 2 2023/02/09 23:53
- Excel(エクセル) excelで検索した商品の画像(ネットワーク上の)を表示させたい。 3 2023/06/28 00:32
- Visual Basic(VBA) 【VBA】指定した検索条件に一致したら別シートに転記したい 2 2022/03/23 16:14
- Excel(エクセル) 製品番号での整列と、検索に関して 3 2023/06/28 19:20
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- Excel(エクセル) VBA でvlookup エラーなどは削除したい 8 2022/12/30 04:03
- Visual Basic(VBA) 【VBA】複数行あるカンマ区切りのデータを全て縦に一列に並べたい 5 2022/04/13 17:03
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定のセルが空白だったら、そ...
-
i=cells(Rows.Count, 1)とi=cel...
-
Excelで指定した日付から過去の...
-
【Excel VBA】指定行以降をクリ...
-
ExcelVBAを使って、値...
-
TODAY()で設定したセルの日付...
-
VBAでセルをクリックする回...
-
【Excel】指定したセルの名前で...
-
DataGridViewのセル編集完了後...
-
screenupdatingが機能しなくて...
-
VBA初心者です。結合セルを保持...
-
エクセルvba:自己セルの情報取...
-
EXCELで変数をペーストしたい
-
連続する複数のセル値がすべて0...
-
VBA コピーして次の値まで貼り...
-
セル色なしの行一括削除
-
特定の文字を条件に行挿入とそ...
-
エクセルVBAでコピーして順...
-
クリックされたセルの位置を取...
-
Excel vbaで特定の文字以外が入...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
【Excel VBA】指定行以降をクリ...
-
i=cells(Rows.Count, 1)とi=cel...
-
Excelで指定した日付から過去の...
-
【Excel】指定したセルの名前で...
-
VBAの計算で@が出てしまう件
-
Excelのプルダウンで2列分の情...
-
EXCELで変数をペーストしたい
-
VBA ユーザーフォーム ボタンク...
-
VBAでセルをクリックする回...
-
Excel VBA、 別ブックの最終行...
-
Excel vbaで特定の文字以外が入...
-
TODAY()で設定したセルの日付...
-
screenupdatingが機能しなくて...
-
セル色なしの行一括削除
-
エクセルVBAでコピーして順...
-
VBAを使用した時間管理
-
”戻り値”が変化したときに、マ...
-
Sub 要具ライフ() ActiveSheet....
おすすめ情報