• 締切済み

ExcelVBAを用いてフォーマットからデータベースに入力する際のハイパーリンクの扱い方

入力フォーマットに入力し、最後に「登録する」のようなボタンをクリックすることで別シート上のデータベースへ入力した情報が蓄積されるという作業をExcelVBAを用いて行っています。そのデータベースに添付ファイルをつけた情報を入れたいのですが、フォーマット上でつけたハイパーリンクがデータベースに入りません。VBA初心者のため、やり方が分からず困っています。よろしくお願いします。

みんなの回答

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.4

rivoisuさんがお忙しそうなので、横入り失礼します。 >ハイパーリンクの表示文字列とアドレスが異なる場合・・・ 多分、セルに表示される文字列の事を言っているものと推測します。 パラメータのTextToDisplayで、ハイパーリンクで表示されるテキストを指定します。 VBEのヘルプで、Hyperlinks.Addメソッドを調べれば分かると思います。

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

代入ではhyperlinkはできません。 実験してみれば分かります。 A1にハイパーリンクが設定されているとき range("B1")=range("A1") を実行してみると分かります。 別にHyperlink.addメソッドを実行する必要があるようです。 Sub test() Dim s As Range Set s = Range("A1") ActiveSheet.Hyperlinks.Add Anchor:=s, Address:=s.Value End Sub range型の変数sを宣言します。 targetRange.Offset(0, i).Value = formSheet.Range(dataAddressList(i)).Value の後で Set s = targetRange.Offset(0, i) ActiveSheet.Hyperlinks.Add Anchor:=s, Address:=s.Value としてハイパーリンクを追加してあげなければならないようです。 たぶんすべてのセルにハイパーリンクがあるわけではないでしょうから IF文でハイパーリンクのあるセルかどうかを判断しての処理になると思います。 こういう問題が起きた時どこに問題があるかを考えてみれば 代入時にハイパーリンクが消えているのではないかということは解ると思います。 実際にどうか小さなSUBを作ってみて実験してみる。 ということが解決の早道です。

tar5555
質問者

補足

ご回答ありがとうございました。 おかげさまで目的の動作を実行することができました。 問題解決法のアドバイスまでいただき、初心者の私にはとても勉強になりました。 実行する上でまた疑問が出てきたのですが、ハイパーリンクの表示文字列とアドレスが異なる場合はどのようにすればよいかがわからずに困っています。よろしければご教示願います。

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

>フォーマット上でつけたハイパーリンクがデータベースに入りません。 「入りません」とは、どういうことですか? ハイパーリンクされないということですか? 意味が明確に伝わるようにしてください。 ActiveSheet.Hyperlinks.Add Anchor:=○○○, Address:=△△△

tar5555
質問者

補足

返事が遅くなりもうしわけありません。 入力フォーマットに記入した内容をDBに転記するVBAにおいて、入力フォーマットにハイパーリンクを付けた場合に、転記先ではハイパーリンクされなくなってしまい、表示のみになってしまいます。 ハイパーリンクも転記する方法を教えていただければと思います。よろしくお願いします。

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

今のコードを見せてくれないとお答えのしようがありません。 いろいろ想像はできますが...

tar5555
質問者

補足

返事が遅くなりもうしわけありません。今のコードは以下です。 入力フォーマットに記入した内容をDBに転記しています。 入力フォーマットにハイパーリンクを付けた場合に、転記先ではハイパーリンクがなくなってしまい、表示のみになってしまいます。 ハイパーリンクも転記する方法を教えていただければと思います。よろしくお願いします。 Sub 新規レコード転記() '変数の宣言 Dim formSheet As Worksheet, dataSheet As Worksheet, targetRange As Range, i As Long Dim dataAddressList(), newRecord As Range, tmpRecord As Range Dim tmpNo As Integer, newNo As Integer '入力用のシートをセット Set formSheet = Sheets("入力フォーム") '蓄積用のシートをセット Set dataSheet = Sheets("DB") '連番取得 tmpNo = Application.WorksheetFunction.Max(dataSheet.Columns(1)) newNo = tmpNo + 1 '登録番号を入力画面に表示 formSheet.Range("C22").Value = newNo '転記したいセルの位置を配列に格納 dataAddressList = Array("C22", "C3", "C4", "C5", "C6", "C7", "C8", "C9", "C10", _ "C12", "C13", "C14", "C16", "C17", "C18", "C19", "C20") '新規レコードの入力位置を取得 Set targetRange = dataSheet.Range("A" & Rows.Count).End(xlUp).Offset(1) '配列に指定した順番でレコードの値を転記 For i = 0 To UBound(dataAddressList) targetRange.Offset(0, i).Value = formSheet.Range(dataAddressList(i)).Value Next '転記したレコードのセル範囲を取得 Set newRecord = dataSheet.Range(targetRange, targetRange.Offset(0, UBound(dataAddressList))) 'その一つ上のレコードのセル範囲を取得 Set tmpRecord = newRecord.Offset(-1, 0) 'ひとつ上のレコードの書式を最新レコードにコピー tmpRecord.Copy newRecord.PasteSpecial xlFormats Application.CutCopyMode = False MsgBox "入力を完了しました。登録IDは" & newNo & "です。" End Sub

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

