• 締切済み

セルの値でのファイル名保管、ハイパーリンクの件

※4/22に質問しましたが、カテ(Office)も違うのか・・・ 全くアドバイス頂けなかったので、 再度投稿します。 いつもお世話になっています。 EXCELマクロの自動記録で、 毎回ローカルディスクの決められた場所(固定)に 作成・保管した見積書のEXCELファイルを、 複数のメンバーが共有する見積台帳を開いて、ボタンを押すことにより、 最新の見積書番号を取得して、見積書の各項目を、 見積台帳に転記するまでは出来ました。 このあと、最終行にセルが行った状態で、 その前の操作で別のセルから取得した値で、 決められた場所にそのファイル名(セルから取得)で保存し、 次に台帳の明細のファイル名のセルからハイパーリンクを付けたいのです。 ※最終行にカーソールを移動(値もコピー)は、 ここでやり方を見つけています。 どのようなVBAを記述すれば良いでしょか? 記録したマクロに追加するとか位の技術しかなく、 自動記録では右クリックの操作が出来ないようですので、 宜しくお願い致します。 ※EXCEL2000です。

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.4

> WORK = ActiveCell > file$ = WORK > ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=file$ & ".xls", _ > TextToDisplay:=file$ ActiveCellはRangeオブジェクトを返すともいます RangeオブジェクトのデフォルトプロパティがValueだったと思います WORKがバリアント型なら セルに設定された数式の計算結果(日付なら Date型、数値ならDouble型など)が代入されます file$は文字型なので 取得したデータの既定の文字列表現になるでしょう 今回のように『対象が文字列だ』とはっきりしているなら別変数を用意するまでも無いと思います

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

もう既回答で解決してるのかもしれません。そうそうあるケースではないので、私なりにやってみました。 ーー ブック名 りンクテスト.xls そのSheet1 のA1に C:\Documents and Settings\XXXX\My Documents\DSUM関数5.xls と文字列を入れています。 標準モジュールModule1に Sub trst01() x = Range("A1") n = ActiveWorkbook.Name MsgBox n '---- Workbooks.Open x n = ActiveWorkbook.Name MsgBox n Set sh = ActiveWorkbook.Sheets("Sheet2") sh.Hyperlinks.Add Anchor:=Range("A15"), _ Address:="C:\Documents and Settings\OTO\My Documents\リンクテスト.xls", _ TextToDisplay:="元のシート" 'Address:="C:\Documents and Settings\OTO\My Documents\[リンクテスト.xls]Sheet1!A1", _ 'Address:="リンクテスト.xls", _ '[リンクテスト.xls]のように[]で囲まないこと 'Addressには、ファイル名を指定する 'そのファイルのアクチブシート、アクチブセルに飛ぶ。 End Sub これで実行します。 実行前はDSUM関数5.xlsはまだ開いてないです。 ーー 実行後は DSUM関数5.xls の Sheet2 の A15セルに ハイパーリンクが設定され、そのA15をクリックすると りンクテスト.xlsに飛びました。 コードの注釈は私の失敗も入れて書いて見ました。 これで質問課題に役に立ちませんか。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

『管理台帳へ』か『管理台帳から』は大差ないでしょ ・・・ ハイパーリンクを設定する対象を変えればいいだけなのですから 台帳と個別ファイルが同じフォルダーにあるなら Sub MakeLink(sh as WorkSheet, rg as Range) sh.HyperLinks.add rg, rg.Value & ".xls", TextDisplay:= rg.value End Sub といった具合で出来るかと ・・・ このマクロを呼び出すには MakeLink ActiveSheet, Range("A3") といった具合で出来ると思います 別フォルダーなら rg.Value & ".xls" を "ブックへのフルパス\" & rg.Value & ".xls" と言った具合に変更しましょう

imachan_net
質問者

補足

#1はよく見たら、自動記録を修正・・・と意味でしたね。 ごめんなさい。 なんとか自力でここまで出来ました。 動きました。 Okwebを見てると、アクティブセルの値は簡単には取れない・・・ とも回答が有りましたが、 社内の事例を見て、下記のようにしました。 でも、なぜ、このようにするのか?今ひとつです。 出来れば、教えて頂けると・・・ WORK = ActiveCell file$ = WORK ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=file$ & ".xls", _ TextToDisplay:=file$

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

マクロの記録で出来ると思いますよ マクロの記録を起動する リンクを設定したいセルを選択 メニューから 挿入 > ハイパーリンクを実行 管理台帳を設定 ブックマークボタンをクリックして シートを選択 記録の終了 としてやれば セルのSelect文 HyperLiinksのAdd メソッド といった マクロが完成するはずです Addメソッドの SubAddresの部分に シート名!セル番地 といった具合に設定してみましょう

