[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『アクティブセルから1つ下』(やくると)
アクティブセルから1つ下の行から(アクティブセルは含まれない)
下の5行をごっそり削除したいのですが、
Sub 行消し()
Range("A1:A" & ActiveCell.Row + 1).EntireRow.Delete
End Sub
エラーは出ないのですが、表がぐちゃぐちゃにくずれてしまいます。
たすけてください
インターネットで拾ってきたコードをわたしなりに変えてはみたのですが
そもそものRange("A1:A")の意味もちょっとわかりません。。。
("A:A")ならわかるのですが、、。
< 使用 Excel:Excel2010、使用 OS:Windows8 >
(例)Range("A1").Offset(1,0) ・・・ A2セル (A1 から 1行↓0列→) Range("A1").Offset(0,1) ・・・ B1セル (A1 から 0行↓1列→) Range("A1").Offset(3,2) ・・・ C4セル (A1 から 3行↓2列→)
■基準セル.Resize(行,列)
基準セルを、指定した行列範囲に変更する。
(例)Range("A1").Resize(2,1) ・・・ A1:A2 (セル範囲を2行1列に変更) Range("A1").Resize(1,2) ・・・ A1:B1(セル範囲を1行2列に変更) Range("A1").Resize(3,5) ・・・ A1:E3(セル範囲を3行5列に変更)
■基準セル.EntireRow
基準セルが含まれる行全体を指定する。
(例)Range("A1").EntireRow ・・・ 1行目 Range("C5").EntireRow ・・・ 5行目 Range("A1:A5").EntireRow ・・・ 1〜5行目
以上を踏まえて、
アクティブセル(ActiveCell)の、 一つ下のセルの(Offset)、 5行分が(Resize)、 含まれる行を(EntireRow)、 削除(Delete) すればいいので、、
Sub a() ActiveCell.Offset(1, 0).Resize(5, 1).EntireRow.Delete End Sub
と書けます。 (TAKA) 2019/01/18(金) 09:20
これは見るべき場所がちょっと違います。
実は↓までで一つのセル範囲を示しています。
Range("A1:A" & ActiveCell.Row + 1)
ポイントは「A1:A」という【文字列】に「ActiveCell.Row + 1」を【文字列結合】しているところです。
たとえば、C3セルがアクティブセルだったとすると
【ActiveCell.Row + 1】 → 【3 + 1】 → 【4】となり、
【"A1:A"】に【4】を文字列結合するから【"A1:A4"】という文字列になるわけです。
つまり、EntireRowはTAKAさんの説明を見て頂くとして、C3セルがアクティブだったとすると
Range("A1:A" & ActiveCell.Row + 1).EntireRow.Delete ↓ 【A1:A4】 が 【含まれる行】 を 【削除しなさい】 ↓ 1〜4行目全体を削除しなさい
になっているので、構文として正しいのでちゃんと動作するからエラーは出ないけど、思った通りの動きではないということになっているのだとおもいます。
(もこな2) 2019/01/18(金) 12:49
されたいことは、こちらが参考になりそうです。
https://www.relief.jp/docs/018407.html
(もこな2) 2019/01/19(土) 11:46
Dim myRang As Range Dim shp As Shape Dim shpRang As Range
Set myRang = Cells(ActiveCell.Row + 1, 1).Resize(5).EntireRow For Each shp In ActiveSheet.Shapes Set shpRang = Range(shp.TopLeftCell, shp.BottomRightCell) If Not Intersect(shpRang, myRang) Is Nothing Then shp.Delete End If Next myRang.Delete End Sub
(ピンク) 2019/01/19(土) 19:49
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.