プロが教えるわが家の防犯対策術!

またまたお知恵拝借させてください。

添付画像の緑で囲った部分がスクロールと共に移動して欲しいのですが可能でしょうか?
主加工の欄はM、MC、L、外注それぞれ選択して表示できるようになっていますが、そのどの画面でも表示されていて、スクロールと共に移動してくれる。
そんな計算枠にしたいのですが可能でしょうか?

現在の計算枠はテーブルの数値を参照にしています。
加工日や機械はドロップダウンメニューで選択できます。
総時間は、同じ加工日の同じ機械の総和が計算できるようになっています。
MAX稼働時間はM、MC、Lそれぞれで変わるようにしています(画像に表示されたものです)
負荷率は総時間をMAX稼働時間で除したものです。
数物は総時間と同様に同じ加工日、機械の数物時間の和です。
単品は総時間から数物時間を引いた数値です。

実現すれば一気に便利な機能になるのですが可能でしょうか?
宜しくお願いします。

「WEBのようにスクロールすると付いてくる」の質問画像

質問者からの補足コメント

  • WindFallerさん
    前回の質問に続きありがとうございます。
    緑の枠の中、項目は左から加工日、機械、総時間、単品、数物となっています。
    画質良くしてもアップすると同じような感じの荒さになってしまいます。
    不鮮明で申し訳ないです。これでお分かりいただけますか?
    宜しくお願いします。

    「WEBのようにスクロールすると付いてくる」の補足画像1
    No.1の回答に寄せられた補足コメントです。 補足日時:2017/01/19 19:08
  • うれしい

    ママチャリさん
    ありがとうございます。
    いつもながら凄いです!
    面白いです!!
    クリックした場所に現れました!!
    質問なんですが、計算の自動、手動ってどう切り替えるのでしょう?

    こんなことが出来たら凄いな…の要望なんですが、
    添付画像のように組み合わせができるようにしたいのです。
    例えば
    加工日       機械
    5月第1週5/2〜5/8 汎用(小) 
    と選択すれば、その期間5/2~5/8の 汎用(小)の負荷率、加工総時間が分かるのです。
    が、今のままだとクリックした場所に計算枠が移動するので、ドロップダウンメニューが使えません。
    ショートカットで自動手動の切り替えができて
    手動の時にはドロップダウンメニューが使え、組み合わせが選択でき結果が表示される。
    自動にするとクリックした位置に現れる…。
    なんて出来るとうれしいですが可能でしょうか?

    「WEBのようにスクロールすると付いてくる」の補足画像2
    No.3の回答に寄せられた補足コメントです。 補足日時:2017/01/21 16:37
  • うーん・・・

    ママチャリさん
    先に教えていただいた「行挿入すると見出しができる」の命令を実行する為に行番号をクリックすると其処にも移動してしまう為、ショートカットのON OFF機能が無いと困ってしまいそうです。
    すみません、宜しくお願いします。

      補足日時:2017/01/21 16:49

A 回答 (5件)

自動/手動の切り替えは、「数式」タブの「計算方法の設定」から「自動/手動」を選択することにより切り替えできます。

マクロでやると次のような命令になります。
 
 Application.Calculation = xlManual '手動にする
 Application.Calculation = xlCalculationAutomatic '自動にする

ただ、問題はそこではないですよ。
先ほどご提供したマクロは、選択した行に対して計算枠の2行目が合わさるように登場します。その状態で計算枠の3行目を選択すると、その行に対して計算枠の2行目が合わさるように移動してしまいます。問題はここです。
そこで選択した行に対して計算枠の最終行が合わさるように修正したのでお試しください。

ショートカットによるON OFF機能については、先に紹介した命令を使って、hiroyuki3019さんの方でお好きなように組み込んでください。

Private Sub 計算枠移動()
Dim Loc As Long
Dim ToAddr As String
Dim r As Range
If Application.Calculation = xlManual Then Exit Sub
If ActiveCell.Row < Range("計算枠").Rows.Count Then Exit Sub
Loc = ActiveCell.Row - Range("計算枠").Row - (Range("計算枠").Rows.Count - 1)
If Loc = 0 And ActiveCell.Worksheet Is Range("計算枠").Worksheet Then Exit Sub
ToAddr = "=" & ActiveSheet.Name & "!" & Range("計算枠").Offset(Loc).Address
ActiveWorkbook.Names("移動先").RefersTo = ToAddr
Range("計算枠").Copy Destination:=Range("移動先")
If Range("計算枠").Worksheet Is Range("移動先").Worksheet Then
For Each r In Range("計算枠").Rows
If Intersect(r, Range("移動先")) Is Nothing Then r.Clear
Next r
Else
Range("計算枠").Clear
End If
ActiveWorkbook.Names("計算枠").RefersTo = ToAddr
End Sub
    • good
    • 1
この回答へのお礼

ママチャリさん
凄い!!!
こんな風に出来ればいいな…。
が、形になってしまう。実現してしまう。
エクセルの面白さ、凄さ、奥深さを改めて知ることができました。ありがとうございます。
私は独学で勉強してきたので本来ならルールから外れているようなこともいっぱいしているんだと思います。
にもかかわらず、私の要望に沿った知識を教えてもらえる。
どうしたらママチャリさんのような知識や技術が得られるのか!?
今それがものすごく分かりたいです。
ベストアンサーに選びたいのですが、今選んでしまうと締め切られてしまうので少し先に延ばさせてください

もし叶うなら、どんな勉強法があるのか教えてください。宜しくお願いします。

お礼日時:2017/01/23 18:45

こんにちは。


