• ベストアンサー

エクセルで目次から指定の文字列に移動させたい

エクセルで見積書を作成しています。 見積書は提出先の会社ごとにワークシートで分けて、同じ提出先の見積書にはそれぞれ見積書番号を付けています。 ただ、見積書の数が膨大に膨れ上がってきたので目次となるワークシートを作成して、その目次に見積書番号を列挙し、その見積書番号をクリックすると見積書につけてある見積書番号にジャンプできるようにしたいのです。 HYPERLINKではセルへの移動が出来ることは判ったのですが、見積書の変更等で行列が変更することがある為、あくまで目次の番号と見積書の番号をリンクさせたいのですが、どのようにやったら良いのか、どなたか教えて下さい。宜しくお願いします。

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

  • ベストアンサー
  • m_and_dmp
  • ベストアンサー率54% (976/1799)
回答No.6

No.5の追伸です。 マクロを使ったことがないとのことですので、少々捕捉します。 Excel 2003ですが、「ツール」→「マクロ」→「新しいマクロの記録」と進めると、マクロの名前と、マクロの保存先が表示されます。マクロの名前は「MacroX」になっていますので、好きな名前に変更します。(Xは1,2,3...) マクロの保存先は、他の人もこのシートを使うなら「作業中のブック」がいいです。 名前と保存先を決めたらOKして、たとえば文字列検索などの適当な作業をします。 作業が終わったら(終わらなくても、中断でもかまいません。)「記録の終了」ボタンを押します。ボタンがシートの上にない場合は、「ツール」→「マクロ」と進めると、「記録の終了」がありますので、それを選択してマクロの記録を終わらせて下さい。 これで自分が実行した作業がマクロとして記録されます。そのマクロを実行するには、「ツール」→「マクロ」→「マクロ」と進めると、マクロのリストが表示されますので、作ったマクロを選択して、「実行」ボタンを押します。 シート上に適当な図形を作ってそこにマクロを登録し、その図形をクリックして実行することもできます。 作ったマクロを編集したり、自分でコードを記述するときは、「ツール」→「マクロ」→「Visual Basic Editor」と進めます。 Visual Basic Editorが開き、左側の小窓に「VBAProject(作業中のブックのファイル名)の下に、「標準モジュール」があり、それを展開すると作ったマクロがありますので、選択します。そうすると右側の小窓にマクロコードが表示されます。 Sub xxxx()~End Subが一つのマクロです。 私の作ったサンプルマクロを試す場合は、サンプルマクロのSub FindY()~End Subまでをコピーして、既存のマクロのEnd Sub の後ろにペーストしてください。 ご検討を祈ります。

facelock
質問者

お礼

ご親切に有り難うございます。 何とかクリアできそうです。 本当に有り難うございます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (5)

  • m_and_dmp
  • ベストアンサー率54% (976/1799)
回答No.5

しばらくチェックしていなかったので回答が遅れました。 つぎのマクロを試して下さい。 目次シートに描画ツールで適当な図形を描画し、それを右クリックして、表示されるメニューから「マクロの登録」を選びます。するとマクロのリストが表示されますので、作ったマクロを選択してOKします。 使い方は、目次シートの見積書番号が記述されたセルを選択して、マクロを登録した図形をクリックします。 見積書が、複数のシートにまたがって作成されているものと想定して、ブック全体を検索するようにしてあります。 選択したセルに記述された見積書番号と同じ番号が見つかると、そのシートを選択し、見積書番号が記述されたセルを選択した状態でマクロが終わります。 見積書番号が見つからない場合は「N/A」とメッセージが表示されます。 10行目に Cells(RN, CN) = "" というコードがありますが、これは、目次シートの選択したセルに記述された見積書番号を一旦削除する(空白にする)コードです。 一旦空白にしないと、このセルに記述された番号を見て、見つかったと満足してしまい、目次シート以外のシートで検索してくれません。 他に良い解決方法があるかもしれませんので他の方の回答に期待します。 一旦削除した見積書番号は後ろから2行目の  Worksheets(SN).Cells(RN, CN) = IV で元の値に書き戻されますのでご心配なく。 12行目の WS.Select は必要のないコードです。マクロの進行にしたがって、つぎつぎと選択シートを変えていくのが分かるようにして、マクロがちゃんと仕事をしていることを確認するために入れてあります。動くことが確認されたら削除してください。 Sub FindY() Dim WS As Worksheet Dim SRCHED As Range Dim What As Variant SN = ActiveSheet.Name RN = Selection.Row CN = Selection.Column IV = Selection.Value What = IV Cells(RN, CN) = "" For Each WS In Worksheets WS.Select Set SRCHED = Cells.Find(What:=What, After:=ActiveCell, LookIn:=xlValues, _ LookAt:=xlPart) If Not SRCHED Is Nothing Then Exit For Next If SRCHED Is Nothing Then MsgBox "N/A" Else WS.Select: SRCHED.Activate Worksheets(SN).Cells(RN, CN) = IV End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.4

