• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excelで、異なるブック間での同一シートの共有?)

Excelで異なるブック間での同一シートの共有

x0000xの回答

  • ベストアンサー
  • x0000x
  • ベストアンサー率52% (67/127)
回答No.2

#1です。 >基本的にシートの構成はみな同じなので、 >セル参照などとVBAを組み合わせればきっと可能なのでしょうが、 ご希望のイメージと違うかも知れませんが、 VBAなら以下の通りです。 <処理の条件> SummaryBook.xlsをOPENする際、SummaryBook.xlsのSheet1に ExcelBook1.xls ~ ExcelBook3.xlsの各Sheet1を順に読込ます。 この読込の際、HyperLinkのアドレスを変更します。 (ただし、HyperLinkが格納されている列は”C列”にしてあります。) 以下コードです。 SummaryBook.xlsのマクロとして登録します。 Alt+F11で表示させ、ThisWorkbookを開き、コードを貼り付けます。 ”★”コメントを任意に変更した上で、お試しを!! 'WorkbookのOpenEvent Private Sub Workbook_Open() 'Summary Bookの一覧表シートをSheet1に設定します。 Dim summarySheet As Worksheet Set summarySheet = ActiveWorkbook.Worksheets("Sheet1") '★Summrybookのシート名 '一覧表をクリアする。 summarySheet.Cells.Select Selection.ClearContents 'セルをCopyする Dim setRowIndex As Long '★以下のcopyCells()の引数を変更。順番は、対象ブックのPATH、ブック名、シート名、読込開始行、格納行、summarybookのシート setRowIndex = copyCells("フォルダ1\", "ExcelBook1.xls", "Sheet1", 1, 1, summarySheet) setRowIndex = copyCells("フォルダ2\", "ExcelBook2.xls", "Sheet1", 1, setRowIndex, summarySheet) setRowIndex = copyCells("フォルダ3\", "ExcelBook3.xls", "Sheet1", 1, setRowIndex, summarySheet) '終了 Set summarySheet = Nothing End Sub Private Function copyCells(ByVal path As String _ , ByVal bookNM As String _ , ByVal sheetNM As String _ , ByVal CopyRowIndex As Long _ , ByVal setRowIndex As Long _ , ByVal listSheet As Worksheet) As Long '指定されたブックの指定シートを一覧シートにコピーする。 'Args path : Copy元の格納PATH …文字列の最後は"\"で終了 ' bookNM : Copy元のブック名 … Path + ブック名で指定 ' sheetNM : Copy元のシート名 ' CopyRowIndex : Copy元の開始行  … 最初は見出し行を指定、2回目からはデータの先頭を指定 ' setRowIndex : 一覧に格納する開始行位置 ' listSheet : 一覧表シート '画面更新を止める Application.ScreenUpdating = False const colHyperlink as String = "C" '★HyperLink列 確認 Dim srcBK As Workbook Dim srcST As Worksheet Set srcBK = Workbooks.Open(path & bookNM) Set srcST = srcBK.Sheets(sheetNM) If setRowIndex = 1 Then '最初のCopyでは、列幅もCopy元にあわせる srcST.Cells.Copy Destination:=listSheet.Range("A" & setRowIndex) Else '2回目以降は行単位でCopyする Dim maxRowIndex As Long maxRowIndex = srcST.Rows(srcST.Rows.Count).End(xlUp).row '格納最終行を求める srcST.Rows(CopyRowIndex & ":" & maxRowIndex).Copy Destination:=listSheet.Range("A" & setRowIndex) End If '一覧表内で次に格納可能な行を戻す。 copyCells = listSheet.Rows(srcST.Rows.Count).End(xlUp).row + 1 Dim row As Long For row = setRowIndex To copyCells - 1 '格納最大まで If listSheet.Cells(row, colHyperlink).Hyperlinks.Count > 0 Then 'リンクが存在した場合にアドレスを変更する Dim cnt As Integer For cnt = 1 To listSheet.Cells(row, colHyperlink).Hyperlinks.Count 'HyperlinkのアドレスにPATHを付加し、Summarybook.xlsからの参照を可能にする listSheet.Cells(row, colHyperlink ).Hyperlinks(cnt).Address _ = path & listSheet.Cells(row, colHyperlink).Hyperlinks(cnt).Address Next End If Next 'ブックを閉じる(更新なし) srcBK.Close SaveChanges:=False Set srcST = Nothing Set srcBK = Nothing '画面更新を復活 Application.ScreenUpdating = True End Function

r_bel
質問者

お礼

