Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
RE「シート未使用状態のチェックは? 」のロードランナー さんへ2
投稿日時: 20/11/19 19:28:53
投稿者: mattuwan44

1回解決にされるとここのサイトは追記が出来ないのですよね^^;
 
解決をした方は、もう忘れたいのかも知れませんが、
 
解決してないのに解決にされるとモヤモヤが溜まります^^;
 
未使用だと分かったとして、誰がそのシートを削除する操作をするのか?
が、疑問。
 
あと、誤操作で困っているのもわかります。
パソコンをたまに覗くとツールバーやタスクバーなどが変な
位置に表示されていることは多々でしょう。
そういう人に削除の操作を任せるのか?
も、疑問。
 
ロードランナーさんがちょいちょい覗いて、
メンテナンスするときにそういうツールがあればなぁーという感じなら、
少し気持ちがわかります。
が、そういう人にエクセルの全機能を使わせるのも危険であろうと思われます。
機能を制限するならシートの保護、ブックの保護を使って、操作を制限するべきでしょう。
そのうえで、そういう機能を簡単に無意識や間違いで使わせないよう、
VBAを使ってエクセルを制御し別の操作を用意するのが本筋でしょう。
ですが、おひとりで、そのようなアプリにエクセルを改造するのも大変でしょうから、
メンテナンスするときのツールで場当たり的にしのごうというのはありかなと思います。
 
で、本題。
 
>Cells.SpecialCells(xlCellTypeLastCell)は、前のセルが残っています。
これはこういう仕様です。
そういう風に作られているのですからあきらめてください。
 
未使用かどうかはさておき、
 
1)使っているセルが1個
2)シート上の図形が0個
 
なら使ってないとみなして、削除でいいのでは?
削除しても被害は最小限でしょうし、
最初に変なシートは時々削除するルールを知らせておけばよいかと思います。
 

Option Explicit

Sub test()
    Dim ws As Worksheet
    
    For Each ws In ThisWorkbook.Worksheets
        If ws.Shapes.Count = 0 _
           Or ws.UsedRange.Count = 1 Then
            ws.Delete
        End If
    Next
End Sub

 
SpecialCells(xlCellTypeLastCell)
に戻りますが、
SpecialCellsメソッドは、シート上の使っている範囲が暗に対象となっているようですが、
セルの削除・挿入に追随して使っているセル範囲を認識しなおすことはないようです。
しかし、シート上の使っているセル範囲を取得できる、
UsedRangeプロパティを使うと(SpecialCellsとは関係なく)、
使っているセル範囲を更新して認識できるようです。
なので、
activesheet.usedrange.SpecialCells(xlCellTypeLastCell).select
と書けばよいかと思います。(試していませんが^^;)
 
ぼくなら、
with activesheet.usedrange
    .cells(.count).select
end with
で、使っている最後のセルを指定します。(そちらの意図したセルになるかは保証できませんが)
SpecialとかxlCellTypeとか綴りを覚えられないので(爆
(activesheetも怪しい^^;)

回答
投稿日時: 20/11/23 12:40:24
投稿者: ロードランナー
投稿者のウェブサイトに移動

mattuwan44さん、またまたのResありがとうございます。
 
>場当たり的
 
現状ではこのやり方しかないと思っています。
 
ですので、空白シートのチェックは止めました。(考えれば考えるほどドツボにはまりそう…)
ただ誤操作によるシート追加はその場で削除してもうえるよう、前回のコードを個人湯マクロブックに仕込んでます。
 
また、シート保護、ブック保護も使っていましたが、こんどは「出来ない事に対するクレーム」もあり百戦錬磨のシニアは一筋縄でいきません。
 
一台のパソコンを複数のシニアスタッフが複数のファイルを弄繰り回す、こういう職場経験のない方にはなかなか理解いただけないかも知れません。私も初めての経験で、毎回「え、なにこれ?」の連続です。
 
まさに「場当たり的な対応」をしているのが現状です。
 
御呈示いただいたコードは、今後の参考にさせていただきます。ありがとうございました。
 
PS)WinArrowさんにもこの場をお借りしてお礼申し上げます。

投稿日時: 20/11/23 13:23:53
投稿者: mattuwan44

引用:
一台のパソコンを複数のシニアスタッフが複数のファイルを弄繰り回す、こういう職場経験のない方にはなかなか理解いただけないかも知れません。私も初めての経験で、毎回「え、なにこれ?」の連続です。

 
さすがに、思い通り動かせなくて、腹立ちまぎれにエンターキーを連打して叩き壊す人は最近はいないでしょうが、気持ちは少しわかります。
 
僕は電源ONからの操作手順を書いて渡したり、
操作方法を付箋に色々書いて画面の周りに貼り付けたりして対応してましたけど、
マクロで何かをしたことはないなぁ。。。作りかけると大掛かりになるので。。。
 
返事がもらえたので解決にします^^