Excel (VBA)

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

 
(指定なし : 指定なし)
Selectせずに処理
投稿日時: 24/02/20 11:02:37
投稿者: tako552101

お世話になります。
 
With Rangeだと255文字を超えエラーになるので、unionで範囲選択したセルのロック、表示をオフにするマクロを組みました。
これで問題なく動作しますが、Selectせずに処理する方法はないのかな、と質問させていただきます。
よろしくお願いします。
 

Sub Macro2()
    
        
    Union( _
        Range("D4:F4,D6:R6,D8:R8,W6,W8,AA4"), _
        Range("D12:E12,D14:F14,D16:I16,F18,D20:D21,F20:F21,J20,D23,F23,J23,S18:S24"), _
        Range("D29:E29,D31:F31,D33:I33,F35,D37:D38,F37:F38,J37,D40,F40,J40,S35:S41"), _
        Range("D51:E51,D53:F53,D55:I55,F57,D59:D60,F59:F60,J59,D62,F62,J62,S57:S63"), _
        Range("D69:E69,D71:F71,D73:I73,F75,D77:D78,F77:F78,J77,D80,F80,J80,S75:S81") _
    ).Select
    
    With Selection
        .Locked = False
        .FormulaHidden = False
    End With

End Sub

回答
投稿日時: 24/02/20 11:30:27
投稿者: WinArrow

掲示したコードは、例ですよね?
コードは、数式以外のセルのロックを解除していますが、
 
一般的には、全セルを対象にロックを外し、
次に、数式の入っているセルのロックを設定する
という手順になります。
そこで数式の入っているセルは、ジャンプ機能で指定することができます。
その時、Selectする/しないは、別のはばし。
 
そもそも
Select云々の話ではないですね?
セルを選択して、何をしたいかで決まります。
 
複写したいのなら
Range(xxxx),Copy
と書けば、よいだけ。
 

回答
投稿日時: 24/02/20 12:13:06
投稿者: QooApp

規約上あまりリンクを張るものではありませんが、
こういう感じの話ですか?
http://officetanaka.net/excel/vba/speed/s2.htm

回答
投稿日時: 24/02/20 12:54:40
投稿者: WinArrow

質問の内容を整理しましょう。
>Selectせずに処理する方法はないのかな、
が、真の目的なんですか?
真の目的は
With句で、複数のセルアドレスを記述しないで簡単にする方法はないか?
ではないのですか?
 
◆Selectしない方法
 
Dim myRange As Range
    Set myRange = Union(中身省略)
    With myRange
        .Locked = False
        .FormulaHidden = False
    End With
 
◆複数のセルアドレスを記述しない方法
  指定範囲の中の「定数」セルだけをロックを外す処理。
    With ActiveSheet.Range("指定範囲")
        With .SpecialCells(xlCellTypeConstants, 23)
            .Locked = False
            .FormulaHidden = False
        End With
    End With
※この方法は、空白セルが対象にならないので、
指定範囲の全セルのロックを外したあと、数式セルのみを指定して、ロックを掛ける方法とします。
 
 

投稿日時: 24/02/21 09:05:54
投稿者: tako552101

皆さんありがとうございます。
 
WinArrowさんのおっしゃるようにコードは必要部分を抽出したもので、実際にはセル全体にロックをかけて、指定範囲のロックをはずしたりほかの処理をしています。
 
QooAppさんのおっしゃるとおり、同サイトのコードをたびたび参考にしていて、「Select……決して効率の良いコードとは言えません」を勝手に思い込んでいるだけです。
 
この思い込みの原則?を守るとすれば前述のコードはどんなふうになるのかな?という素朴な疑問でしてあまり深い意味はありません。
 
ご指示いただいた「◆Selectしない方法」がまさにこういうことなんだーと思いました。
勉強になりました。ありがとうございます。