• ベストアンサー

エクセル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をクリックしたときにそのシートへ戻るようにしてあります。 以上、ご教示の程よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

>アクティブであるセルの座標(表現の方法が不適切かもしれませんが)を取得するにはどのようにすればいいでしょうか? 座標を取得して何をされるのか良く理解しないまま書きますが、次のような方法が考えられます。 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

nkeis
質問者

補足

ご教示ありがとうございます。 VB初心者のため、説明及びモジュールの形成が適切ではないかもしれませんが、ADRS=ActiveCell.Address が知りたかったのです。 ありがとうございました。

その他の回答 (3)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

こういう事かな? ’呼び出し元のセルを記録しておくモジュールレベル変数 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

nkeis
質問者

補足

ありがとうございます。せっかくのご教示いただきましたが、ADRS=ActiveCell.Address でうまくできました。ありがとうございました。 不十分な説明にも関わらず、たくさん考えていただき大変感謝しております。ありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 私には、ご質問が理解できません。コードが分からないです。 何をされているのか、もう一度説明していただきたいです。今まで、行ってきた過程や結果よりも、目的をはっきりして提示していただきたいです。 それと、シートの保護自体は、マクロで開け閉めするか、Protect メソッドで、UserInterfaceOnly をTrue にしておいて、マクロを有効にすればよいだけだと思います。設定によっては、シートの保護とマクロは別です。 >ボタン1をクリックすると、 >ボタンをクリックしたときにアクティブだったセルに、ハイパーリンクを貼る ハイパーリンクをどこにつけるのでしょうか?別紙1 ではないようですね。なぜ、別紙1のB列にリンクを貼るのとか、良く分かりません。別紙1のB列には何があるのか分かりません。Sheet名? フォームボタンをお使いのようですが、フォームで使う分には、シートは特定されているはずです。 それと、アクティブだったセルという過去形の意味が分かりません。 >アクティブであるセルの座標(表現の方法が不適切かもしれませんが)を取得するにはどのようにすればいいでしょうか? ハイパリンクに使用するSubAddressなら、 ActiveSheet.Name & "!" & ActiveCell.Address(0, 0) ということになるとは思いますが。

回答No.2

Selection.Addressでは取得できませんか?

nkeis
質問者

補足

ありがとうございます。せっかくのご教示いただきましたが、ADRS=ActiveCell.Address でうまくできました。ありがとうございました。

関連するQ&A