- ベストアンサー
エクセルで列削除
エクセルで列の自動削除をしたいと考えています。 たとえば、100列の表があるとします。その表を、 ある特定のセルに入力した数字(0<N<100)の数だけの表(列)をつくりたいと考えています。 (N+1)列目から100列目までを削除すればいいのですが、 何かいいマクロはありますでしょうか? OFFSET関数を使おうと思っていたのですが、 引数にどう記述していいものか・・・ OFFSETを使わなくても結構です。なにかいい記述があったら教えてください。 お願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 Offset だと、Rangeオブジェクトで、二点間を選択することになりますから、 ActiveSheet.Range(Columns(N + 1), Columns(N).Offset(, 100 - N)).Delete 100列目を固定すれば、以下のようになります。 ActiveSheet.Range(Columns(N + 1), Columns(100)).Delete になります。 Resize を使うと、 ActiveSheet.Columns(N + 1).Resize(, 100 - N).Delete になります。 いろんな方法を試してみてください。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
>、100列の表があるとします 分かります >特定のセルに入力した数字 特定のセルではなく、そのセルの値を調べて条件に合うか初めて分かるのでは? あるいは、数字が入力してないセルもあるということ? >ある特定のセルに入力した数字(0<N<100)の数だけの表(列)をつくりたいと 数字の入ったセルのうち0-100までの値のセルの数値を、拾って その後どう並べるのですか。右へつめていくということ。 元の表は形がなくなってよいということ? >(N+1)列目から100列目までを削除すればいいのですが 上記のような理解だとなぜそうなるか分からない。 Nはセルの値を示しているのではないの? とたんに列数のためにNを使ったように見えるが、私の誤解? VBAなら Sub test01() Dim sh1 As Worksheet Dim sh2 As Worksheet Set sh1 = Worksheets("sheet1") Set sh2 = Worksheets("sheet2") d = Range("a65536").End(xlUp).Row MsgBox d For i = 1 To d k = 1 For j = 1 To 100 If sh1.Cells(i, j) < 100 And sh1.Cells(i, j) > 0 Then sh2.Cells(i, k) = sh1.Cells(i, j) k = k + 1 End If Next j Next i End Sub こんなもんでしょうか。
- pen_pen_pen
- ベストアンサー率65% (52/79)
N+1列目から100列目をごっそり削除。 罫線すら消えます。 Dim ws As Worksheet Set ws = ThisWorkbook.ActiveSheet ws.Range(Cells(, N + 1), Cells(100)).Columns.EntireColumn.Delete