[[20090601182809]] 『ワークエリアへの表示』(ポン太) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ワークエリアへの表示』(ポン太)

各シート名をワークエリア(例 A1セルへの表示)に表示する事って出来るんでしょうか?

ワークエリアでプルダウンにてシート名を選択したら、選択したシートが表示されるようにしたいんですが・・・。
非常に難しいかと思いますが、いい方法がありますでしょうか?

各団体から送られてきた登録名簿を各シートとして追加して行き、シート1に集計表を作成したいんです。
で、団体名(シート名)を選択したら登録内容がわかるという風にしたいんです。


 例えばです。
 B2をプルダウンで選び、B2で選んだシートの内容をA3:E4に表示する方法です。

 シート1
     [A]      [B]    [C] [D] [E]
 [1] シート名 Sheet2
 [2]
 [3] あ       い     う  え  お
 [4] か       き     く  け  こ

 Sheet2
     [A]      [B]    [C] [D] [E]
 [1] あ       い     う  え  お
 [2] か       き     く  け  こ

 作業列を用います。

 シート1に下記を入力
 D1=MID(CELL("filename",INDIRECT("Sheet2!A1")),FIND("]",CELL("filename",INDIRECT("Sheet2!A1")),1)+1,LEN(CELL("filename",INDIRECT("Sheet2!A1")))-FIND("]",CELL("filename",INDIRECT("Sheet2!A1")),1))
 シート数に合わせてフィルダウン
 次に、Sheet2等を実際のシート名に変更

 B2はデータ>>入力規則より、リストを選び作成したD列の範囲を選択
 これで、プルダウンでシート名が選択可能

 A3=INDIRECT($B$1&"!"&CHAR(64+COLUMN())&ROW()-2)
 必要範囲をコピペ

 こんな感じでどうでしょうか?
 indirect関数を多用しているので重くなるかもしれませんが…

 (1or8) はずしていたらごめんなさい


 VBAで行う方法です。

 新規ブックにて(Sheet1〜Sheet5ぐらいシートを作って置いてください)、

 標準モジュール(module1)に

 '===============================================================================
 Option Explicit
 Sub 準備()
    Dim sht As Object
    Dim g0 As Long
    With Worksheets("sheet1")
       .Rows("1:1").RowHeight = 21
       .Columns("a:a").ColumnWidth = 21
       With .OLEObjects.Add(ClassType:="Forms.combobox.1", Link:=False _
               , DisplayAsIcon:=False, Left:=[a1].Left, Top:=[a1].Top, Width:=[a1].Width + 3, Height:= _
                 [a1].Height + 1.5)
          .Object.Style = 2
       End With
    End With
  End Sub

 上記、準備を実行してみてください。Sheet1のセルA1上にコンボボックスが作成されます。この
 コンボボックスでシート名を選択することで該当するシートにジャンプすることを考えます。

 別の標準モジュール(Module2)に作成したコンボボックスにシート名を設定するプロシジャー

 '================================================================================
 Sub set_combo()
    Dim g0 As Long
    Dim sht As Object
    With Worksheets("sheet1").OLEObjects("combobox1")
       Worksheets("sheet1").ev_stop = True
       .Object.Clear
       If ThisWorkbook.Sheets.Count > 1 Then
          ReDim shtnm(1 To ThisWorkbook.Sheets.Count - 1)
          For Each sht In ThisWorkbook.Sheets
             If sht.Name <> Worksheets("sheet1").Name Then
                shtnm(g0 + 1) = sht.Name
                g0 = g0 + 1
             End If
          Next
          .Object.List = shtnm()
          .Object.ListIndex = -1
       End If
       Worksheets("sheet1").ev_stop = False
    End With
 End Sub

 Sheet1のモジュールにコンボボックスでシート名を選択したときに発生するイベント

 '==========================================================================
 Option Explicit
 Public ev_stop As Boolean
 Private Sub ComboBox1_Change()
    Dim shtnm As Variant
    Dim awn As Window
    If Not ev_stop Then
       shtnm = OLEObjects("combobox1").Object.Text
       On Error Resume Next
       ThisWorkbook.Windows(2).Close
       On Error GoTo 0
       Set awn = ActiveWindow
       With ActiveWindow.NewWindow.Parent
          .Sheets(shtnm).Select
       End With
       awn.Activate
       Windows.Arrange ArrangeStyle:=xlVertical
    End If
 End Sub

 最後にThisworkbookのモジュールに
 ブックを開いた時や
 シートを追加した時や削除した時にコンボボックスを再構成するイベント

 '==================================================================
 Option Explicit
 Private sht As Object
 Private Sub Workbook_Open()
    set_combo
    Worksheets("sheet1").Select
 End Sub
 '==================================================================
 Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Dim delsht As Variant
    On Error Resume Next
    delsht = sht.Name
    If Err.Number <> 0 Then
       set_combo
    End If
    Set sht = Nothing
 End Sub
 '==================================================================
 Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
    Set sht = Sh
 End Sub
 '==================================================================
 Private Sub Workbook_NewSheet(ByVal Sh As Object)
    set_combo
 End Sub

 一度保存して閉じた後、再度開いて確認してください。

 ichinose

コメント返信:

[ 一覧(最新更新順) ]


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