Excel VBAでスクロールバーの応用方法

このQ&Aのポイント
  • EXCEL VBAで作成するスクロールバーについて教えていただきたいことがあります。Sheets("Bar")にスクロールバーを設置し、Sheets("List")のA列のデータをSheets("Bar")のRange("A1")に表示し、B列のデータをRange("B1")に表示する方法を教えてください。
  • また、Sheets("List")にオートフィルタを設定してデータを抽出した場合、抽出されたデータだけをSheets("Bar")のスクロールバーで表示させることは可能でしょうか。
  • スクロールバーをスクロールすると、Range("A1")には抽出されたデータのA列の値が表示され、Range("B1")には抽出されたデータのB列の値が表示されるようにしたいです。
回答を見る
  • ベストアンサー

Excel VBAで作成するスクロールバーの応用について

EXCEL VBAで作成するたスクロールバーについて教えていただきたいことがあります。 Sheets("Bar")にスクロールバーを設置し、 Sheets("List")のA列のデータをSheets("Bar")のRange("A1")に表示 Sheets("List")のB列のデータをSheets("Bar")のRange("B1")に表示 この場合、Sheets("List")にオートフィルタを設定してデータを抽出したとして、 抽出されたデータだけをSheets("Bar")のスクロールバーで表示させることは可能でしょうか。   A列   B列 1行:東日本  青森 2行:西日本  大阪 3行:東日本  茨城 4行:西日本  山口 5行:東日本  東京 6行:西日本  福岡 オートフィルタを設定し、A列を”東日本で抽出” 1行:東日本  青森 3行:東日本  茨城 5行:東日本  東京 Sheets("Bar")のスクロールバーをスクロールすると Range("A1")に"東日本","東日本","東日本" Range("B1")に"青森","茨城","東京" と表示される。 そもそもそんなことが出来るのかどうかも含めて、 どんな式でやったらいいのかも私のスキルでは全く思い浮かびません。 よろしくお願いいたします。

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

  • ベストアンサー
  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.1

どうしてもそのような動作をしなければいけないならやりようが無いわけではないが、たぶん、そんな動作は想定していないので、苦し紛れ(といっても目的の結果が得られるようにコードを書くだけだが)のプログラムになるんじゃないか。 たいていの場合、苦し紛れのことをしなくても、目的の動作・機能を得られるのでめんどくさいことはしない。

takohasisa
質問者

お礼

わかりました。もう少し検討します。ありがとうございました。

その他の回答 (1)

  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.2

・元々スクロールバーでやるような処理ではないですが、やろうと思えばできます。 スクロールバーは大雑把に・視覚的に値を制御するときに用いるものです。そのような処理はListBoxやConboBoxで行うべきものですが、そもそもオートフィルターで制御するという前提があるなら、そのままオートフィルターを使えばよいだけです。難しく考える必要はありません。 ・式ではなくVBAでコードを書く必要があります。 ・スキルが無いのなら、その様な変則的な処理をいきなり行うのではなく、もっと簡単なところからはじめるべきです。 どういうところが分からないのかも分からないので、具体的にコードを書いた上で再度質問してみてください。

