- ベストアンサー
エクセルVBAで
いつもお世話になります。 Sub ボタン_Click() Sheets("別紙1").Range("E1") = ActiveSheet.Name Sheets("別紙1").Activate Range("B65536").End(xlUp).Offset(1).Select End Sub Sub ボタン1_Click() i = Range("B65536").End(xlUp).Offset(, -1).Value na = Range("E1") Sheets(na).Activate ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", _ SubAddress:="別紙1!B" & i + 2, TextToDisplay:=Str(i) End Sub 上記モジュールで、ボタンをクリックすると別紙1に飛んで、その中に必要事項を記入後、ボタン1をクリックすると、ボタンをクリックしたときにアクティブだったセルに、ハイパーリンクを貼るものを利用していました。 先日、これらモジュールが貼られているシートを保護をかけて再度保護を解除したら、今までボタンを押したときにアクティブだったセルにハイパーリンクが貼れていたのに、A1のセルに記入してしまうようになりました。 そこで、不具合を改善すべく、上記モジュールを書き換えて、ボタンをクリック時にアクティブセルを別紙1のE2の保存しておいて、ボタン1をクリックするとそのE2のセルに戻ってハイパーリンクを貼るというものにしなおしたいと思います。 そこで質問ですが、ボタンをクリックした時点で、アクティブであるセルの座標(表現の方法が不適切かもしれませんが)を取得するにはどのようにすればいいでしょうか? ちなみに、E1にはクリックした時点でアクティブであるシート名を記録し、ボタン1をクリックしたときにそのシートへ戻るようにしてあります。 以上、ご教示の程よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>アクティブであるセルの座標(表現の方法が不適切かもしれませんが)を取得するにはどのようにすればいいでしょうか? 座標を取得して何をされるのか良く理解しないまま書きますが、次のような方法が考えられます。 Dim ActROW, ActCOL as long ActROW = ActiveCell.Row '行番号取得 ActCOL = ActiveCell.Column '列番号取得 Cells(ActROW , ActCOL).Select Dim ADRS As String ADRS=ActiveCell.Address 'セルアドレス取得 Range(ADRS).select Dim RNG as Range Set RNG = ActiveCell 'レンジオブジェクトを退避 RNG.Select
その他の回答 (3)
- KenKen_SP
- ベストアンサー率62% (785/1258)
こういう事かな? ’呼び出し元のセルを記録しておくモジュールレベル変数 Private m_rPrevious As Range Sub ボタン_Click() ' 現在のアクティブセルをモジュールレベル変数で参照しておきます Set m_rPrevious = ActiveCell ' シート[別紙1]のB列のデータ書き込み先へ飛びます With ThisWorkbook.Sheets("別紙1") .Activate .Cells(Rows.Count, "B").End(xlUp).Offset(1).Select End With End Sub Sub ボタン1_Click() Dim i As Variant Dim rLast As Range Dim sDispText As String ' 終了条件:: 呼び出し元のセルが参照されてない If m_rPrevious Is Nothing Then Exit Sub ' 現在アクティブなシートの B 列データ最終行のセルを参照 Set rLast = Cells(Rows.Count, "B").End(xlUp) ' rLast のひとつ左(ここでは A列)の値が空ならリンク表示文字列に ' アドレスを、空でなければ値を変数にしまっておく With rLast.Offset(0, -1) If IsEmpty(.Value) Then sDispText = .Address Else sDispText = .Value End If End With With m_rPrevious.Parent ' ジャンプ元のシートをアクティブに .Activate ' リンクを貼ります .Hyperlinks.Add Anchor:=m_rPrevious, _ Address:="", _ SubAddress:=rLast.Parent.Name & "!" & rLast.Address, _ TextToDisplay:=sDispText End With ' 次回の誤動作防止のため参照を開放します Set rLast = Nothing Set m_rPrevious = Nothing End Sub
補足
ありがとうございます。せっかくのご教示いただきましたが、ADRS=ActiveCell.Address でうまくできました。ありがとうございました。 不十分な説明にも関わらず、たくさん考えていただき大変感謝しております。ありがとうございました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 私には、ご質問が理解できません。コードが分からないです。 何をされているのか、もう一度説明していただきたいです。今まで、行ってきた過程や結果よりも、目的をはっきりして提示していただきたいです。 それと、シートの保護自体は、マクロで開け閉めするか、Protect メソッドで、UserInterfaceOnly をTrue にしておいて、マクロを有効にすればよいだけだと思います。設定によっては、シートの保護とマクロは別です。 >ボタン1をクリックすると、 >ボタンをクリックしたときにアクティブだったセルに、ハイパーリンクを貼る ハイパーリンクをどこにつけるのでしょうか?別紙1 ではないようですね。なぜ、別紙1のB列にリンクを貼るのとか、良く分かりません。別紙1のB列には何があるのか分かりません。Sheet名? フォームボタンをお使いのようですが、フォームで使う分には、シートは特定されているはずです。 それと、アクティブだったセルという過去形の意味が分かりません。 >アクティブであるセルの座標(表現の方法が不適切かもしれませんが)を取得するにはどのようにすればいいでしょうか? ハイパリンクに使用するSubAddressなら、 ActiveSheet.Name & "!" & ActiveCell.Address(0, 0) ということになるとは思いますが。
- mjsamiasan
- ベストアンサー率57% (55/95)
Selection.Addressでは取得できませんか?
補足
ありがとうございます。せっかくのご教示いただきましたが、ADRS=ActiveCell.Address でうまくできました。ありがとうございました。
補足
ご教示ありがとうございます。 VB初心者のため、説明及びモジュールの形成が適切ではないかもしれませんが、ADRS=ActiveCell.Address が知りたかったのです。 ありがとうございました。