遅ればせながら補足回答の意味が分かりました。 行の挿入などに対応してリンク先のセルも自動的に移動させるなら、以下のような数式にしてください。 (Sheet3のE5セルに検索番号が入力されている場合) =HYPERLINK("[ファイル名.xls]Sheet3!"&ADDRESS(ROW(Sheet3!E5),COLUMN(Sheet3!E5)), Sheet3!E5)

全文を見る
すると、全ての回答が全文表示されます。
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.3

>教えて頂いた内容ですが、セル同士のリンクになると、見積内容に補足を加えたりすると見積書番号の場所(セル位置)が移動してしまう為に、随時ハイパーリンクを書き換えることになりそうです。あくまで文字列を探したいのですが・・・。 実際に提示した回答を試されたのでしょうか? 私の提示した式を入力しておけば、ハイパーリンク関数で表示されているセル(この見積書番号のセルにハイパーリンクされている)を自動的に探してきますので、そのままの数式で対応できると思うのですが、具体的にどのようなケースで不都合が発生するのでしょうか?

facelock
質問者

お礼

有り難うございます。 説明不足でした。 伝わりますでしょうか?

facelock
質問者

補足

説明不足で申し訳ありません。 教えていただいた内容でさせて頂いたのですが、実際に見積をしている中で、行の挿入や削除を頻繁に行います。 また、提出先ごとにワークシートで見積書を振り分け(つまり同じ提出先の見積は同じシートにどんどん保存されていきます)なので、見積書の見積書番号位置(セル)が見積書の書き換えで変わってしまいます。 上手く説明できずに申し訳ありません。

全文を見る
すると、全ての回答が全文表示されます。
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.2

目次のページに以下のようなHYPERLINK関数を設定してください。 =HYPERLINK("[ブック名.xls]シート名!見積書の番号が記載されているセル番地", 見積書の番号が記載されているセル番地) 例えば、ブック名がBook3で、Sheet3のE5セルに見積書の番号があるなら以下のような式になります。 =HYPERLINK("[Book3.xls]Sheet3!E5", Sheet3!E5) 上記のように見積書の番号は、目次に記載するのではなく、見積書の番号が記載されているセルを参照する形でHYPERLINK関数の第2引数として指定するのが簡単です。

facelock
質問者

お礼

早速のご回答有り難うございます。 教えて頂いた内容ですが、セル同士のリンクになると、見積内容に補足を加えたりすると見積書番号の場所(セル位置)が移動してしまう為に、随時ハイパーリンクを書き換えることになりそうです。あくまで文字列を探したいのですが・・・。

全文を見る
すると、全ての回答が全文表示されます。
  • m_and_dmp
  • ベストアンサー率54% (976/1799)
回答No.1

マクロのFind関数を使えばできます。ただし、セルをクリックではなく、「マクロボタンをクリック」になりますが。 目次の、任意の見積もり番号を記述したセルを選択して、CTL+Cにより内容をコピーし、検索ツールを起動して、検索する文字列にCTL+Vで先ほどコピーした内容を入力し、検索場所を「ブック」にして「次を検索」...この一連の作業の記録マクロを作成して、作成した記録マクロを編集してできあがり。マクロボタンを目次シートの適当なところに配置して、任意の見積番号を選択してマクロボタンをクリックすると目的の見積書につけてある見積書番号にジャンプする...というような方法でできるとおもいますのでチャレンジしてください。

facelock
質問者

お礼

ご回答有り難うございます。 教えて頂いた内容にチャレンジ中です・・・が、すみません、実はマクロを使ったことが無いんです。回答頂いた内容を順を追ってやっていますが、マクロボタンをクリックするという部分がわかりません。 マクロボタンを配置するやり方から教えて頂けないでしょうか。 宜しくお願いします。