imachan_net
質問者

補足

ありがとうございます。 でも、違うのです。 管理台帳へのリンクではなくて、 管理台帳からのリンクです。 例えば、 A2のセルに、SEC01-20080001の番号だったら、 SEC01-20080001のファイル名で保管して、 A2のセルからリンクしてSEC01-20080001を開けるようにしたいです。 同じように、A3のセルにSEC01-20080002の番号だったら、 SEC01-20080002のファイル名で保管して、 A3のセルからリンクしてSEC01-20080002を開けるにしたいです。 宜しくお願い致します。

関連するQ&A

  • 書式付きの自動採番の件(EXCEL)

    いつも本当に本当にお世話になっています。 感謝、感謝!! こんな質問もしていますが・・・ http://okwave.jp/qa3973267.html それ以上に困っているのが、 やっと自動記録に、OKWebから拝借のVBA差替えとかで、 なんとかいろいろやってみました。 (質問の内容はまだですが・・・) やっと・・・終わりが見えたときに、つまづきました。 (見積台帳と見積書の2つのEXCELファイルの運用です) 見積書の番号が、SEC01-20080001の体系で、 今年度は0001がカウントアップするので、 例. 見積台帳の A1のセルに使用された最後の番号(123とか) A2のセルに1 A3のセルにA1のセルとA2のセルを足す式を入れ、 A3に、"SEC01-2008"と"0000"の書式を入れたのです。 (使用後のカウントアップは自動記録で出来ています) これで、見積台帳から、見積書のファイルの表紙のシートには、 きちんと書式付きのSEC01-20080001の体系でコピーされるのですが、 他に見積書のシートでは表紙の見積書の番号が、 明細のシートの見積書の番号にもコピーの式が入っているおり、 その値がただの数字になってしまうのです。【困っていること】 見積書のレイアウト・書式を直す方法も有るのですが、 それでは、"2008"の部分を関係で毎年差替えなくてはならず、 利用者がたくさんいるのでこれも出来ません。 もう、VBAで何か、記述するようにしないと、 自動記録だけでは出来ないのでしょうか? 出来れば、"2008"の部分は、 見積台帳の有るセルに値として入れておいて新年度楽にしたいですが、 (私がいつまで面倒見るかわからない・・・) 最悪は"2008"もVBAに記述でも構いません。 質問が、細かすぎて、わかりにくかったら、 補足します。 私に質問して下さい。 宜しくお願い致します。

  • セル操作を記録するマクロを作りたい

    ご覧になっていただきありがとうございますm(._.)m セルの操作を自動で記録してくれるマクロを組みたいのですが、 (エクセルの「マクロの記録」ボタンのようなものです) その組み方が分からずとても困っています。 セルの操作を随時読み取ってそれを記録する、 そんなマクロの組み方を知っていたら教えていただけませんか?

  • 複数のEXCELファイルの特定セルを別ファイルへコピーする

    EXCELで作った見積書のセル内容を自動的に集めて、見積り一覧表を作りたいなと考えています。 見積書は1見積り1ファイル(シートは複数ありますが1枚目のシートが対象)になっていて、 各ファイルの1枚目のシートの特定セル内容(日付、相手先、件名、金額など)を 見積り一覧表として作成したEXCELシートへ順次コピーしたく思います。 動作イメージは 1.見積り一覧表を開いてボタンを押す等してマクロを起動。 2.同一フォルダー内の自分を除く全EXCELファイルを順次開きセル内容を一覧表へコピー。 3.全てのEXCELファイルを処理したら終了・・・。 発展系として、 ・日付条件で対象EXCELファイルを絞り込む。 ・特定セルに値が入っていなかったら(関係ないEXCELファイル)スキップ。 あとは一覧表が出来た後のソートくらいでしょうか。 まずは基本的な「自動的に複数EXCELを開いて特定セル内容をコピーする」のヒントがほしく思います。 なお、自動処理対象としたいEXCEL見積りファイルは約500本ほどです。 関連情報等ご存知でしたらお教えください。 よろしくお願いいたします。

  • セルの値が●ならば▲のマクロを自動で実行

    エクセルで、セルの値が●ならば▲のマクロを自動で実行するということはできるのでしょうか? セルの値が●月(TODAY関数)なら、自動的に置換をするように設定したいのです。

  • Excel保存時に任意セル値をファイルのプロパティと別ファイルに転記するマクロは?

    会社でExcelのテンプレートから見積書を作成して、保存した後、ファイルのプロパティと、別に作成している「見積書データベース」ファイルに転記しているんですが、時間がかかるので、自動化出来ないか悩んでいます 理想はファイルの保存時に自動的に転記することなんですが 1、ファイルのプロパティの概要タブの中の「タイトル」、「表題」、「カテゴリ」、「コメント」の中に任意セルの値を転記 2、別に作成している「見積書データベース」ファイルの各項目に任意セルの値を転記 この2つが出来るようなマクロ、もしくはエクセルの機能は無いでしょうか?

  • マクロセルの値によってセルの色を消す

    エクセル2013です。 セルの値が0又は空白の場合でそのセルが色塗りされていたら色を消す というマクロをを作成しました。 ただ700行55列では処理が遅いです。 Sub 色消() '成功 Dim 最終行 Dim 最終列 Dim 対象セル As Range 最終列 = Cells(8, Columns.Count).End(xlToLeft).Column '8行目の最終列を取得 最終行 = Cells(Rows.Count, 1).End(xlUp).Row 'A列の最終行を取得 For Each 対象セル In Range(Cells(10, 17), Cells(最終行, 最終列)) If 対象セル.Value = 0 Or 対象セル = "" Then 対象セル.Interior.ColorIndex = 0 End If Next 対象セル End Sub 対象範囲から対象セルを全部見つけて一括処理すれば早いのではと 以下のマクロを作成してみましたが Set 対象範囲 = Cells.Find(What:=0 Or "", LookIn:=xlValues, LookAt:=xlWhole) で構文ERRです。 どこを直せばいいのでしょうか? よろしくお願いします。 Sub 色消2() '2014/8/4 '失敗 Dim 対象範囲 Dim 最終行 Dim 最終列 最終列 = Cells(8, Columns.Count).End(xlToLeft).Column '8行目の最終列を取得 最終行 = Cells(Rows.Count, 1).End(xlUp).Row 'A列の最終行を取得 対象範囲 = Range(Cells(10, 17), Cells(最終行, 最終列)) Set 対象範囲 = Cells.Find(What:=0 Or "", LookIn:=xlValues, LookAt:=xlWhole) If Not 対象範囲 Is Nothing Then 対象範囲.Interior.ColorIndex = 0 End If End Sub

  • ダイアログボックスに自動的にセルの値を入れるには

    エクセルのマクロを実行したときに、「番号を入れてください」のダイアログボックスが出てくるのですが、その値がB1セルの値だとわかっているので自動的にB1セルの値を入れるようにするマクロ(VBEコード)がわかる方教えてください

  • EXCELでセルの値を取得したい

    EXCELで、各行の一番最後のセル(右端)の値を取得したいのですが どうすればできますか。 関数やマクロがわからないので、ここで質問させていただきました。 どなたか教えていただけると助かります。 よろしくお願いいたします。

  • 【VBA】特定の範囲で同じ値を含むセルの色を変える

    Excelのマクロに関して質問です。 特定の範囲(複数行と複数列)内で重複した値(セル内の最初の4文字が同じもの)を含むセルの色を変えたいです。 さらに、重複した値ごとに色分けをしたいです。例えば重複した値[1111]と重複した値[1112]の時では、前者が赤色で後者は青色、更に他の重複する値はまた別の色でというように、 要は、どのセルとセルが重複しているか色分けをして一目瞭然にしたいです。 ※なお特定の範囲は以下の変数を利用します。 dataRow = Workbooks(booksName).Worksheets(sheetsName).Range("A2").End(xlDown).Row 'データの入っている最終行を取得 dataColum = Workbooks(booksName).Worksheets(sheetsName).Range("A1").End(xlToRight).Column 'データの入っている最終列を取得 どなたか知恵をお貸し下さい。よろしくお願いします。

  • 【VBA】特定の範囲で同じ値を含むセルの色を変える

    Excelのマクロに関して質問です。 特定の範囲(複数行と複数列)内で重複した値(セル内の最初の4文字が同じもの)を含むセルの色を変えたいです。 さらに、重複した値ごとに色分けをしたいです。例えば重複した値[1111]と重複した値[1112]の時では、前者が赤色で後者は青色、更に他の重複する値はまた別の色でというように、 要は、どのセルとセルが重複しているか色分けをして一目瞭然にしたいです。 ※なお特定の範囲は以下の変数を利用します。 dataRow = Workbooks(booksName).Worksheets(sheetsName).Range("A2").End(xlDown).Row 'データの入っている最終行を取得 dataColum = Workbooks(booksName).Worksheets(sheetsName).Range("A1").End(xlToRight).Column 'データの入っている最終列を取得 どなたか知恵をお貸し下さい。よろしくお願いします。.

専門家に質問してみよう