[[20040503233656]] 『ダウンリストでハイパーリンク』(さとちゃん) ページの最後に飛ぶ

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

 

『ダウンリストでハイパーリンク』(さとちゃん)

お世話様です。ドロップダウンリストにより、シート内の特定の場所にとびたいんです。シート1を1月とし12月まで作り、その中の2月11日に飛ぶ。この2月と11日をダウンリストにしたいんです。どうか宜しくお願いします。

Excel2000
WindowsXP


 ドロップダウンリストとはデザインモードで作ったコンボボックスでよろしいか?
 新しいブックを用意してください。
 以下の作業を再確認しながら進めて下さい。

 1)1月から12月までのシート(全角で)を作成して下さい。
 2)1月のシートにComboBoxを2個作ってデザインモードを終了します。
 3)[Alt]+[F11]でVBEを開きます。
 4)1月のシートをWクリックして
 5)ComboBox1_Change と2を('=========で囲んだ範囲)をコピペして下さい。
 6)「挿入」→「標準モジュール」を選択。
 7)そこにauto_openをコピペします。
 8)[Alt]+[Q]でエクセルに戻ります。
 9)[Alt]+[F8]でauto_openを実行して下さい。これは1回だけで結構です。
 あとはこのブックを開く都度勝手に実行するようになっております。

 このコードはコンボで選択した日付を検索してそのシートのB列の日付行(セルの行
 と日付を同じに設定してありますから、都合の良いように変更して下さい)に飛びます
 コンボをクリックして試して下さい。
     (弥太郎)
 '1月にコピーする
 '=================================
 Dim day_s As Integer
 Dim manth_s As Integer
 '---------------------------------
 Private Sub ComboBox1_Change()
    Dim i As Integer, f As Integer

    With ComboBox1
        For i = 0 To 11
            If .ListIndex = i Then
                    manth_s = i + 1
                    Exit For
            End If
        Next i
    End With
    With ComboBox2
        .Clear
        Select Case manth_s
            Case 1, 3, 5, 7, 8, 10, 12
                f = 31
            Case 4, 6, 9, 11
                f = 30
            Case Else
                If Year(Now()) Mod 4 = 0 Then
                    f = 29
                Else
                    f = 28
                End If
        End Select
        For i = 1 To f
            .AddItem i & "日"
        Next i
    End With
 End Sub
 '---------------------------------
 Private Sub ComboBox2_Change()
    Dim i As Integer
    Dim data As String
    With ComboBox2
        If .ListIndex = -1 Then Exit Sub
        For i = 0 To 30

            If .ListIndex = i Then
                day_s = i + 1
                Exit For
            End If
        Next i
    End With
        data = StrConv(manth_s, vbWide) & "月"
        With Worksheets(data)
            Worksheets(data).Select
            Worksheets(data).Range("b" & day_s).Select
        End With
 End Sub
 '==========================================
 '標準モジュールにコピーする
 '------------------------------------
 Sub auto_open()
    Dim i As Integer

    Worksheets("1月").Activate
    With Worksheets("1月").ComboBox1
        For i = 1 To 12
            .AddItem i & "月"
        Next i
    End With

 End Sub


 入力規則のドロップダウンリストで月日を選択して即ジャンプ
というと、弥太郎さんご提示のようなVBAプログラムになります。
「選択して即ジャンプ」ではなくて、リストから選択して
ハイパーリンクを作成し、そのハイパーリンクをクリックで
ジャンプという手順なら、エクセルの通常機能の範疇で納まります。
 
設定の前提
1月から12月というシートが存在する
上記のシートにはそれぞれA1からAnまで日付が連続して入力されている
                      〜〜〜〜〜〜〜〜〜〜〜 
ジャンプもとのシート(シート名は任意)
A1にシート名(月)選択のプルダウンリスト、
B1に日付選択のプルダウンリスト、
C1へハイパーリンクを生成します。
次善に「1月」から「12月」までのシート名リストをこのシートに作成しておきます。
仮に$F$1:$F$12の範囲とします。
 
A1の設定「データ」「入力規則」で

入力値の種類
「リスト」
元の値
次の数式を入力 =$F$1:$F$12

B1の設定「データ」「入力規則」で

入力値の種類
「リスト」
元の値
次の数式を入力 =INDIRECT($A$1&"!A1:A"&COUNTA(INDIRECT($A$1&"!A:A")))

C1の数式

=HYPERLINK("[Book1.xls]"&$A$1&"!"&ADDRESS(MATCH($B$1,INDIRECT($A$1&"!A:A"),FALSE),1,1,1),A1&B1)

 C1のBook1.xlsは実際のブック名に変更してください。
設定したブックは一度は保存されている必要があります。
A1は「月(シート名)」のリスト$F$1:$F$12からリスト選択します。
B1はA1のシート名から該当するシートの「日付」
C1はA1、B1の値から該当セルへのハイパーリンクを作成します。
日付が連続して入力されていない時は日付のリストを作成してB1の入力規則の
もとの値としてリスト指定する必要があります
(KAMIYA)


 ご回答ありがとうございます。今回ダウンリストにより選んであげるセルは連続していないんです。日誌の用紙がありまして(会社などでいろいろ書式はちがいますが)それを1つのシート内に31枚書いてあるようにしています。1〜12月までのシートは飛ぶ位置は一緒です。でも1列に連続してないんです。出来るだけ軽くつくりたいのでエクセルの機能で行きたいです。10Mにもなりファイル自体もおおきいですが、WinRAR等で圧縮し、メール等で送る事ができれば幸いです。いい所までできているんですけど・・・。むずかしいですねやっぱり。もっとこのページで勉強していきたいです。何卒ご回答宜しくお願いします。
 それと、作業内容やいろいろな入力フォームもつくりたいんです。唐突すぎてわからねーよとか、こんなのある等も書いていただければさいわいです。重ねて宜しくお願いいたします。 