関連するQ&A

  • ExcelVBAでフォルダへのハイパーリンクを

    Excelにファイルサーバーに置いてあるフォルダ名一覧があるのですが、このフォルダ名をクリックしたら実際にフォルダが開くようにハイパーリンクをしたいと思います。 (例:フォルダは\\serv1\aの中に名前「f1、f2,f3・・」で存在します。 またExcelにはA1にf1、A2にf2、A3にf3・・と記載されています。 A1をクリックするとf1のフォルダが開く・・というようにしたいです。 ちなみに空白のセルには何も入力したくありません。) VBAを使わずになんとかなるならそれでもOKなのですが、VBAを使うのであればどのようにすればよいでしょうか。 VBAはほとんど使ったことがないので、すみませんがお願いいたします。

  • ハイパーリンクの表示について

    エクセル2003でハイパーリンクを使うとエクセルのシートに青い文字で リンク先の名前が表示されます。 この文章を変えることはリンクの編集でできます。 ところが先日、ある同僚がリンクの青い文字ではなく、それをボタン表示?にしてました。 よくよく見るとそれはボタンではなく、単に図であり、そのボタンはシートに固定されてなく、どこでも動かせます。 しかし不思議なのは、どうやってハイパーリンクの表示をボタンにしたのでしょうか? ちなみにそのボタンを右クリックしてハイパーリンクの編集を見てみると、リンク文字入力がしろくハッチングされていて、入力できないようになってました。これは何かのマクロなのでしょうか? もしこのような事が簡単にできるなら教えて下さい。 ただし、このボタン、単に図なのでシートの何処にでも移動してしてしまうため、資料としては危険かもしれません。

  • ExcelVBAで・・・

    お世話になります。 この度、ExcelVBAでデータベースシステムを作ることになりました。 そこで、ファイルにパスワードを設定するVBAを作成したいのですがどうやっていいのかわかりません。 手順として、 (1)初期パスワードを設定する(TextBoxに入力してもらう) (2)そのパスワードがないとファイルを見れないようにする。 なのですが、そのTextBoxに入力したパスワードをどこに保存?したら良いのかが良くわかりません。 セル内に入れておいても見られそうな気がして…。

  • フォームでデータベースの内容を表示するには?

    VBA初心者です。 データベースの入力用にフォームを作成しました。 登録コマンドボタンをクリックすると、フォームに入力した内容が、データベースの各項目に反映されるようになっています。 このフォームでは、いくら各項目に入力しても、登録ボタンを押さない限り、データベースには反映されません。もちろんフォームからこれまで入力したデータベースの内容は見ることができません。 しかし先日、Excelの文書件名簿ソフトで、項目1つ1つ入力するごとに、その都度データベースに反映されていくものがありました。 「次のページ」コマンドボタンはありますがこれを押す前にすでにフォームに入力した項目はデータベースに反映されています。 「前のページ」ボタンもあり、これを押すとこれまで入力してきたデータが順番にフォームで見ることができます。 このようなフォームはどのように作ればよろしいでしょうか?

  • EXCEL上URLデータに一括ハイパーリンク

    他のデータベースからEXCEL2003シートに移した URLデータが2万件ほどあります。 現状では、そのURLの入った2万個のセルがハイパーリンク化 されていません。 すべてのセルを一括でハイパーリンク化する方法はないでしょうか。 入力オートフォーマットの設定で、 現在は、一旦1件ずつ入力状態にしたあとエンターすると 自動でハイパーリンク化するのですが、 件数が多いのでとてもやりきれないのです。 (ハイパーリンクを一括で外す方法は見つかったのですが、 その逆がわかりません・・・)

  • EXCELのデータベース

    EXCEL2000を使用しています。 VBAを使ってデータベースを作ろうとしているのですが、ちょっとわからないのでどなたか教えてもらえませんか。 データベースへの入力はUSERFORMを使います。 USERFORMの内容は、 コンボボックス、テキストボックス1,2,3、コマンドボタン”登録”、”終了”です。 まず大項目は"SHEET DB"のA1:A120に入力されており、”発注者”、”請負者”、”病院”・・・・というのがあります。 この項目はUSERFORMのコンボボックスにセットされます。 次にテキストボックスの入力項目が3個あり、 TEXTBOX1 ・・・名前 TEXTBOX2 ・・・電話番号 TEXTBOX1 ・・・FAX を入力します。 発注者のデータベース入力範囲はA2:C100で、次の大項目、請負者のデータベース入力範囲は、D2:F100と言う風に延々と続きます。 USERFORMのコンボボックスで大項目を選択し、テキストボックス1,2,3の入力を入力し、コマンドボタン"登録"を押すと、大項目のデータベース範囲にテキストボックスのデータの空白行にデータが登録されます。 大項目が1個しかない場合は出来るのですが、大項目が複数になった場合の条件の設定がよくわかりません。 大項目の下図は数十個あり、1個1こセルに入力するのは大変で苦労しています。 VBAのプロの方なら初歩的すぎる事かもしれませんが、ビギナーな私にわかりやすくどうかご教示願います。

  • excelのハイパーリンクについて教えてください

    ファイル名:シート1のA列に曲名を入力して、そのセルにハイパーリンクを設定して動画が動くように指定しています。 新しくファイル名:シート2を作り、その中のセルに =[シート1.xls]Sheet1!$A$1 と入力しているのですが、曲名は取り込めるのですが、ハイパーリンクの情報が取り込めません。 シート2にシート1で指定した曲名とハイパーリンク情報を取り込む方法があればお教え下さい。 エクセルのバージョンは2002を使用しています。 全くの素人ですが宜しくお願い致します。

  • 最も最近入力したもののみを反映する

    エクセルVBA初心者です。 これから作成する予定の検索用プログラムで、 IDもしくは名前をsheet1で入力する(手入力) ↓ sheet2のデータベースの中に、同じID(名前)があれば、最も登録日の新しい顧客情報を、sheet1の顧客情報欄に入力せよ ↓ もしなければ 登録されていませんとコメントせよ という風に作ろうと考えています。 ここで、別シートにある、これまで登録してきたデータの中から、 同じID(もしくは名前)でも、最も新しいものを検索し、それを反映するにはどのようにしたらよいかわからずに困っています。 顧客情報を月に1回ずつ更新するのですが、変わることが時々あるので、最近のものに更新していかなければならないのです。 ちなみにデータベースとなるシートには、 ID 名前 登録日 性別 生年月日・・・ など並んでいます。 わかりにくいでしょうか? すみませんがよろしくお願いします。

  • excelのハイパーリンク

    現在、顧客名簿がexcel97にて作ってあります。 シート1に顧客情報、シート2に作業履歴を打ち込んでハイパーリンクで繋げようという魂胆です。 しかし作業履歴は当然増えるので、セルを挿入して書き加えると、ハイパーリンクの指定座標は変わらないのでこのままでは使えません。 セルや列、行の挿入にハイパーリンクが対応する、良い方法はありませんでしょうか?

  • ExcelVBAについて

    ExcelVBAについて Excel VBA初心者です。 やりたいことを説明しますと、 フォームA上に、テキストボックスBとコマンドボタンCがあるとします。 テキストボックスBにはMPGファイルのフルパスが既に入力されており、コマンドボタンCを押すとテキストボックスBのファイルを開けるようにしたいのです。 お手数ですが、よろしくお願いします。

専門家に質問してみよう