• ベストアンサー

エクセルで列削除

エクセルで列の自動削除をしたいと考えています。 たとえば、100列の表があるとします。その表を、 ある特定のセルに入力した数字(0<N<100)の数だけの表(列)をつくりたいと考えています。 (N+1)列目から100列目までを削除すればいいのですが、 何かいいマクロはありますでしょうか? OFFSET関数を使おうと思っていたのですが、 引数にどう記述していいものか・・・ OFFSETを使わなくても結構です。なにかいい記述があったら教えてください。 お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 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)
回答No.3

>、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 こんなもんでしょうか。

回答No.1

N+1列目から100列目をごっそり削除。 罫線すら消えます。 Dim ws As Worksheet Set ws = ThisWorkbook.ActiveSheet ws.Range(Cells(, N + 1), Cells(100)).Columns.EntireColumn.Delete

関連するQ&A