[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ダウンリストでハイパーリンク』(さとちゃん)
お世話様です。ドロップダウンリストにより、シート内の特定の場所にとびたいんです。シート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の設定「データ」「入力規則」で
B1の設定「データ」「入力規則」で
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列に連続してないんです。 こういうことは「先に言ってよ」(笑) ネタの後出しは回答者の方も二度手間三度手間になってしまいます。 スレッドも長くなって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.