結果報告です。 '★以下のcopyCells()の引数を変更。順番は、対象ブックのPATH、ブック名、シート名、読込開始行、格納行、summarybookのシート setRowIndex = copyCells("ex1\", "ex1.xls", "happysheet", 1, 1, summarySheet) とセットし、保存してファイルを開こうとしますと、 実行時エラー '1004': 'ex1\ex1.xls'が見つかりません。 ファイル名およびファイルの保存場所が正しいかどうか確認してください。 というエラーが出てしまい、デバッグすると 下記の行がハイライトされてしまいます。 Set srcBK = Workbooks.Open(path & bookNM) フォルダもファイルもきちんと存在していますし、 上記の位置(SummaryBook.xlsと同じ階層にフォルダがあり、 ex1\ex1.xlsが相対パスとして正しいと思うのですが、 別のフォルダーを指定してもやはり同じ結果で、 最初に読み込もうとする行でつまいでしまいます。 こんなに書いていただいて本当に申し訳ないのですが、 どうやら私にはやはりこのように長くて複雑なマクロで、 というのはまだまだ難しすぎる作業だと痛感しました・・・。 今回いただいたアドバイスは、ちゃんと保存しておいて、 いつかもっと腕を磨いてからまた挑戦させていただきたいと思います。 本当にありがとうございました!

r_bel
質問者

補足

うう、感激です。本当にありがとうございます。 お返事が遅れ、大変失礼いたしました。 実は今引越し中でネット・パソコン環境がまだ整っていないのですが 近日中に今回作っていただいたコードにじっくりと 取り組んで、勉強させていただき、結果報告をさせていただきます。 本当にありがとうございました!!!

