Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


12458 / 13645 ツリー ←次へ | 前へ→

【10400】オートシェイプの指定範囲削除について? えいち 04/1/23(金) 17:28 質問
【10402】Re:オートシェイプの指定範囲削除について? ichinose 04/1/23(金) 18:32 回答
【10404】Re:オートシェイプの指定範囲削除について? えいち 04/1/23(金) 23:00 質問
【10405】Re:オートシェイプの指定範囲削除について? ichinose 04/1/24(土) 10:41 回答
【10406】Re:オートシェイプの指定範囲削除について? えいち 04/1/24(土) 11:50 お礼

【10400】オートシェイプの指定範囲削除について?
質問  えいち  - 04/1/23(金) 17:28 -

引用なし
パスワード
   過去ログに記述されていたことを見て、自分なりにがんばったのですがどうしても分かりません。教えてください。

 1〜10行までのオートシェイブは消さずに、11行目以降のすべてのオートシェイブを消すにはどうしたらよいのでしょうか?

 うまくいった!と思ったら、10行と11行の間に圧縮されてたりで・・・

何卒 ご教授ねがいます。

【10402】Re:オートシェイプの指定範囲削除につい...
回答  ichinose  - 04/1/23(金) 18:32 -

引用なし
パスワード
   ▼えいち さん:
こんばんは。

>過去ログに記述されていたことを見て、自分なりにがんばったのですがどうしても分かりません。教えてください。
>
> 1〜10行までのオートシェイブは消さずに、11行目以降のすべてのオートシェイブを消すにはどうしたらよいのでしょうか?
>
> うまくいった!と思ったら、10行と11行の間に圧縮されてたりで・・・
>
>何卒 ご教授ねがいます。
ShapeオブジェクトのBottomRightCellを比較対象にしました。

'============================================
Sub main()
  Call del_autoshp(ActiveSheet, Rows(10))
End Sub
'=============================================
Sub del_autoshp(wk As Worksheet, lim As Range)
  Dim shp As Shape
  For Each shp In wk.Shapes
   If shp.Type = msoAutoShape Then
     If shp.BottomRightCell.Row > lim.Row Then
      shp.Delete
      End If
     End If
   Next shp
End Sub

【10404】Re:オートシェイプの指定範囲削除につい...
質問  えいち  - 04/1/23(金) 23:00 -

引用なし
パスワード
   ichinose さん 回答ありがとうございます。
図形はうまく消去できましたが、線や矢印が残ってしまいます。
どうすればいいでしょうか?

【10405】Re:オートシェイプの指定範囲削除につい...
回答  ichinose  - 04/1/24(土) 10:41 -

引用なし
パスワード
   ▼えいち さん:
おはようございます。

>ichinose さん 回答ありがとうございます。
>図形はうまく消去できましたが、線や矢印が残ってしまいます。
>どうすればいいでしょうか?
ShapeオブジェクトのTypeプロパティで許容するタイプの枠を広げました。
'=====================================================
Sub del_autoshp(wk As Worksheet, lim As Range)
  Dim shp As Shape
  Dim rw As Long
  On Error Resume Next
  For Each shp In wk.Shapes
    Select Case shp.Type
     Case msoAutoShape, msoLine, msoFreeform, msoGroup
     Err.Clear
     rw = shp.BottomRightCell.Row
     If Err.Number = 0 And rw >= lim.Row Then
      shp.Delete
      End If
     End Select
   Next shp
  On Error GoTo 0
End Sub

del_autoshpを差し替えて確認してみて下さい。
ShapeオブジェクトのTypeプロパティに関しては、Helpを参照して下さい。
尚、オートフィルタや入力規則のリストのドロップダウンもType=8の
Shapeオブシェクトです。Typeの枠を広げる場合は、注意して下さい。

【10406】Re:オートシェイプの指定範囲削除につい...
お礼  えいち  - 04/1/24(土) 11:50 -

引用なし
パスワード
   ▼ichinose さん: こんにちは。

ご伝授いただいたプログラムでうまく処理することが出来ました。
ありがとうございました。

前回の問い合わせの後、マクロの記録を利用した方法でなんとか出来たのですが、イマイチ納得出来ずにいました。

これからichinoseさんのプログラムをじっくり解析しながら勉強します。

お世話になりました。

12458 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free