[[20180619115251]] 『ActiveCellのベースとなる位置が変動する場合には』(しーちゃん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ActiveCellのベースとなる位置が変動する場合にはどうしたらよいか?』(しーちゃん)

下記のVBAではベース(固定)となるセル(位置)が必要になるが
ベースとなるセル(位置)が固定できない場合はどうしたらよいですか?
お願いします。

ActiveCell.Offset(2, 0).Activate−−>下方向へ2つ移動

< 使用 Excel:Excel2010、使用 OS:Windows10 >


 >ベースとなるセル(位置)が固定できない場合はどうしたらよいですか?

つまり、ベースとなるセルがプログラム実行時において、
その都度都度変更になるということですね?

ならば、そのセルをその都度都度検索する必要がありますね。
例えば、C3セルを含むアクティブな表の範囲(空白行および空白列で囲まれる範囲)とか、
シート上で使用しているセル範囲、
あるいは、A列のデータ最終行、
数式で空白に見せているセルを無視したデータ最終行などなど、
表現できると思います。

日本語で説明すると基準としたいセルは、
どういう位置になるのですか?
(まっつわん) 2018/06/19(火) 12:29


編集がかぶっちゃいましたがそのまま。

質問がよく理解できません。
>ベース(固定)となるセル(位置)が必要になる

たぶん勘違いされてると思いますけどOFFSETは基準からずらすものです。

 Range("A1").Offset(2, 0).Activate  → A3セルがアクティブになります。

 Range("A1").Activate
 ActiveCell.Offset(2, 0).Activate   → A3セルがアクティブになります。

 Range("A3").Activate               → A3セルがアクティブになります。

それよりも気になるのはコード上であんまり、セルをアクティブにする必要が生じるとも思えないので、無駄が多いコードになっている可能性があるので、個人情報等は隠した上で、コードを提示して皆さんに添削してもらうとよいんじゃないかなとおもいます。

 ○○を選択(アクティブに)して
 選択されている(アクティブになっている)ものを××

という書き方になっているんじゃないかと推測します。

(もこな2) 2018/06/19(火) 12:36


たぶん↓の続きなんじゃないでしょうか・・・
[[20180617220740]]『セルをコントロールキーで選択した場合のカーソルの移動VBA』(しーちゃん)

それでもって、
>選択セル A5、C7、E9、E11、G13 コントロールキーで選択を処理ボタンをクリックし、
>メッセージボックスで処理内容を表示、Yesは斜線を引き次のセルに移動したい、
>Noは次のセルに移動したい、キャンセルは終了のVBAで選択したセル数は5
>最初のアクティブセルの内容を5回表示し各処理を5回で終わってしまう
これを私なりに解釈すると、

 (1)Ctrlキーを押しながら複数の離れたセル(A5、C7、E9、E11、G13)を選択
 (2)「処理ボタン」をクリック
 (3-1)【A5】の内容を表示して、処理して良いかメッセージボックスでユーザーに照会
 (4-1)(3-1)でOKが押されたら【A5】に斜線を引き、キャンセルが押されたら斜線は引かずに次の処理へ
 (3-2)【C7】の内容を表示して、処理して良いかメッセージボックスでユーザーに照会
 (4-2)(3-1)でOKが押されたら【C7】に斜線を引き、キャンセルが押されたら斜線は引かずに次の処理へ
     【E9】【E11】【G13】・・・・も同様に3〜4の処理を実行 
 (5)マクロ終了

ってことではないかと思います。
この推測で合っているなら、選択したセル(の集まり)に対して同じ処理をしているのですから、「For Each 〜 Next」ステートメントを使って次のように記述できます。

    Sub Sample()
        Dim MyRNG As Range
        Dim i As Integer

        '↓実際には手動で選択
        Range("A5,C7,E9,E11,G13").Select

        For Each MyRNG In Selection '←選択しているセル(の集まり)に対して処理
            With MyRNG
                i = MsgBox _
                    (.Value & vbCrLf & vbCrLf & "斜線を引きますか?", _
                    vbOKCancel, .Address(0, 0) & "セルの処理確認")

                If i = vbOK Then .Borders(xlDiagonalDown).LineStyle = xlContinuous

            End With
        Next MyRNG

    End Sub

ちなみに、複数のセルを同時に選択は可能ですが、複数のセルを同時にアクティブにすることはできません。
↓を実行してみるとわかるとおもいますが、アクティブセルは1こしかありません。

    Sub Sample2()
        Range("A5,C7,E9,E11,G13").Activate
        Debug.Print "アクティブセルは " & ActiveCell.Address(0, 0)
        Debug.Print "選択されているセルは " & Selection.Address(0, 0)
    End Sub

(もこな2) 2018/06/19(火) 22:24


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.