質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

4073閲覧

ExcelVBAのListViewでスクロール周りのイベントをコードで調整したい

funmas

総合スコア31

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2018/07/10 01:19

前提・実現したいこと

ExcelのVBAでListViewを二つ並べています。
これら片方のスクロールバーを動かした場合(ドラッグ、ホイール問わず)
同期をとり、もう片方のListViewも動くように調整したいと考えています。

ListViewではこちらの実現は不可能でしょうか。

試したこと

始めはListboxで作成していたのですが、
見出しが上手く追加できなかったことからListViewで運用しています。

ListViewのイベントに、Scroll周りのものがないか、
色々見てみたのですが、見つけることが出来ませんでした。

補足情報

・Excel2010
・Microsoft ListView Control, Version6.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ども^^

始めはListboxで作成していたのですが、
見出しが上手く追加できなかったことからListViewで運用しています。

あぁ、僕もそんなこと試したことがあるような無いような。
リストボックス、見た目がしょぼいのでリストビュー使いたいなーって思う気持ちはわかります。
が、ユーザーフォームで何かを作るのって、
1から10までほぼ自分で機能を付けないといけないですよね?
しかも、マウスホイールに一向に対応してくれないし。。。

なので僕はユーザーフォームで何かを作るのはほぼやめました。
シートで代わりをすればいいと思ってます。
今回の件もシート上に表を展開して、
新しくウィンドウを開く→整列(左右)→並べて比較→同時にスクロール
とすれば、やりたいことが実現できるわけですよね?

折角のエクセルVBAなので、エクセルの機能に頼れるとこは頼る。
使える機能は使い倒す。
という気概で開発してはいかがでしょうか?

投稿2018/07/10 07:00

mattuwan

総合スコア2136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ExcelVBAer

2018/07/11 07:12

同感です~! フォームばっかりで作られたツール(ソフト)を見た日には、 作った人はエクセルが嫌いだったんだなって思っちゃいますね~ エクセルの良さは、シートにデータを展開できる、 シート上なら、シェイプ、図形、スクロール、フィルタ、ズーム、数式、、、etc 色んな事ができますからね~
funmas

2018/07/12 02:09

Listbox、見た目たしかに少しちゃちい感じがしますね笑 シート上で実現可能な範囲ならいいのですが、 不特定多数の人間に触らせるので、多少ブラックボックスな作りにしなくてはならず、 且つデータのやりとりミスが発生すると少々重大になってしまうので、 フォームでの開発を行っております。簡単にいうと左から右にデータを移すようなシステムです。 実現可能なシステムであれば、シート上で動かせるということを視野に入れたいと思います。 ありがとうございました!
mattuwan

2018/07/12 11:30

触らせたくないブックやシートは非表示にしたり、シートに保護かけて選択できなくした状態でVBAからの操作の命令しか受け付けなくできますし、ユーザーフォームじゃなきゃ絶対ダメってことは無いように思いますが勘違いでしょうか? まぁ、勝手に制限をかけるのはご自由になさってください。こちらは結局当事者ではないですから。 とりあえず、一つの案として発言しました。
guest

0

ベストアンサー

始めはListboxで作成していたのですが、
見出しが上手く追加できなかったことからListViewで運用しています。

下記の方法でてきると思いますが。

Office TANAKA - Excel VBA Tips[ListView-列見出しの設定]

これら片方のスクロールバーを動かした場合(ドラッグ、ホイール問わず)
同期をとり、もう片方のListViewも動くように調整したいと考えています。

APIを使うことになります。下記にAccessのフォームのスクロールバーを操作して同期させるサンプルがあります。

サブフォーム間のスクロールを同期させる方法 - hatena chips

スクロールバーのハンドルが取得できれば、リストボックスやリストビューでも同様のことは可能だと思います。
ただ、ExcelVBAerさんも言われてるようにかなり難易度は高いと思います。

投稿2018/07/10 05:07

hatena19

総合スコア33699

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

funmas

2018/07/12 02:05

ListViewの見出し追加機能自体は実現しています。 Listboxがセル指定のみになっていたので、ListViewで見出し追加を実現した次第です。 Accessの同期ソースコード拝見しました。 これは生半可な知識では難しいと感じました。 一旦この機能は見送って進めたいと思います。ありがとうございました!
guest

0

ListViewではやったことはないですが、
WinAPIを使ってマウスのスクロールをHook(フック)し、
スクロール処理をSendKeyで表現したことはあります。

ただ、難易度が非常に高くなりますし、
最悪、Excelが落ちたり、不安定になる事もあるので、
オススメはしません。

結論としては、不可能ではないけど、難関です。

投稿2018/07/10 02:11

ExcelVBAer

総合スコア1175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

funmas

2018/07/12 02:03

ListView自体にやはり機能は備わっておらず、 想像以上に難しいのですね・・・ 不安定で厳しいということがわかっただけで助かりました。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問