- 締切済み
Excelの右側を固定、またはボタンが追従する方法
閲覧ありがとうございます。 他のサイトでも質問させて頂きましたが、緊急性があるのでこちらでも質問させて下さい。 タイトルに記載した通り、Excelの左側はスクロールを可能に、右側は固定する方法を探しています。ボタンはマクロボタンです。マクロボタンがスクロールしてもついてくる形でも構いません。 結果として「左側の表示は上下し、右側のボタンは常に押せる状態」であれば問題ないのです。 ひとまず現段階では左側に文章や数値を入力しており、右側にマクロ登録したボタンを配置しております。 希望する形はM列以降にボタンを複数配置し、スクロールをすると左側の文章や数値などは上下します。しかしボタンがあるM列以降は変化せず、いつでもボタンが押せるというものです。 再度申し上げますが、ボタンがスクロールする度に追従する形でも構いません。 マクロボタンが追従してくる――ついてくるマクロを作るしかないのでしょうか? っと言っても、正直そんなマクロは思いつきません。 Excel初心者の自分に、どうか御知恵を御貸し下さい。 宜しくお願いします。 Excelは2010です。 以下は試してみたことです。 (1) 分割を利用してみましたが、分割すると右も左も一緒にスクロールされてしまいます。 (2) ウィンドウ枠の固定も行いましたが、右側のみの固定は出来ませんでした。 (3) 開発の挿入で、フォームコントロールやActiveXコントロールでスクロールバーを新しく設置するなども考えましたが、使い方が分かりません。 (4) 他のサイトで教えていただいたのですが、「表示メニュー」を選択後、「新しいウィンドウを開く」を選択。「整列」を選択肢、「左右に並べて表示」を行い、右と左に分けてみました。確かにこれで左右に分けることは出来たのですが、また違う問題が発生しました。 選択したセルをマクロで処理するボタンが存在するのですが、数値や文章を入力してある左ウィンドウのセルを選択しても、ボタンを動かそうと右ウィンドウをクリックすると、選択したセルが無効になってしまいます。実質これではボタンが使えません。 お手上げ状態です。どうか宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- real beatin(@realbeatin)
- ベストアンサー率82% (174/211)
こんにちは。お邪魔します。 こちらの読解が至っているか自信は持てませんが、 想像する状況の内の幾つかについては、以下の方法が、 対症療法的に有効かも知れません。 > (4)...「表示メニュー」...「新しいウィンドウを開く」...「整列」...「左右に並べて表示」 という設定を前提として、。 > 数値や文章を入力してある左ウィンドウのセルを選択しても、 > ボタンを動かそうと右ウィンドウをクリックすると、選択したセルが無効になってしまいます。実質これではボタンが使えません 右ウィンドウをアクティブにするタイミングの直前に、 左ウィンドウを非アクティブにするタイミングを捉えるイベント Workbook_WindowDeactivate が発行されますので、 そこで選択中のセル範囲を変数に格納し、次に 右ウィンドウをアクティブにするタイミングを捉えるイベント Workbook_WindowActivate にて 変数に格納しておいたセル範囲を選択(へジャンプ)します。 条件として「左」と呼ぶウィンドウのタイトルバーの末尾が":2" になるようなウィンドウ配置になっていることです。 勿論、他のマクロの書きよう、や、シートデザインによっては、 お望みの結果が得られない場合もあるでしょう。 ひとつの可能性でお応えするだけのものです。 本来、必要なのはボタンの表示位置を右側に固定する、 という一点なのだと思われますが、 何故、左じゃダメなのでしょう? っつか、何故右にボタンを配置するようなデザインを選んだのでしょう? > マクロボタンが追従してくる――ついてくるマクロ あまりお奨め出来ない、というか、 各種コントロールをスクロールする位置に配置すると、 Tempフォルダに破断した一時ファイルが残りExcelの動作に影響することがあるので、 •%temp%\excel8.0 •%temp%\vbe にある、.exd ファイルを時々消去してあげた方が良いと思います。 現状を活かして正しく対策するなら、UserFormをモードレス表示するのが 安定的で、最善と、思われます。 急がば廻れ的な意味でも、UserFormを検討するのが本筋と思います。 「すぐに回答を!」とあるので、お急ぎなのでしょうから、 一時的な対策という意味で、以下。 ' ' ThisWorkbook モジュールの先頭に以下の記述をコピーして貼り付ける Private rng As Range Private Sub Workbook_WindowActivate(ByVal Wn As Window) If Wn.Index = 2 Then Exit Sub If rng Is Nothing Then Exit Sub With Application .EnableEvents = False .Goto rng .EnableEvents = True End With End Sub Private Sub Workbook_WindowDeactivate(ByVal Wn As Window) If Wn.Index = 1 Then Exit Sub Set rng = Wn.RangeSelection End Sub
- keithin
- ベストアンサー率66% (5278/7941)
やり口は様々ありますが、どのみちマクロについて知識が足りてないので、何を聞いても消化不良になりそうですね。 推奨: ユーザーフォームにコマンドボタンを配置して利用する ユーザーフォームの作り方は下記を勉強する http://www.moug.net/tech/exvba/0091.html ユーザーフォームを表示するには、標準モジュールに sub macro1() userform1.show vbmodeless end sub のように作成し実行する ユーザーフォーム上のコマンドボタンには、ご相談でナイショの適切な動作マクロを登録する ここの説明が出来てないので、具体的にどーしたらいいのかビシッと説明がもらえないことに留意してください。 次善: 新しいウィンドウを開き、整列してシート上のコマンドボタンを右画面に表示する >右ウィンドウをクリックすると、選択したセルが無効になってしまいます。実質これではボタンが使えません。 その下手なマクロをもっと上手に動くよう、修正するだけです。 具体的にどんなマクロを今動かそうとしてて失敗してるのかナイショのままなので、具体的にどんなマクロに手直したらいいのか説明が貰えないことに留意してください。