[[20250228024020]] 『スクロールを独立させる(ように見せかける)』(かき) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『スクロールを独立させる(ように見せかける)』(かき)

入力用と印刷用のシートに分けて作成しています
入力用は画面の左半分で終わるので、右側に印刷用シートを図のリンク貼り付けで貼り付けて印刷プレビュー代わりにしています

入力用をスクロールすると、右の画像が見えなくなってしまいます
追随して移動させるか、画像だけ固定にしたいのですがどのようにしたらよいでしょうか?
複数ウインドウを表示して整列させるのではイメージと違うし、余計なEXCELのウインドウがあり目障りに感じます

一般的なアプリのように独立したスクロールができればよいのですが、
ウインドウ枠の固定ではできないようです

1スクロールするたびに画像を上下に移動させるようなコードは現実的でしょうか?
画像を貼っているときに動かしまくったり、行列削除などをすると、
画像が勝手に複製されたり、EXCELが落ちたりすることがあるので不安要素ではあります

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


 おはようございます。

 スクロールされるたびに起動されるイベントプロシージャは無いと思うので、
 画像を指定位置に設定しなおすプロシージャを一定間隔で繰り返し動作させるしかないと思います。
 目的との関係でそれほど必要なことなんでしょうか。よくわかりません。

 | 1スクロールするたびに画像を上下に移動させるようなコードは現実的でしょうか?
 | 画像を貼っているときに動かしまくったり、行列削除などをすると、
 | 画像が勝手に複製されたり、EXCELが落ちたりすることがあるので不安要素ではあります 
 既にトライされたものがあるのであれば、そのコードを示されたらいかがでしょうか。
 皆さんからコメントが貰えるでしょう。

 そもそもですが、念のため目的を確認します。

 入力用シートと印刷用のシート(の画像)を左右に表示する目的は何でしょうか。
 リアルタイムで双方を同時に表示しないといけない理由は何でしょうか。
 教えて下さい。
 入力時は入力に専念し、事後的に印刷用シートのプレビューを確認するのではダメなんですか?

 また、そういう場合に備えてExcelが用意している、複数ウインドウの配列表示では
 目的が達成できないのでしょうか?
 どのような点が達成できていませんか?どの程度の支障なんでしょうか。
 具体的に教えてください。

(xyz) 2025/02/28(金) 09:12:18


>ウインドウ枠の固定ではできないようです
入力用と印刷用を逆にすればできます。
>画像が勝手に複製されたり
リンクされているので仕方ないです。
>印刷プレビュー代わりにしています
印刷プレビューのアイコンをクィックアクセスバーに登録したらどうですか。
(IT) 2025/02/28(金) 09:24:03

 リボンのユーザー設定で、リボンにないコマンドから、[リボンの非表示」っていうのを追加しておきます。

 新しいウインドウを開いたら、
 リボンの表示タブの表示グループで、[見出し]と[数式バー]のチェックを外す
 リボンを非表示にする

 リボンを非表示にすると、ウインドウが全画面表示になるので、
 元々のウインドウを画面の半分の幅にして上に重ねる

 というようなこんな感じで
(´・ω・`) 2025/02/28(金) 09:33:53

 数式バーは、ウインドウレベルじゃなくて、アプリケーションレベルで非表示になるのでまずいかも
 なんならスクロールバーとかシート見出しとかも非表示にしちゃえば
(´・ω・`) 2025/02/28(金) 09:48:36

 こんばんは!
スクロールじゃないんですけど、ActiveWindow.VisibleRange で見えている範囲は取得出来るので
その半分と図の左上を比較して図を上下します。
Do Loopで同じになるまで にしたら重たくて動きませんでした。(^^;
5回くらい繰り返すのが私のPCではいい感じでした。
↓↑してみると図がついてきます。
後は図の大きさとかを取り入れていただければと思います。
まぁ、、ごまかしですけどね
では、、では、、

 Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Static MyRow As Long
Dim MyShap As Shape
Dim MyMov As Long
Dim MyHeight As Double
If Target.Row = MyRow Then Exit Sub
Set MyShap = Me.Shapes(1)
Application.ScreenUpdating = False
    With ActiveWindow.VisibleRange
        MyHeight = .Height / .Rows.Count
        MyMov = .Cells(1).Offset(.Rows.Count / 2).Row - MyShap.TopLeftCell.Row
        MyMov = Abs(MyMov) * MyHeight
        If MyShap.TopLeftCell.Row < .Cells(1).Offset(.Rows.Count / 2).Row Then
            MyShap.IncrementTop (MyMov - MyShap.Height / 2)
        Else
            MyShap.IncrementTop (-MyMov - MyShap.Height / 2)
        End If
    End With
    DoEvents
Application.ScreenUpdating = True
MyRow = Target.Row
End Sub
ちょっと見直しました。2025/03/01 19:55
横に動いた時はパスする様にしました。 2025/03/02 11:16
(SoulMan) 2025/02/28(金) 21:30:50

 ユーザーフォームにイメージコントロールを配置してそこに画像を表示させて、
 エクセルウィンドウの子ウィンドウとして表示させたらどうでしょう。
 ユーザーフォームのタイトルバーと枠を非表示にすれば図と見た目はほぼ同じになります。
 下記でちょうど同じ処理のコードを載せてますのでそれを利用すればいいでしょう。

[[20250225170208]] 『ロックを使わず図形をロックする方法』

 上記のコードは A2セルの位置にユーザーフォームの左上が来るように表示してますので、
 Range("A2") の部分を入力範囲の右端の列のセルに変更すればいいでしょう。
 例えばK列までが入力範囲なら、 Range("L1") にするとか。

 あとは、シートのアクティブ時とでアクティブ時に表示/非表示を切り替えればいいでしょう。

 シートモジュール
 ---------------------------------
 Option Explicit

 Private Sub Worksheet_Activate()
   UserForm1.Show vbModeless
 End Sub

 Private Sub Worksheet_Deactivate()
    UserForm1.Hide
 End Sub
 ------------------------------------

 SoulManさんのコードでも実用上問題ないと思われますので、
 ここまでするかどうかはスレ主さんのご判断で。

(hatena) 2025/03/01(土) 22:04:22


 UserForm上のイメージコントロールって
 >図のリンク貼り付け
 と同様のことはできないんじゃないかと思ってましたが....
 できるんでしょうか
(´・ω・`) 2025/03/01(土) 22:48:32

図のリンク貼り付けってなってますね。
見落としていたようです。

私の回答はスルーしてください。
(hatena) 2025/03/02(日) 20:11:03


コメント返信:

[ 一覧(最新更新順) ]


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