関連するQ&A

  • Excel VBA別ブックのシートをコピーするには

    Excel2010のVBAで別ブックのシートをコピーしてくる方法 Excelファイル(C:\test\BOOK2.xls)のシート名が TESTというシートを自分のExcelファイル(C:\doc\BOOK1.xls)に コピーするにはどのように記述すればよいのでしょうか。 ・コピー先:自分のExcelファイル(C:\doc\BOOK1.xls)  VBAのコードがあるファイルです ・コピー元:C:\test\BOOK2.xlsのTESTシート  なお、TESTシートを持つ同じ名前(BOOK2.xls)のファイルが  別フォルダにもあります   Workbooks( )の引数にファイル名(BOOK2.xls)は指定できるのですが、 フルパス名(C:\test\BOOK2.xls)で指定できないので困っています。

  • Excelで外部ブックを相対指定する方法について

     Excelで外部のブックにリンクをする場合、なぜか絶対パスになってしまいます。以下のように相対パスにする方法はないのでしょうか? 'C:\abc\def\[hij.xls]klm'!$B9     ↓ '..\[hij.xls]klm'!$B9  リンク元のExcelファイルは、「abc」フォルダの中にあります。  よろしくお願いいたします。

  • HTMLで、エクセルのワークシートへリンク

    HTMLで、エクセル内のワークシートへリンクさせたいのですが その絶対パスの書き方がわかりません。 C:\Documentsから始まって~\エクセル\●●.xlsで、 エクセルフォルダ内、 ●●のエクセルファイルまでは開くことができました。 で、さらに、 そのエクセルの中のワークシートまで指定したいのですが、 ワークシートのパスは どのように書けばいいのでしょうか? ●●.xls\ワークシート名 では開きませんでした。 よろしくお願いします。

  • エクセルで他のブックの参照

    ファイル名:Test1.xlsのセルに、"="と入力し、ウィンドウで、Test2.xlsを選択して、Sheet1の"A1"のセルを選択すると、Test1.xlsのセルには、=[Test2.xls]Sheet1'$A$1と入力されます。 そこで、一度Test1.xlsを保存して、再度開くと、、=[Test2.xls]Sheet1'$A$1の部分が、絶対パスに自動的に更新されてしまします。 これを、相対パスで扱う方法ってありますでしょうか? フォルダーを移動させることがあり、どのように対応すればいいのか悩んでいます。 宜しくお願い致します。

  • Excelでブックのリンク更新がきかなくなりました

    一つのフォルダの中に、A~Eなどのブックがありまして、 そのブックの中の計算結果を、 読み込んで一覧するための「合計ブック」がございます。 ブック名はもちろん、まとめるフォルダ名も変えず、 都度「更新」して読み込んでおり、 その外側のフォルダ名を、更新するたびに日付を変えて管理してきました。 Mac Office2011 Excelで 今までOS10.6で使用してきたのですが、今回、10.13マシンに移行しました。 無理かと思ったのですがOffice2011が動いたので、使ったところ、 フォルダの日付名を変えると、リンクが切れる、という状態になりました。 「合計ブック」内のセルを見ると ='Macintosh HD....180831フォルダ:固定名フォルダ:[A.xls]シート名'!$A$1 となっていて、190831を180915とかに変えると、切れるようです。 今までと同じ使い方なのに何故?と困惑していますが 過去マシンでどうなっていたのかも確認することが出来ず。 絶対パスから、相対パスに変えればいけるのでは?と手動で変更してみましたが、 自動的に上記の絶対パスに戻ります。 リンクの編集、から再リンクしてみましたが、 やはりフォルダ名を変えると切れてしまいます。 (「更新」>「A.xlsが見つかりません」と出ます) 何が間違っているのでしょうか... ・環境設定や、何か設定を変えるとクリアできるのか  (以前、そうしたのを忘れたのかもしれません) ・仕様やOSが合わないこと等が原因で更新がきかない状態なのか ・もしくは仕様、はたまた不具合なのか など、原因および回避方法など、お分かりになるようでしたら、 どうかお教えくださいませ。

  • Excelでのリンク付けについて

    Excelで「書類」というフォルダにA.xlsとデータフォルダがあります。データフォルダの中にB.xlsというファイルがあります。 そこで、マクロでB.xlsファイルのセルA1にA.xlsファイルのセルB2のデータをリンクするとき絶対パスではやりたくないのですが、どうすればいいかわからないので教えてください。 よろしくおねがいします。

  • Excelのハイパーリンクで絶対パスが動作しない

    こちらで同類の質問を見つけましたが解決に至っていなかったので質問させていただきます。 当方、Excel2000を使用しています。 サーバー上にある共有フォルダ(Jドライブ)の同じフォルダの中に「A.xls」とリンク参照先のファイル「B.xls」があります。 「A.xls」のセルに、「B.xls」を開くためのハイパーリンクを、絶対パス(J:\フォルダ名\B.xls)で指定しました。 しかし、「A.xls」を例えばローカルドライブ(Cドライブ)のデスクトップにコピーし、そちらを開いてハイパーリンクをクリックすると、Jドライブにある「B.xls」を開きたいのに、ハイパーリンクが相対パスに変わってしまって、デスクトップ上のB.xlsを探してしまうため「ファイルが見つかりません」と表示されてしまいます。 [ハイパーリンクの編集]で確認したところ、「ファイル名またはWebページ名」欄には絶対パス「J:\フォルダ名\B.xls」を指定したはずなのに「J:\フォルダ名\」の部分が消えてしまい、「B.xls」というファイル名しか残っていませんでした。 Microsoftサポート情報『JP418119:以前のバージョンでハイパーリンクが開けない』の原因欄に『参照元と参照先が同じドライブの場合、ファイルを保存した時点で相対パスに変更されます。』とあったので、システムの仕様なのかもしれませんが、同一フォルダ内にあるファイルでも絶対パスの情報を保持する方法はないでしょうか。 デスクトップにある「A.xls」でハイパーリンクを設定すれば、「B.xls」と別フォルダのためか絶対パスが保持されるのですが、「A.xls」は最終的には「B.xls」と同じフォルダ内に保存しておきたいので、いちいちコピーするのはなるべく避けたいため、同一フォルダ内でも絶対パスの指定を保持する方法を教えてください。

  • EXCELのブック間リンクの自動変更について

    EXCELのブック間リンクの自動変更について C:\aaa に2つのブックがあります。  book1.xls  book2.xls それで  book1.xls のあるセルに以下の計算式があります  ='C:\aaa\[book2.xls]Sheet1'!A1 この2つのファイルを別のPCの任意のフォルダ(例えばD:\eee\)移動した場合、 移動後の上記のbook1.xlsを開くと計算式が  ='D:\eee\[book2.xls]Sheet1'!A1  に自動で変わってます。 これはどういう仕組みでしょうか? 常にこうなるのかどこかの設定で 自動or手動など変えられるのでしょうか? 先方にメールで送るのですが、先方側でパスが自動で変わってくれるのか が心配です。どなたか教えて頂けませんか?  

  • EXCEL 別ブックへ転記する方法

     たとえば、入力シート.xls - sheet1 - A1:A5 に入力した値を 同フォルダ内の台帳A.xls - sheet1 - E1:E5 に  さらには、入力シート.xls - sheet1 - B1:B5 に入力した値を 同フォルダ内の台帳B.xls - sheet1 - E1:E5 に・・・ 転記する方法を教えてください。 リンク貼り付けとファイルを開く以外の方法をよろしくお願いします。 VBEは可能です。ACCESSは使用不可です。 使用環境は32bitWindowsXP Excel2003 です。 よろしくお願いします。

  • ブックの共有をしているexcelファイルの複製

    ブックの共有を設定しているbook1.xlsというexcelファイルがあります。 ブックの共有を行なっているとだんだんデータサイズが肥大化してくるので、その対策として 【1】"book1.xls"のシート単位で全て新しい"book2.xls"にコピーする。 【2】"book1.xls"を別のフォルダへ移動。 【3】"book2.xls"の名前を"book1.xls"に変え、ブックの共有設定を行う。 ということをしています。 これらの作業を自動で行えたらと思うのですが、 タスクスケジューラー?.batファイル?VBA?など、何をどう組み合わせたらよいのかがよくわかりません。 アドバイスよろしくお願いします。