やっと戻ってきました。
肝心なのは、その緑の表を、オブジェクトで再現することではないでしょうか。

昔ですと、SpreadSheet オブジェクトなどがありましたが、今はセキュリティの関係でありません。
「Webのようにスクロール」するオブジェクトは出来ますし、#2様のように、それをリンクさせて表示することは可能ですし、オートシェイプの上に、フォーム・オブジェクトを載せて、グループ化すれば、簡単に移動も可能にはなります。Window で枠も何もないオブジェクトを備えることも可能だとは思いますが、どちらも、なかなか手間と技術のいる作業だと思います。最初から、UserFormとか作ってあるか、UserFormで作ろうとしているなら良いのですが、実際に出来たものを、そのまま加工するのは、困難を要します。

そこで、私の結論的な回答からすると、ご質問者さんを喜ばせるような回答ではなく、

#1で回答した
② ウィンドウ枠を固定して、上と下を別々にします。固定された表示部分を、上に追い出します。
という方法を、私はお勧めします。

③のリボンメニューについては、未だ、研究中です。

それ以上の凝った方法もあるかと思いますが、もう私には、これ以上の現実身(実用性)を感じないのです。
ここで、この件は、リタイアします。
失礼しました。
    • good
    • 1
この回答へのお礼

WindFallerさん
いつもありがとうございます。お付き合い頂き感謝しかありません。
ここに質問したお陰で、
こんなことも出来るの!?
と驚愕することしきりでした。本当に勉強になりました。ありがとうございます。
これからも宜しくお願いします。

お礼日時:2017/01/23 18:30

「WEBのようにスクロール」とまではいきませんが、こんな感じでどうでしょう。


選択セルが変わる度に計算枠が憑いて来るように見えるはずです。
実際は、「計算枠をコピーして、選択先に張り付け、元を削除する」の繰り返しです。

手順としては、まず、計算枠のセル範囲に、次の2つの名前を付けて下さい(1つのセル範囲に、ふたつの名前を付けます)。
「計算枠」
「移動先」

次に、下記のマクロを ThisWorkbookモジュールに張り付けて、出来上がりです。

ちなみに、このマクロは計算方法を自動にした時だけ機能するようにしています。デバッグ等でシートを変更するような場合は、手動にしておくと鬱陶しくありません。
こちらでの動作確認は、シンプルな表でそこそこ快適に動きました。ただ、複雑な表になると多少ストレスを感じるかもしれません。

【ThisWorkbookモジュール】
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Call 計算枠移動
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Call 計算枠移動
End Sub

Private Sub 計算枠移動()
Dim Loc As Long
Dim ToAddr As String
Dim r As Range
If Application.Calculation = xlManual Then Exit Sub
If ActiveCell.Row < 2 Then Exit Sub
Loc = ActiveCell.Row - Range("計算枠").Row - 1
If Loc = 0 And ActiveCell.Worksheet Is Range("計算枠").Worksheet Then Exit Sub
ToAddr = "=" & ActiveSheet.Name & "!" & Range("計算枠").Offset(Loc).Address
ActiveWorkbook.Names("移動先").RefersTo = ToAddr
Range("計算枠").Copy Destination:=Range("移動先")
If Range("計算枠").Worksheet Is Range("移動先").Worksheet Then
For Each r In Range("計算枠").Rows
If Intersect(r, Range("移動先")) Is Nothing Then r.Clear
Next r
Else
Range("計算枠").Clear
End If
ActiveWorkbook.Names("計算枠").RefersTo = ToAddr
End Sub
この回答への補足あり
    • good
    • 1

スクロールと共に移動というのは難しいですけれど、データ入力/修正したらそこへ移動する、というのはできるように思います。



やり方
1.緑色枠の部分を別シートに作り直します。
2.その緑色枠部分をコピーして「テーブル」シートの都合の良い位置に「リンクされた図」として貼り付けます(貼り付けメニューの中にあります)。
3.[Alt]+[F11]でVBAエディタを開き、左側のプロジェクトウィンドウでThisWorkbookをクリックします。
4.右側のエディタエリアに下記コードを貼り付けます。

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
ActiveSheet.Shapes.Range(Array("Picture 1")).Top = ActiveCell.Top
End Sub

試してみて下さい。
    • good
    • 0
この回答へのお礼

chiuneさん
ご教授ありがとうございます。VBAっていろんなことができるんですね。凄いです。
やってみました。

計算枠は左側にある表から抽出して、加工日の範囲、その時の機械別の負荷率を見れるように
する為のもので、ドロップダウンで組み合わせができるようになっています。
計算結果を表示する為のものではありませんので、教えていただいた形だと使いづらいものに
なります。私が描いている希望とは違う結果になってしまいました。
伝え方が下手ですみません。
お忙しい中私の要望のために工夫していただいたこと感謝します。
ありがとうございます。

またよろしくお願いします。

お礼日時:2017/01/21 16:14

こんにちは。



その解決には、3つの方法があると考えました。
画像で、その部分がもう少し大きく出ていれば、もう少し細かく考えられるかもしれません。

① その囲まれた部分全体を、ActiveX コントロール(?)でセル上に埋め込んで上げればよいような気がします。とりあえず、UserForm は見送り。Formコントロールもよいとは思いますが、非公開のテクニックも出てきそうな気がします。

② だいたいの方が選ぶ方法ですが、ウィンドウ枠を固定して、上と下を別々にします。固定された表示部分を、上に追い出します。

③ リボンカスタマイザーで、新しいタブとメニューを作ります。
  (どのぐらいのことができるかは、今のところ未知です)
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています