Delphiからエクセルへのリンク設定方法

このQ&Aのポイント
  • DelphiからExcelの特定のセル間にリンクを設定する方法を教えてください。
  • DelphiでExcelを操作して、Sheet1のCells[1,1]からSheet2のCells[1,1]、Sheet1のCells[1,2]からSheet3のCells[1,1]へリンクを設定する方法を解説します。
  • Delphiを使用してExcelのシート間にリンクを作成する方法について教えてください。具体的には、DelphiでExcelを操作し、Sheet1の特定のセルからSheet2やSheet3の特定のセルへリンクを設定する方法について知りたいです。
回答を見る
  • ベストアンサー

Delphiからエクセルを設定

Delphiから ExcelのSheet1のCells[1,1]からSheet2のCells[1,1]、 Sheet1のCells[1,2]からSheet3のCells[1,1]へとSheet間にリンクを はる方法を教えてください。 Excelは下記のように起動しております。 Excel := CreateOleObject('EXCEL.Application'); Excel.Visible := True; Excel.Workbooks.Add; Excel.WorkBooks[1].Sheets.Add; Excel.WorkBooks[1].ActiveSheet.Name:='Sheet1'; //---Sheet1へデータ送信 Excel.WorkBooks[1].Sheets.Add; Excel.WorkBooks[1].ActiveSheet.Name:='Sheet2'; //---Sheet2へデータ送信 Excel.WorkBooks[1].Sheets.Add; Excel.WorkBooks[1].ActiveSheet.Name:='Sheet3'; //---Sheet3へデータ送信 ここでりんくしたい。

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

  • ベストアンサー
  • SHIMAPEE
  • ベストアンサー率75% (154/203)
回答No.2

ANo.1お礼への回答です。 HYPERLINKでしたら下記でいけそうです。Windows XP + Delphi2007で確認しています。 uses  : ComObj  : var Excel: Variant; Book : Variant; Sheet1, Sheet2, Sheet3: Variant; begin Excel:=CreateOleObject('EXCEL.Application'); Excel.Visible:=True; Book:=Excel.Workbooks.Add; Sheet1:=Book.Sheets.Add; Sheet1.Name:='NewSheet1'; //---Sheet1へデータ送信 Sheet2:=Book.Sheets.Add; Sheet2.Name:='NewSheet2'; //---Sheet2へデータ送信 Sheet3:=Book.Sheets.Add; Sheet3.Name:='NewSheet3'; //---Sheet3へデータ送信 // HYPERLINK Sheet1.Cells[1,3].Formula:='=HYPERLINK("#NewSheet2!A1","Sheet2へ")';  :

hirodel
質問者

お礼

SHIMAPEE さん有難う御座います。 >HYPERLINKでしたら下記でいけそうです >Sheet1.Cells[1,3].Formula:='=HYPERLINK("#NewSheet2!A1","Sheet2へ")'; ばっちりです。解決いたしました。 ただ、「Formula」ですが、下記の1でも2でも結果は同じでした。 1 Sheet1.Cells[1,2]:='=HYPERLINK("#NewSheet2!A1","Sheet2へ")'; 2 Sheet1.Cells[1,3].Formula:='=HYPERLINK("#NewSheet3!A1","Sheet3へ")'; 「Formula」の有る無しでは何が違うのでしょうか?ご教授ください。

その他の回答 (1)

  • SHIMAPEE
  • ベストアンサー率75% (154/203)
回答No.1

リンクというのは参照の事と解釈し、試行錯誤の結果、下記でできました。Excelでマクロの記録をしながら操作し、VBAでどう展開されるか調べて転記しています。ベストな方法かどうかはわかりません。 Windows XP + Delphi2007で確認しています。 uses  : ComObj  : var Excel: Variant; Book : Variant; Sheet1, Sheet2, Sheet3: Variant; begin Excel:=CreateOleObject('EXCEL.Application'); Excel.Visible:=True; Book:=Excel.Workbooks.Add; Sheet1:=Book.Sheets.Add; Sheet1.Name:='NewSheet1'; //---Sheet1へデータ送信 Sheet2:=Book.Sheets.Add; Sheet2.Name:='NewSheet2'; //---Sheet2へデータ送信 Sheet3:=Book.Sheets.Add; Sheet3.Name:='NewSheet3'; //---Sheet3へデータ送信 Sheet1.Cells[1,1].FormulaR1C1:='=NewSheet2!R1C1'; Sheet1.Cells[1,2].FormulaR1C1:='=NewSheet3!R1C1'; Sheet2.Cells[1,1].Value:='123'; Sheet3.Cells[1,1].Value:='456';  :

hirodel
質問者

お礼

SHIMAPEE さん有難う御座います >リンクというのは参照の事と解釈し・・・ 質問の仕方が適切ではなかったようですみません。 「Sheet間にリンク」はSheet1のCells[1,1]をクリックするとSheet2が表示されて参照できると言う意味でした。 その後やっと Excelのマクロを参考に試行錯誤しながら下記のようにすることで実現出来ましたが、 Excel.WorkBooks[1].Sheets['Sheet1'].Hyperlinks.Add(Excel.WorkBooks[1].Sheets['Sheet1'].Cells[1,1],''); Excel.WorkBooks[1].Sheets['Sheet1'].Hyperlinks[1].Address := ''; Excel.WorkBooks[1].Sheets['Sheet1'].Hyperlinks[1].SubAddress := 'Sheet2!A1'; これを一行で済ませる方法を模索中です。 今回のSHIMAPEE さんのセル間リンクの参照も今後大変役立つ物と考え「私ライブラリ」に保存して大切にしたと思います。 ありがとうございました。

関連するQ&A

  • Excel VBA

    今、Excel2000で作成したEXcelブックをExcel2007でも正常に動作するか確認しています。 伝票のようなもので、枠内に数字を記入後、保存する際に別のブックにセルの全コピーしてから保存するようになっているのですが、Excel2007で実行すると列幅と行幅がコピーされません。 Set NewBook = Workbooks.Add Workbooks(ThisWorkbook.Name).Sheets("伝票").Cells.Copy NewBook.Sheets("Sheet1").Activate ActiveSheet.Paste Excel2003で動かしたときは、大丈夫でした。 原因がわかりません。コピーの仕方がいけないのでしょうか。

  • WSHで、EXCELにワークシートをCSVから読み込んで追加したい。

    WSHを使って、EXCELを起動して、既存のCSVファイルからデータを読み込みたいのですが、複数のCSVから読み込むなどして、同じワークブックの新しいシートにCSVから読み込んだデータを追加していきたいのですが、どうやればよいのかわかりません。 下のソースのようにしたのですが、そうすると、別のワークブックとして開いてしまうので、わからなくなってしまいました。お願いします。 set Exl=CreateObject("Excel.Application") Exl.Visible=True Exl.workbooks.add Exl.workbooks.OpenText "c:\data.csv"

  • エクセル2007VBAで新規ファイルを作る場合

    現在A社というファイルのsheet1に電気代と名前を付けたデータ、sheet2に ガス代という名前を付けたデータがあり電気代のブックからコピーして新規ファイルに貼り付けをしたいと思い下記のとおりマクロがありますが、新規ブックを開いた時常に1ではなく他に新規ブックを開いていたら2とか3になってしまいます。すると再度新規ブックに戻ってガス代を貼り付ける時2とか3tpか4とかでしたらエラーになってしまいます。 こういう場合どのように書いたら良いのでしょうか? それから最後に新規ファイルで名前を付けて保存のところまでダイアログ出すところまで 教えていただきたいのですが。 マクロ勉強始めたばかりでよろしくお願います。 Sub DGCopy() Cells.Select Selection.Copy Workbooks.Add Cells.Select ActiveSheet.Paste Sheets("Sheet1").Select Sheets("Sheet1").Name = "電気代" Windows("A社.xls").Activate Sheets("電気代").Select Cells.Select Application.CutCopyMode = False Selection.Copy Windows("Book1").Activate Sheets("Sheet2").Select Cells.Select ActiveSheet.Paste Sheets("Sheet2").Select Sheets("Sheet2").Name = "ガス代" Application.CutCopyMode = False End Sub

  • 【VB6】EXCELのシート名を変更したい

    お世話になっております。 VB6(visual basic 6)プログラムからEXCELのシート名を指定したいです。 EXCEL:EXCEL 2000 OS: win XP 以下の記述ではシート名がデフォルトのままです。 (sheet1のままで変更できていない) Dim fs As Object Dim oApp As Object Set oApp = CreateObject("Excel.Application")'EXCEL起動 oApp.Visible = True oApp.UserControl = True oApp.Workbooks.Add '新規のワークシートsheet1を追加する oApp.Cells(1, 1) = "シート名を指定したい!" 'セル入力はできた oApp.Sheets("sheet").select oApp.Sheets("sheet").Name = "新シート名" ご覧のように (1)自動EXCEL起動して (2)セル1,1に文字入力して (3)シート名を指定 しようとしております。 セル(1,1)に「シート名を指定したい!」は入力されております。 ブック名(ファイル名)はデフォルトのBook1.xlsです。 シート名の指定方法が間違っているからうまくいかないと思っております。 どうぞよろしくお願いいたします。

  • ■助けてください。■エクセルのマクロで困っています。

    エクセルで、シートを一つ削除するマクロを教えてください。 本当に困っています。 マクロをご存知の方、ずぶの素人の私にご教示何卒よろしくお願いします。 文末にマクロを記述いたしますが、そちらは、 指定した日付以降にエクセルのファイルを開くと シートがすべて削除されて、「有効期限切れ」という シートだけが出てくるというものです。 現在、これを応用して、すべてのシートを 削除するのではなく、ひとつのシートだけ削除したいのです。 例えば「SheetA」、「SheetB」、「SheetC」、「有効期限切れ」という 4つのシートがあったとして、 指定した期日が来たら、「SheetC」だけを削除したいのです。 なお、エクセルファイルを開く際に、マクロを無効にされてしまうと 期日が来てもSheetCが削除されずに 残ってしまっては困るのです。 そこで、マクロを有効にしないと SheetCが現れないようにしたいのです。 (以下のマクロではそのようになっています) 一つだけシートを削除するマクロをやり方をご存知の方、マクロのご教示のほど 何卒よろしくお願い致します。 なお、小生、マクロはずぶの素人でして、 マクロの文面を頂いてコピー貼り付けするぐらいしか 能がありません。 つきましては、以下の文面を モディファイしてご教示頂けませんでしょうか。 よろしくお願いいたします。 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) endsheetname = "有効期限切れ" If (Sheets.Count = 1) And (Sheets(1).Name = endsheetname) Then Exit Sub If Sheets("SheetA ").Visible Then Sheets("SheetC ").Visible = xlVeryHidden End Sub Private Sub Workbook_Open() endsheetname = "有効期限切れ" If Date >= "3008/09/29" Then Application.DisplayAlerts = False If Sheets.Count = 1 Then If Sheets(1).Name <> endsheetname Then Sheets.Add(After:=ActiveSheet).Name = endsheetname End If Else On Error Resume Next Sheets(endsheetname).Delete On Error GoTo 0 Sheets.Add(After:=ActiveSheet).Name = endsheetname End If sheetnumber = Sheets.Count For i = 1 To sheetnumber For j = 1 To 2 If Sheets.Count = 1 Then Exit For If Sheets(j).Name = " SheetC " Then If Not Sheets("SheetC ").Visible Then Sheets("SheetC ").Visible = True If Sheets(j).Name <> endsheetname Then Sheets(Sheets(j).Name).Delete: Exit For Next Next Range("b" & 3).Value = "ご利用ありがとうございました。" ActiveWorkbook.Save Application.DisplayAlerts = True End If If (Sheets.Count = 1) And (Sheets(1).Name = endsheetname) Then Exit Sub If Not Sheets(" SheetC ").Visible Then Sheets(" SheetC ").Visible = True End Sub

  • エクセルとVB6

    環境は OS XP Visual Basic 6 Excel 2003 です。 エクセルを扱うについては、今回初めてです。 ソースです----------------------------------- Dim ex As Object ' Excel.Application Dim wb As Object ' Excel.Workbook Dim ws As Object ' Excel.Worksheet Set ex = CreateObject("Excel.Application") ex.Visible = True 'エクセルを表示する Set wb = ex.Workbooks.Add '空白の新しいブックを追加 Set ws = wb.Worksheets.Add '新しいシートを追加 ws.Name = "XXX " 'シートの名前を設定 'シートのセルに書き込む '構文:Cells(行, 列).Value = 値 ws.Cells(1, 1).Value = "ID" ws.Cells(1, 2).Value = "PS" III% = 2 For x% = 0 To 135 III% = III% + 1 ws.Cells(1, III%).Value = 問D$(x%, 0) Next x% ----------------------------------- エクセルが起動し、挿入されます。 質問1 シート XXXはsheet3としてに挿入され、それ以外にsheet1 sheet2もできています。 これはなぜですか。 質問2 sheet1 sheet2を生成しないようにできますか。 できないようにするには、どうすればいいですか。 全くエクセルは詳しくありません。 お詳しい方、よろしくお願いします。

  • Execel VBA でシートの作成後、コピペがうまくいかない。

    シートのコピー&ペーストがしたくて、以下のPGを 組みましたが、うまくいきません。 (1)(2)と二通り試してみましたが、両方だめでした。 どなたか、おわかりになるかた、教えてください。 for i = 1 To page_cnt (1)Sheets.Add ActiveSheet.Name = "請求書(控)" & i Sheets("請求書" & i).Select sheet_name = "請求書(控)" & i Sheets(sheet_name).Cells("A1").Select Selection.Paste (2) Sheets.Add ActiveSheet.Name = "納品書(控)" & i Sheets("納品書" & i).Cells.Copy Sheets("納品書(控)" & i).Paste Next

  • EXCEL VBA Applicationインスタンス内での範囲指定

    Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Private Const SCol = 1 Private Const SRow = 1 Private Const ECol = 1 Private Const ERow = 1 Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Add xlBook.Sheets("Sheet1").Range("A1") = 1 xlBook.Sheets("Sheet1").Range(Cells(SCol,SRow), Cells(ECol, ERow)).Borders.LineStyle = True xlBook.SaveAs "c:\ss.xls" xlBook.Close xlApp.Quit Set xlApp = Nothing Set xlBook = Nothing 以上のようにEXCEL VBA内で新規ExcelApplicationインスタンス内で値を代入し、線を引いているのですが線を引く範囲指定部分でアプリケーション定義またはオブジェクト定義のエラーですと表示されます。 xlBook.Sheets("Sheet1").Range("A1:B2").Borders.LineStyle = True ↑のような形であればエラーは出ません。 xlBook.Sheets("Sheet1").Range(Cells(1,1),Cells(2,2)).Borders.LineStyle = True ↑ではエラーが出ます。 新規ExcelApplicationインスタンス内でのRange(Cells)の使用方法が違うのでしょうか?よろしくお願いします。

  • VB6でExcelシートのコピー、貼付け

    VB6でExcelファイルを開いてシートをコピーし、新規ファイルとして保存したいのですが方法がわかりません。 (既存のExcelシートを雛形として新しくBookを作りたいんです) Set objexcel = CreateObject ("Excel.Application") Set objexcel_new = CreateObject("Excel.Application") objexcel.Workbooks.open (App.Path & "\book1.xls") objexcel_new.Workbooks.Add '新規に作る 'シートのコピー objexcel.sheets("Sheet1").Copy objexcel_new.sheets("Sheet1").Select objexcel_new.activesheet.Paste としても、実行前のクリップボードの中身が貼り付けられるだけで、シートがコピーできません。 よろしくお願いします。

  • Excel2007 コピペエラー

    以下を実行すると、「そのコマンドは複数の選択範囲に対して実行できません」エラーがでます。 Workbooks("Test1").Sheets("Sheet1").Range((.Cells(1, 1), .Cells(100, 20)).Copy Workbooks("Test2").Sheets("Sheet2").Activate Workbooks("Test2").Sheets("Sheet2").Cells(1, 1).Select ActiveSheet.Paste どなたか原因を教えて下さい。

専門家に質問してみよう