facelock
質問者

補足

マクロのボタンをクリックするやり方ですが、ボタンクリックではなく、目次に記載した見積書番号をクリックしたら本見積に跳ぶようには出来ないでしょうか? 見積の量が非常に多いのでボタンの数が無限に増えていきます。 すみません、不勉強な上に言葉足らずでした。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルで目次を作りたい(hyperlink?

    エクセルで資料の目次を作ろうとしています。 資料は一つのファイル、一つのシートのみで構成しています。 シートの上のほうに目次を作り、クリックすると下のほうのデータへ飛ぶようにしたいと考えています。 一度Hyperlinkで実装してみましたが、資料を変更(挿入など)して行が変わった際にhyperlinkの飛び先が変更されないのでhyperlinkでは対応できないのかと考えています。 ネットで調べてもなかなか答えが見つかりません。 どなたか知恵をお貸しください。

  • EXCEL HYPERLINKジャンプ先を間接指定

    常に最初の空白セルへジャンプさせたくてHYPERLINK関数を使おうと思い、 ジャンプ先を間接指定したいのですがその方法を教えてください。 R1C1形式で記述します。  R1C1=ADDRESS(5+COUNTA(R6C9:R36C9),9,1,FALSE) R1C1はジャンプ先であるR33C9の計算結果が出ています。 R1C2をクリックするとR33C9へジャンプして欲しいのですが、  R1C2=HYPERLINK("#R1C1", "入力セルへジャンプ")  R1C2=HYPERLINK("#INDEX(R1C1,1,1)", "入力セルへジャンプ") などではR1C1へジャンプしてしまいます。間接してするにはどうしたら良いでしょうか。 それとも外に、1クリックでジャンプさせる方法がありますか。

  • EXCEL HYPERLINKジャンプ先の間接指定

    常に最初の空白セルへジャンプさせたくて、 HYPERLINK関数を使いジャンプ先を間接指定したいのですが、 その方法を教えてください。 R1C1形式で記述します。  R1C1=ADDRESS(5+COUNTA(R6C9:R36C9),9,1,FALSE) R1C1はジャンプ先であるR33C9の計算結果が出ています。 R1C2をクリックするとR33C9へジャンプして欲しいのですが、  R1C2=HYPERLINK("#R1C1", "入力セルへジャンプ")  R1C2=HYPERLINK("#INDEX(R1C1,1,1)", "入力セルへジャンプ") などではR1C1へジャンプしてしまいます。間接してするにはどうしたら良いでしょうか。 それとも外に、1クリックでジャンプさせる方法がありますか。

  • EXCEL:目次からワークシートを選択

    エクセルのワークシートに「1」「2」「3」・・・といった名前をつけておいて 目次を作ったワークシートから「3」を選択したら3のワークシートへ飛ぶ といった操作がしたいのですが、どうやればいいんでしょうか? マクロを作成すればいいんでしょうか・・・作り方わかんないです。 簡単にできることであるなら教えてください。 よろしくお願いします。

  • ワードでの目次作成

    ワードで目次を作成したいのですが、 参考にしているテンプレートはあるのですが どのように設定されているのかわかりません。 私がやりたいのは 1.○○○○・・・・1 1-1.BBBBBB・・・2 2.××××・・・・3 というもので、1,2,3のページ番号を クリックするとそのページにジャンプできるという ものを作成したいです。 色々な方法が有ると思いますが教えて下さい。 お願いします。

  • エクセルシートのウィンドウ枠の固定について

    ■エクセルのファイルに次のマクロを設定し、ファイルを開くたびに「目次」のシートが表示されるようにします。 Private Sub Workbook_Open() Sheets("目次").Activate End Sub ■この目次のシートに目次を作成し、それぞれの目的のシートにハイパーリンクでジャンプするようにします。 「目次」のシートのそれぞれのセルに、目的のシートのセルA1をハイパーリンクする。 ■目的のシートでウィンドウ枠の固定を行う(6行目) --------------- このような設定下で、このファイルを新たに開くと、必ず「目次」のシートが表示され、目次の中から目的のシートを表示したセルのハイパーリンクをクリックすると、目的のシートにジャンプします。 ところが、ウィンドウ枠(6行目)が固定してあり、普通前回閉じた行から表示されるはずですが、 たとえば、 事例(A) 1 2 3 4 5 --- 100 101 102 ですが、実際に新たにファイルを開いて、目次からジャンプすると、 事例(B) 1 2 3 4 5 ---- 6 7 8 9 となって枠の設定のない状態と同じ状態で表示されます。 これを、前回閉じた事例(A)の状態で再表示されるようにしたいのですが、何が悪くて枠の固定が当初の状態に戻るのかわかりません。 何かの設定が不適切なのだと思います。 教えてください。

  • エクセル・ハイパーリンクの質問

    よろしくお願いします。 仕様環境 WinXP/SP2 エクセル2002 エクセルを使ってマニュアルを作っているのですが、 目次シート(sheet)を作り、各項目にハイパーリンクを貼って 他のsheet(マニュアル)に飛ぶようにしています。 ここで2つ問題があります。 1つめは、ハイパーリンクでジャンプする時、「クリック」すると目的の sheet(マニュアル)のセルにジャンプします。 それを「クリック」ではなく「ダブルクリック」でジャンプするように したいのですがどうすればよいのでしょうか? 「クリック」だとちょっと触っただけでも飛んでしまうので、 一拍空けたいのです。 2つめはハイパーリンクでsheet(マニュアル)のセルにジャンプした時、 必ずその目的のセルを一番左上にもってくるようにしたいのですが、 できません。 マクロで記録したりもしたのですが、最初の1回目はできるのですが、 他の操作を行ったりして、改めて行うと必ずしも一番左上になりません。 具体的にいうと例えばセル番号A101を一番左上にしたいのですが、 左下に表示されてしまいます。 ハイパーリンクのジャンプはうまくいくもののとんだ先が、 左下に表示されてしまうのは見栄えもよくありません。 どうすれば、常に一番左上に表示されるようになるのでしょうか? ご指導宜しくお願いします。 PS 添付ファイルを貼り付けました、 私の説明がわかりづらい場合もありますので、ご参照頂ければと思います。

  • 文字列検索の参照文字列の指定について

    Excelでセルに任意の文字列をペーストします。そのセルは別のブックにリンクしているのでペーストする度にリンク先のセルでは文字列が更新されます。リンク先のブックにはワークシートが10あっていづれかのシートのA列にその文字列がある事になっています。更新された文字列を検索する作業を繰り返すのでマクロで組み込もうと思ったのですがFIND関数にしても、VBでCell.Find(What:=....と書くにも参照する文字列を直接指定してやらないと動きません。参照する文字列が相対的に変化するので「特定のセルの中に入力された文字列」を参照してブック内を検索したいということなのですが、実現するにはどうしたらようでしょうか?

  • word 目次フレームの作成

    Word2002を使用しています。 見出し1,2,3まである本文があり、これを見出し1と2の目次フレームがついた状態にしたいのですが、うまくいきません。 (A)単純に「目次フレームの作成」にすると、必要の無い見出し3まで拾ってきてしまいます。設定を後から変更できれば良いのですが、その方法がわかりません。 (B)先にフレーム付きの新規文書を作り、mainフレームに本文をリンク・表示はさせられますが、leftフレームに目次を入れる方法がわかりません。 (A)、(B)あるいはその他の方法でうまく作成できる方法を教えてください。 なお目次の項目(leftフレーム)をクリックすると、本文の該当箇所(mainフレーム)までジャンプもさせたいです。 よろしくお願いします。

  • エクセルで指定のセルへ簡単にジャンプできる方法

    教えてください。 エクセルの表入力で、あるセル(たとえばA1)に1の数字が入っていたとして その数字(若しくは文字)で次に入力するセルがたとえばA12のセルとした場合 あるセル(たとえばA2)へカーソルを持っていくと(又はクリックしたとき) 指定のA12へカーソルがジャンプするような方法がないでしょうか? (又はA2へ1を入力したらA12へジャンプする方法でもいいのですが) ハイパーリンクで実際出来たのですが、セル数が多くてそれぞれちがった ジャンプ先を指定する場合、コピー貼付けをすると1個1個ジャンプ先を 修正しなければならないと言った手間がかかりました。簡単に 指定セルへジャンプさせる方法、関数のようにコピーした場合セル番号が 変更され修正しなくてもいいような方法がないでしょうか?

専門家に質問してみよう