(さとちゃん)


 >ダウンリストにより選んであげるセルは連続していないんです。
 >でも1列に連続してないんです。
 
こういうことは「先に言ってよ」(笑)
ネタの後出しは回答者の方も二度手間三度手間になってしまいます。
スレッドも長くなってROMの人も疲れます。(そんなことはないか?)
ただ、
 
 >1〜12月までのシートは飛ぶ位置は一緒です。
 
ジャンプする位置が決まっているのであれば、ジャンプするセルの
アドレスのリストを作成してやればよいだけのこと。
ハイパーリンク関数でもVBAでも同じことです。
 
 >出来るだけ軽くつくりたいのでエクセルの機能で行きたいです。
 
VBAも「エクセルの機能」なんですが、VBAだから重くなる
ということはないです。関数を多用したブックよりもVBA実行時
だけ計算をするブックのほうが断然軽い場合もありえます。
運用方法に口を挟む立場ではありませんが、重くなる原因は一年
365日分の日誌の入力・表示欄を作ってしまっていることですから・・・。
 
まあ、そんなことはさておき、HYPERLINK関数での方法の場合の手直し。
下記のようなリストを作成します。とりあえず、
FGH列へ作成しています。H列は各シートへのジャンプ位置を
入力してありますが、テストのため単純にしてあります。
F	G	H
1月	1日	A1
2月	2日	A2
3月	3日	A3
4月	4日	A4
5月	5日	A5
6月	6日	A6
7月	7日	A7
8月	8日	A8
9月	9日	A9
10月	10日	A10
11月	11日	A11
12月	12日	A12
	13日	A13
	14日	A14
	15日	A15
	16日	A16
	17日	A17
	18日	A18
	19日	A19
	20日	A20
	21日	A21
	22日	A22
	23日	A23
	24日	A24
	25日	A25
	26日	A26
	27日	A27
	28日	A28
	29日	A29
	30日	A30
	31日	A31
 
前掲、A1の入力規則はそのまま。B1の数式を差し替えます。
=INDIRECT("G1:G"&DAY(DATE(YEAR(NOW()),--(SUBSTITUTE(A1,"月",""))+1,0)))
C1のHYPERLINK関数も下記に差し替えます。
=HYPERLINK("[Book1.xls]"&$A$1&"!"&VLOOKUP(B1,G1:H31,2,FALSE),A1&B1)
 
変更は以上。あとは(さとちゃん)さんが数式のブック名やらセルの位置などを
そちらのブックの状態に合わせて編集し、ジャンプするセルのアドレスのリストを
完成させるだけです。
(KAMIYA)


 KAMIYA様ただ今出来ました。うれぴーーー。ありがとうございます。
もう一ついいでしょうか。ご回答お願いいたします。
  =HYPERLINK("[Book1.xls]"&$A$1&"!"&VLOOKUP(B1,G1:H31,2,FALSE),A1&B1)
の中のBook1.xlsは保存時のファイルを指定していますよね。で、日誌なのですが、
工事現場用で工事が完結しますと次の現場と言うように遊牧民族的に移動しています。
このBook1.xlsの部分を保存したファイル名に自動で変更するようにはできませんでしょうか。
むしがいいはなしでしたでしょうか。お知恵拝借お願いいたします。
でも時間かかったけど、理解できてうれしいです。

さとちゃん


 Beautiful response
      yata


 幸いなことに、ブック名を取得する関数はこの学校にいっぱい落ちています。(笑)
[ ]の部分から取得すればいいので、次のような式になります。

=MID(CELL("filename",A1),FIND("[",CELL("filename",A1),1),FIND("]",CELL("filename",A1),1)-FIND("[",CELL("filename",A1),1)+1)

参考
[[20030712223610]] 『ブック名をセルに反映』(たけ)

[[20030715161338]] 『ブック名の一部をセルに反映させたい』(こおっさん)

 この式をそのままHYPERLINK関数へ組み込んで、

=HYPERLINK(MID(CELL("filename",A1),FIND("[",CELL("filename",A1),1),FIND("]",CELL("filename",A1),1)-FIND("[",CELL("filename",A1),1)+1)
&$A$1&"!"&VLOOKUP(B1,G1:H31,2,FALSE),A1&B1)

 と長い式にするか、別セル(たとえばD1)でいったんブック名を取得して

=HYPERLINK($D$1&$A$1&"!"&VLOOKUP(B1,G1:H31,2,FALSE),A1&B1)

 のようにしてみるか、ここらへんは(さとちゃん)さんの選択ですね。
(KAMIYA)


 KAMIYAさん、早速の御回答ありがとうございます。うれしいです。
今晩かえって試して見ます。また結果を書き込みいれます。
(さとちゃん)

コメント返信:

[ 一覧(最新更新順) ]


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