Excel VBAでボタンひとつで特定の行と列を削除して表を自動作成する方法

2023年4月15日

特定箇所だけを抜き出して表を作成する場合、何回も同じパターンで作成すると非常に手間がかかることがあります。そのような場合に、ボタンを一度クリックするだけで表を作成できると便利です。今回は、Excelの表の特定の行と列を削除して、ボタンワンクリックで新しい表を作成するサプリを開発しました。

サンプルアプリ実行動作

実行方法は、Excel上の指定された箇所(赤枠箇所)に削除する行と列番号を設定して、「特定の行と列を削除して表を作成する」ボタンをクリックするだけです。すると、既存の表の隣に指定した行と列を削除した新しい表が自動で作成されます。

サンプルコードの処理内容

処理の内容については以下の通りです。

すでに作成済みの表を削除する。
     ↓
削除行と列を指定してある箇所から行番号と列番号を取得して該当箇所を非表示にする。
     ↓
指定箇所が非表示になった表をクリップボードにコピーする
     ↓
元の表の右側にクリップボードにコピーされた表を貼り付ける
     ↓
貼り付けた表の文字の幅にあわせてセル幅を調整する
     ↓
クリップボードにコピーされた表をリセットする
     ↓
指定箇所を非表示にしたコピー元の表の行と列を表示に戻す

サンプルコード アプリの作成手順はこちら

Option Explicit

Sub RowClumnDel()

'すでに作成されている右側の表を削除する。
 Range("K7:P22").Clear
'ループカウント変数を定義する
 Dim i As Integer

'指定行削除処理
'削除行を指定しているセル(赤枠箇所)から順番に行番号を取得して非表示にする
 For i = 3 To 8
  If Cells(4, i) <> "" Then
   Rows(Cells(4, i)).Hidden = True
  End If
 Next

'指定列削除処理
'削除列を指定しているセル(赤枠箇所)から順番に列番号を取得して非表示にする
 For i = 3 To 8
  If Cells(5, i) <> "" Then
   Columns(Cells(5, i)).Hidden = True
  End If
 Next

'指定した行と列を非表示にしたコピー元の表をコピーする
 With Worksheets("Sheet1")
  '「C7」のセルから「H列の最終行(22行)」の範囲をクリップボードにコピーする
   .Range(.Range("C7"), .Range("H" & Rows.Count).End(xlUp)).SpecialCells(xlCellTypeVisible).Copy
 End With

'「Sheet1」シートの「K7」セルを選択して表を貼り付ける
 Sheets("Sheet1").Select
 Range("k7").Select
 ActiveSheet.Paste
'K列からP列を文字の幅にあわせてセル幅を調整する
 Columns("K:P").AutoFit
'クリップボードに貼り付けた表をリセットする
 Application.CutCopyMode = False

'ワークシートを入れる変数を定義する
 Dim ws As Worksheet
'定義した変数に表を貼り付ける箇所のワークシート名をセットする
 Set ws = ThisWorkbook.Worksheets("Sheet1")

'上で非表示にした行と列を表示に戻す
 ws.Rows.Hidden = False
 ws.Columns.Hidden = False

End Sub