関連するQ&A

  • EXCEL VBAで作成したスクロールバーの不具合を修正したいのですが

    ちょっと言葉だと説明しにくいのですが、教えていただきたいことがあります。 EXCEL VBAでスクロールバーを作成したのですが、 スクロールバーの上部1/5程度で全部のデータが終わってしまいます。 データ数に合わせて、スクロールした一番最後に最後のデータが来るように修正することは可能でしょうか。 自分で色々試してみましたが原因がさっぱりわかりませんでした。 作成したマクロは以下のとおりです。 *シート「一覧」のA列~D列×3000行のデータを入力  シート「リスト」にスクロールバーを設置 Private Sub ScrollBar1_Change() currow = ScrollBar1.Value Call smpscrollbar End Sub Private Sub Workbook_Open() currow = 3 With Sheets("リスト").ScrollBar1 .Min = 3 .Max = Sheets("一覧").Range("A1").CurrentRegion.Rows.Count End With Call smpscrollbar End Sub Sub smpscrollbar() With Sheets("リスト") .Range("B1").Value = Sheets("一覧").Range("A" & currow).Value .Range("E1").Value = Sheets("一覧").Range("B" & currow).Value .Range("I1").Value = Sheets("一覧").Range("C" & currow).Value .Range("N1").Value = Sheets("一覧").Range("D" & currow).Value End With End Sub

  • VBAでスクロールバーを動かしても値が変わらない

    図のようなスクロールバーを動かして、それぞれの値と、A4のセルの色が変わるものを作りたいのです。 プログラムは、 Sub スクロール1_Change() R = Range("C2").Value G = Range("D2").Value B = Range("E2").Value Range("A4").Interior.Color = RGB(R, G, B) End Sub Sub スクロール2_Change() R = Range("C2").Value G = Range("D2").Value B = Range("E2").Value Range("A4").Interior.Color = RGB(R, G, B) End Sub Sub スクロール3_Change() R = Range("C2").Value G = Range("D2").Value B = Range("E2").Value Range("A4").Interior.Color = RGB(R, G, B) End Sub ですが、スクロールバーに関連付けられていないようです。基本ですみませんが、関連付けるにはどうすればいいのでしょうか。

  • フィルタオプション設定をVBAで処理したものに、さらに連番(ナンバリング)もされるようにVBAを作成し直したい。

    よろしくおねがいします。 フィルタオプション設定を下記のようにVBAにて既に作成したものがあります。(ボタンをクリックするだけで、データが抽出されるようにしてあります。) Sub Macro1() Dim myRow1 As Long, myRow2 As Long myRow1 = Sheets("職員名簿").Range("B65536").End(xlUp).Row myRow2 = Sheets("東京都").Range("B65536").End(xlUp).Row If myRow2 >= 5 Then Sheets("東京都").Range("B5:T" & myRow2).ClearContents End If Sheets("職員名簿").Range("A2:S" & myRow1).AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Sheets("データ").Range("A2:F32"), CopyToRange:=Range("B5:T5"), _ Unique:=False End Sub この実行時に、A列に抽出されたデータの件数を自動的に1からの連番にて入る(ナンバリングされる)ように、VBAを追加作成し直したいのですが、 どうしたら良いか分からず、教えていただきたいと思います。 既に作成してある、VBAを実行した後に、A列のセル一つ一つに、 =SUBTOTAL(3,B$6:B6) などのように、関数を入れて抽出した行分、コピーしていけばいいのではないか。とおっしゃるかもしれませんが、 作成は私の仕事なのですが、実際これを使っていくのは、私ではなく上司なので(エクセル超初心者で使いこなせない)、 データ抽出と同時に、A列に番号が連番されていくように、 ボタン一つで、データ抽出とナンバリングができるように、 VBAを追加作成し直したいのです。 どういう命令文を追加すればよろしいのでしょうか。 よろしくおねがいいたします。

  • エクセルVBAのフィルター機能について

    こんにちわ! エクセルのVBAを使って複数の条件を入力すると結果シートへ吐き出すプログラムを組み込んでいますが、下から五行目のCriteriaRange:=Sheets("検索").Range("A1:R2"), _の.Range("A1:R2")を変更した際に.Range("A1:R3")にすれば条件を指定できるのですがその状態で条件を一つだけ入力し抽出すると抽出できずすべてのデーターが吐き出されてしまいます。 ただし二行抽出データーを埋めるとそのとおりに抽出され結果シートへ吐き出されます。 抽出する条件を入力する際、一つの時もあれば二つの時もあります。そういった事を回避するにはどうすればいいでしょうか? Sub OutputRec() Application.ScreenUpdating = False Sheets("結果").Activate Cells.Clear Sheets("検索").Range("A1").Value = Sheets("DATA").Range("A1").Value Sheets("検索").Range("B1").Value = Sheets("DATA").Range("B1").Value Sheets("検索").Range("C1").Value = Sheets("DATA").Range("C1").Value Sheets("検索").Range("D1").Value = Sheets("DATA").Range("D1").Value Sheets("検索").Range("E1").Value = Sheets("DATA").Range("E1").Value Sheets("検索").Range("F1").Value = Sheets("DATA").Range("F1").Value Sheets("検索").Range("G1").Value = Sheets("DATA").Range("G1").Value Sheets("検索").Range("H1").Value = Sheets("DATA").Range("H1").Value Sheets("検索").Range("I1").Value = Sheets("DATA").Range("I1").Value Sheets("検索").Range("J1").Value = Sheets("DATA").Range("J1").Value Sheets("検索").Range("K1").Value = Sheets("DATA").Range("K1").Value Sheets("検索").Range("L1").Value = Sheets("DATA").Range("L1").Value Sheets("検索").Range("M1").Value = Sheets("DATA").Range("M1").Value Sheets("検索").Range("N1").Value = Sheets("DATA").Range("N1").Value Sheets("検索").Range("O1").Value = Sheets("DATA").Range("O1").Value Sheets("検索").Range("P1").Value = Sheets("DATA").Range("P1").Value Sheets("検索").Range("Q1").Value = Sheets("DATA").Range("Q1").Value Sheets("検索").Range("R1").Value = Sheets("DATA").Range("R1").Value Sheets("DATA").Range("A1").CurrentRegion.AdvancedFilter _ Action:=xlFilterCopy, _ CriteriaRange:=Sheets("検索").Range("A1:R2"), _ CopyToRange:=Sheets("結果").Range("A1"), _ Unique:=False Sheets("結果").Columns("A:R").AutoFit Application.ScreenUpdating = True End Sub

  • Excelスクロールバーの表示について

    久し振りに質問をさせて頂きます。 Excelシートのスクロールバーの事なのですが、以前 Win 98 SE でExcel2000 を使っていました。今でも使えます。上下スクロールバー 及び左右スクロールバーをドラッグすると、行番号(1・2・3)及び 列番号(A・B・C)が表示されたのですが、Win XP HOME ED Excel2003 を 昨年7月から使っているのですが、行番号(1・2・3)及び列番号(A・B・C)が表示されません。特に不便さは感じないのですが、ウインドウを整列させて作業をする時に表示された方が便利な様な気がするのですが、設定で出来るものなのでしょうか。こんな質問をするのは恥ずかしいのですが、ご存知の方が いらっしゃいましたら是非、御教授 お願い致します。

  • エクセルマクロVBAについて

    エクセルマクロVBAについて、こんなこと出来ますか? ■A列からAS列の1行目にヘッダー情報をもつデータベース ■A列に担当者名 ■A列にオートフィルタをかけて各担当ごとにデータを抽出したものを別シートに貼り付けて自動印刷したい ■担当者は都度変わるので、Criteria1:="xxx"というようには直接書けない(担当名を自動で抽出したい) ■担当者の数も都度変わる ■補足 一行のデータを特定の雛形に転記する必要があるので別シートに出したいです ちなみに、アナログで記録したコードは以下です。 Sub test1() Sheets("データ抽出シート").Select ActiveSheet.Range("$A$1:$AS$300").AutoFilter Field:=1, Criteria1:="山田" Range("$A$1:$AS$300").Select Selection.Copy Sheets("抽出データ貼付シート").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("データ抽出シート").Select ActiveSheet.Range("$A$1:$AS$300").AutoFilter Field:=1, Criteria1:="斉藤" Range("$A$1:$AS$300").Select Selection.Copy Sheets("抽出データ貼付シート").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("データ抽出シート").Select ActiveSheet.Range("$A$1:$AS$300").AutoFilter Field:=1, Criteria1:="田中" Range("$A$1:$AS$300").Select Selection.Copy Sheets("抽出データ貼付シート").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveWindow.SelectedSheets.PrintOut Copies:=1 End Sub これ、担当者の抽出を自動でなんとかなりませんか?

  • エクセルVBAで不思議な現象が!

    エクセル2010です。 理解できない現象で困っています。 Sheets("DATA")の.Range("B1:S1")には、B1が1、C1が2というように1から18までの数値が連番に入っています。S1には18です。 以下のVBAを走らせると、普通はSheets("test")のRange("B26:S26")にも1から18までの数値が連番に入ります。 Sub TEST() Dim ws As Worksheet Dim lr As Long Set ws = ThisWorkbook.Sheets("DATA") lr = 25 With ThisWorkbook.Sheets("test") .Range("B1:S1").Offset(lr).Value = ws.Range("B1:S1").Value 'データ転記 End With End Sub ところが、このSheets("test")の20行目までデータが入っていて、オートフィルターがかかっているとします。(条件はG列の空白だけ抽出) そして、さらにC列以降のどれかの列が非表示になっていると、その非表示列以降のセルはすべて1になってしまいます! なぜ、このような不思議な結果となるのか理解できません。 やむを得ず、オートフィルタをいったん解除し、列を再表示してから転記するようにしていますが、原因がわかりません。 どなたかご教示いただけませんでしょうか?

  • VBAでエラー時にメッセージを表示したい

    こんばんわ! エクセルのVBAについて質問です。 以下のように組み込みDATAシートからフィルターをかけて抽出シートへ結果を表示するようになっていますが、DATAシートにデーターがない状態でするとエラーになりますがその際にDATAシートにデーターが入っていませんとメッセージボックスが出る様にするにはどうすればいいでしょうか? まだまだ勉強中の身ですので教えて頂ければ有難いです。 お手数ですが宜しくお願いします。 Sub 抽出() Application.ScreenUpdating = False Sheets("抽出").Activate Cells.Clear Sheets("抽出").Range("A1").Value = Sheets("DATA").Range("A2").Value Sheets("抽出").Range("B1").Value = Sheets("DATA").Range("B2").Value Sheets("抽出").Range("C1").Value = Sheets("DATA").Range("C2").Value Sheets("抽出").Range("D1").Value = Sheets("DATA").Range("D2").Value Sheets("DATA").Range("A3").CurrentRegion.AdvancedFilter _ Action:=xlFilterCopy, _ CriteriaRange:=Sheets("検索").Range("A1:D2"), _ CopyToRange:=Sheets("抽出").Range("A1"), _ Unique:=False Sheets("抽出").Columns("A:D").AutoFit Application.ScreenUpdating = True End Sub

  • エクセルのスクロールバー

    3000行程度のエクセルシートを操作していたのですが、 いつもは右にあるスクロールバーが、 3000行の部分を最終行として対応していました。 ところが、1回操作をあやまってしまったようで、 現在は65535行目が最終行になってしまいました。 戻すやり方はありますか? つまり3000行以降の無データの部分に関して 右のスクロールバーを対応させないということです。 わかる方がいましたらお教えください。

  • EXCELで列単位でスクロールさせたい

    20列×1000行のセルがあります。4列ごとのデータを1まとめとしてスクロールさせたいのですが、4列×1000行毎にスクロールバーをつけて4列のみスクロールさせられるような事は可能でしょうか? よろしくお願いします。

専門家に質問してみよう