- ベストアンサー
エクセル2003VBA ウインドウズXP 基準のセルをつくる
- エクセルのWorksheet_Changeを使って自動処理を行う際、基準セルを設定する方法を質問しています。
- 基準セルとして「基準セル」と入力されているセルを取得し、VBAの処理に利用したいと考えています。
- セルの変更を監視するWorksheet_Changeイベントを設定し、基準セルが変更された場合に処理を行いたいと考えています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> 説明不足だったと思います。最終に望む形は、基準のセル位置に対して、複数のセルを > 処理させようとしています。そのため、「基準のセル」の位置を取り込んで置く方法で > 検討しております。 どちらにしても変更したセル(Target)と基準セルの位置を確認するんですよね。 でしたらTargetが基準セルから指定の位置に該当するかどうかを確認しても、Targetから見て指定の位置に基準セルかあるかどうか確認しても結果は同じ事です。 基準セルが複数あれば、前者なら、基準セルの位置をすべて保存しておかなければいけませんし、セルに変更があるたびに全ての基準セルとTargetの位置確認をしなければいけない(100個基準セルがあれば100回の確認が必要になります)など処理が重たくなります。 後者であれば、先に示した数行のコードですみますし、基準セルがいくつあろうと位置確認は一回で済みます。 とりあえず、複数の基準セルを作成して先に示したコードを実行してみてください。
その他の回答 (3)
- kmetu
- ベストアンサー率41% (562/1346)
どうしても先に基準セルを配列で取り込んでおきたいのでしたら > ThisWorkBookモジュールの"Workbook_Open()"イベントで「基準セル」を配列に取り込んでおいて、 > Sheetモジュールの”Worksheet_Change”イベントでその変数を使用していくには、どうするので > しょうか? 標準モジュールで Public test(256) As String などとグローバル変数を指定してください。
- kmetu
- ベストアンサー率41% (562/1346)
もしかして Private Sub Worksheet_Change(ByVal Target As Range) Dim myRange As Excel.Range If Target.Offset(-1, 0).Value = "基準セル" Then Target.Offset(1, 0).Interior.ColorIndex = 3 End If End Su これでいいのではないですか。
補足
ありがとうございます。 説明不足だったと思います。最終に望む形は、基準のセル位置に対して、複数のセルを 処理させようとしています。そのため、「基準のセル」の位置を取り込んで置く方法で 検討しております。 たとえば、「基準セル」の下のセルに50と入力させた場合、50箇所のセルを自動で処理 させようとしています。そして、その処理させる位置も「基準セル」の位置に対して 相対的な位置を考えております。
- kmetu
- ベストアンサー率41% (562/1346)
Private Sub Worksheet_Change(ByVal Target As Range) Dim myRange As Excel.Range Set myRange = Range(Cells(1, 1), Cells(Rows.Count, Columns.Count)).Find(What:="基準セル") If myRange Is Nothing Then MsgBox "基準セルがありません" Exit Sub End If If Target.Address = myRange.Offset(1, 0).Address Then myRange.Offset(2, 0).Interior.ColorIndex = 3 End If End Sub こういうことですか?
補足
ありがとうございます。 findで見つけておけばよいのですね。 あと、さらにお尋ねしたいのですが、「基準セル」はシートの使用状況によって増えて行く予定です。 それを、findとfindnextでmyRange()に配列で取り込んでおくとして、 その取り込みを"Workbook_Open()"イベントで取り込んでおこうと思うのですが、このとき、変数 宣言は何で行えばいいのでしょうか? ThisWorkBookモジュールの"Workbook_Open()"イベントで「基準セル」を配列に取り込んでおいて、 Sheetモジュールの”Worksheet_Change”イベントでその変数を使用していくには、どうするので しょうか? かさねがさねすみません。よろしくお願いします。
お礼
ありがとうございます。 そうですね。処理の流れが整理できていませんでした。 Private Sub Worksheet_Change(ByVal Target As Range) Dim myRange As Excel.Range If Target.Offset(-1, 0).Value = "基準セル" Then <<セルを処理する動作1>> End If If Target.Offset(-1, -1).Value = "基準セル" Then <<セルを処理する動作2>> End If If Target.Offset(-1, -3).Value = "基準セル" Then <<セルを処理する動作3>> End If とすれば、望む動作が創れる事に気付きました。 ありがとうございます。 End Su