ExcelのSheetの情報を使用して別のSheetを表示する方法と、Sheet名の情報を採集する方法について

このQ&Aのポイント
  • ExcelのSheetの情報を使用して別のSheetを表示する方法と、そのためにマクロを使用する方法について説明します。また、Sheet名の情報を採集する方法についても解説します。
  • ExcelのSheetの情報を使用して別のSheetを表示する方法として、マクロを使用することが可能です。具体的なマクロの書き方についても説明します。
  • ExcelのSheetの情報を使用して別のSheetを表示するためには、マクロを使用すると便利です。また、Sheet名の情報を採集する方法についても解説します。
回答を見る
  • ベストアンサー

excel:あるsheet Bからその中の情報で別のsheetを表示する。

(問題概要)あるsheet Bからその中の情報で別のsheetを表示する。 Mydocの中のAというフォルダに、ExcelのBOOKが複数個(A1~A5とB)あり、また各bookには複数個のシートが入っています。 ブックBの中に表形式で   B.xlsのsheet1   (表) 各book名 各sheet名 A1.xls     A1-1sheet  A1.xls A1-2sheet A1.xls A1-3sheet A2.xls A2-1sheet ~ A5.xls   A5-1sheet A5.xls   A5-2sheet などと入っています。 やりたいことは、この表のsheetの所などをクリックしたときに(方法はプログラムを作り安い方法でよいのですが)、当該シートを開き表示するようにしたいが、マクロがいいですか。その場合マクロはどんなふうに書けばいいでしょうか。 またBの表を作るため、BOOK内のsheet名の情報を採集する(コピー)方法はありますか

  • taktta
  • お礼率72% (1031/1430)

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

  • ベストアンサー
  • pauNed
  • ベストアンサー率74% (129/173)
回答No.2

ごめんなさい。式間違ってますね^ ^;正しくは =HYPERLINK("[C:Mydoc\A\"&A2&"]'"&B2&"'!a1",B2) 『&』が1コ余計でした... ついでに。 マクロが置いてあるBookと同じフォルダ内のxlsBookをリストアップします。 とりあえずサンプルなので新規Sheetを追加して書き出します。 Sub sample()   Dim fol As String   Dim fnm As String   Dim sh As Worksheet   Dim i As Long, n As Long   Dim v(), x()   fol = ThisWorkbook.Path & "\"   If MsgBox(fol & " の処理を行います。OK?", vbOKCancel) = vbCancel Then Exit Sub   With Application     .ScreenUpdating = False     .EnableEvents = False     .Calculation = xlCalculationManual   End With   fnm = Dir(fol & "*.xls")   Do Until Len(fnm) = 0&     If Not fnm Like ThisWorkbook.Name Then       With Workbooks.Open(Filename:=fol & fnm, updatelinks:=False, ReadOnly:=True)         i = i + 1         For Each sh In .Worksheets           n = n + 1           ReDim Preserve v(1 To 1, 1 To n)           ReDim Preserve x(1 To 1, 1 To n)           v(1, n) = fnm           x(1, n) = "=HYPERLINK(""[" & fol & fnm & "]'" _                 & sh.Name & "'!a1"",""" & sh.Name & """)"         Next sh         .Close savechanges:=False       End With     End If     fnm = Dir()   Loop   If n > 0 Then     With Worksheets.Add       .Range("a1").Resize(n).Value = Application.Transpose(v)       .Range("b1").Resize(n).Formula = Application.Transpose(x)     End With   End If   With Application     .Calculation = xlCalculationAutomatic     .EnableEvents = True     .ScreenUpdating = True   End With   MsgBox i & " Books & " & n & " Sheets" & vbLf & "処理終了" End Sub うまくいかなかったらごめんネ^ ^;

taktta
質問者

お礼

うまくいきすぎました。目的達成150% すばらしいですね。 どうもありがとうございました。

その他の回答 (1)

  • pauNed
  • ベストアンサー率74% (129/173)
回答No.1

こんにちは。表ができている状態であれば、HYPERLINK関数を使えば比較的簡単だと思います。 C2セルに=HYPERLINK("[C:Mydoc\A\&"&A2&"]'"&B2&"'!a1",B2) な感じで。 マクロ処理の場合も式を埋め込むようにしたらいいかと思います。 >sheet名の情報を採集 するところからつくるとすれば、 ブック数、シート数がそれほど多くなければ 1)特定のフォルダに対してVBAのDir関数を使って1つずつExcelブックを開く。  この時、画面更新やイベントを抑制してマクロの実行速度をあげる。 2)開いたブック内の全シートをForEach...Nextステートメントを使ってループ処理する。 3)書き出しシートを変数に格納しておいて、2行目からBook名と関数を埋め込んでいく。  関数部分は例えば  シート.Cells(i,2).Formula = "=HYPERLINK(""[C:Mydoc\A\" & ファイル名 & "]'" _                & シート名 & "'!a1"",""" & シート名 & """)" な感じで。 また、配列を使うスキルがおありなら、さらに処理時間は短縮できると思います。

taktta
質問者

お礼

回答2でのフォローごていねいに、ありがとうございます。 少し間違いがあったほうがこちらも調査し勉強になります。

関連するQ&A

  • フォルダ内のxlsをシートごとに別ファイルにしたい。

    現在開いているブックのシートごとにブックにするマクロはあったのですが フォルダ内のブックを一気にばらすことはできませんか? ---元--- ./甲.xls(シートa,シートb,シートc) ./乙.xls(シートa) ./丙.xls(シートa,シートb) ---元--- ---先--- ./甲a.xls(シートa) ./甲b.xls(シートb) ./甲c.xls(シートc) ./乙.xls(シートa) ./丙a.xls(シートa) ./丙b.xls(シートb) ※シート名もしくはseqをつけて分割 ---先--- まとめてPDFを作ろうかとしたら複数シートがうまく行かないので 1ブック1シートの形式にできればと思ってます。 (通常時は複数シートがいいので1ファイルづつ作業は考慮したくない) できましたらお願いいたします。

  • 別のブックから、特定のシートを指定して他のブックを開くには

    マクロ初心者です。 A.xlsと、B.xlsという2つのブックがあります。 B.xlsはこの時、閉じた状態です。 Aには1つのシートのみがあって、Bには日毎に追加されていく不特定数のシートがあります。 Aのブックのシート内のセル番地A1に、「aaa」と入力した場合、B内の「aaa」という名前のシート名を指定してB.xlsを開くマクロはどう書いたら良いのでしょうか。 頼りきりの質問になってしまって申しわけございません。 何卒宜しくお願い申し上げます。

  • VBA(Excel):他のブックからシートごと取込みたい

    他のブックからシートを取込む(シート名を変更して)VBAがわからないのですが、どなたか詳しい方がいましたら、ご教授下さいませ。 以下を例として、ご回答いただけると幸いです。 よろしくお願いします。 ---------------------------------- 次の3つのブックが存在するとします。 a.xls b.xls c.xls a.xlsにはシートが1つだけあり、シート名は"sheet1"です。 b.xlsにはシートが1つだけあり、シート名は"sheet1"です。 c.xlsにはシートが3つあり、シート名は"sheet1"、"sheet2"、"sheet3"です。 a.xlsにVBAマクロを作り、a.xls上で実行させて、 a.xlsの"sheet1"は残したまま、 b.xlsの"sheet1"のシート名を"sheet1-b"に変更して、 a.xlsのシートとして取込み、 同様に今度は、 a.xlsの"sheet1"、"sheet1-b"は残したまま、 c.xlsの"sheet1"のシート名を"sheet1-c"に変更し、 c.xlsの"sheet2"のシート名を"sheet2-c"に変更し、 c.xlsの"sheet3"のシート名を"sheet3-c"に変更し、 a.xlsのシートとして取込み、 最終的に、a.xlsには、 "sheet1"、"sheet1-b"、"sheet1-c"、"sheet2-c"、"sheet3-c" の、5つのシートが存在するようにしたいのです。 (各シート上のデータは、a.xlsの各シートとしてすべて移行されている) ----------------------------------

  • EXCELでのシートの再表示(マクロ)

    あるエクセルのブックで、マクロを使い、複数のシートを非表示にしていました。 うっかり、そのマクロを削除してしまいました。 非表示にしたシートを、再表示する方法をお教えください。 なお、非表示にしたシートは、複数あり、シート名も不確かです。 よろしくお願いします。

  • エクセルのマクロでシートを表示させる

    マクロ初心者です。 1つのブックに20シート入っているのですが、 チェックBOXにチェックを付け、該当するシートのみを表示させるマクロを教えてください。 sheet1以外の下記のシートA~Dは非表示になっており sheet1にはシート名 A B C D というチェックBOXがあり、 例えば、Bにチェックを入れるとBのシートが表示され、 AとDなど複数チェックが入るとチェックしたシートが表示される様な マクロがありましたら、教えてください。 マクロの記録で読み込ませているのですが、複数シートの為、限界を感じております。 よろしくお願い致します。

  • EXCEL2003で別ブックのシートの名前の定義を使いたいのですが

    EXCEL2003を使っています。 A.xlsというブックのAAAというシートに「商品」という名前の定義をしたテーブルがあります。このシートAAAをB.xlsというブックにコピーし、B.xlsのシートBBBの中で入力規則の元の値として、VLOOKUPの範囲名として使いたいのですが、入力規則の場合は、「元の値はエラーと判断されます。続けますか?」というメッセージが出て使用できません。 このとき、A.xlsは別場所なので存在しません。名前の定義のあるシートを他のブックにコピーして使用するのは無理でしょうか?

  • 別ブックへのシートのコピー(Excel)

    エクセル上で、Aというブックのaというシートを、Bというブックにコピーしようと思っています。 過去の質問を検索したらNo2459324でわかりやすい解答があったので試してみたのですが、 AとBのブックを画面上で両方開いて、Aブックのaシート上で、「編集」→「シートの移動またはコピー」とすると、確かに小さな入力ボックスがでてくるのですが、その中の「移動先ブック名」の欄にBというブック名が表示されないので、選択先としてBブックを指定できないのです(その欄にブック名の手入力もできません)。 「(新しいブック)」を選択すると、AでもBでもない新しいブックが生成されてそちらにコピーされてしまうようです。 どのようにしたらブックAからブックBにシートをコピーできるでしょうか。

  • 別のbookのシート名を自動に貼り付ける

    http://www2.odn.ne.jp/excel/waza/sheet.html#SEC8 参考にして、シート名をセルに表示させたいです。 参考book [s.xls]シート名はそれぞれa,b,c,とあるとします。 表示させたいbookは[x.xls] こちらのシート名はd,e,fとします。 x.xlsの各シートa1の欄に、s.xlsのシート名を自動で表示させたいです。 dのシートにaのシート名 eのシートにbのシート名 fのシートにcのシート名 2枚目のシートが変更できませんでした。 すべてaのシート名が表示されてしまいます。 =MID(CELL("filename",s.xls$A$1),FIND("]",CELL("filename",s.xls$A$1))+1,31) にしました。 よろしくお願いいたします。

  • エクセル 別ファイルから シートを リンクを張らずに コピーしたい

    エクセル2003 1~4  はファイルの状態の説明です。 やりかたを質問したい部分は 5です。  1、ファイル(ブック)A.xls → 計算式が大量に入った数シートからなるファイル があるとする。 2、A.xls を そのままコピーし コピーされたファイルは B.xls に リネーム。 3、A.xls は 計算式等は変更しないが、データを変更し通常業務で使用。 4、A.xls の新バージョンを作るために B.xls を使って計算式等を編集。 (複数あるシートのうち一部シート(シート名 「あいうえ」 とする)のみの変更に加え さらに新シート「さしすせ」を作成) 5、A.xls のシート名 「あいうえ」をB.xlsで作った シート名 「あいうえ」と置き換え、 さらに新シート「さしすせ」もB.xlsからコピーして追加する。   普通にシート名 「あいうえ」や 新シート「さしすせ」を選択し  コピーを行うと B.xls からリンクを張った状態でコピーされて  しまう。たとえば シート「あいうえ」セルA1の中身を見ると  =[B.xls]あいうえ!A1*2+1 といったように [B.xls]が付いて  コピーされる。  これを回避して、単にそのまま丸ごと(A.xlsの中だけで編集したかのように) シートをコピーするにはどうしたら よいのでしょうか?  長くなってすいません。  よろしくおねがいいたします。  

  • EXCELで別ブックのセルを参照 シートを替える

    EXCEL初心者です。 毎日四苦八苦しているのですが、行き詰ってしまったのでご教授ください。 使用しているブックをA.xlsとして、 別ブックB.xlsのセル参照を、 ='Z:\[B.xls]Sheet1'!$B$1 のようにしています。 この Sheet1 の部分のシート名をA.xlsの、例えばA1に入力することで、 毎回シート名を変えられるようにしたいのですが、 ='[B.xls]( ココ )'!$B$1  ココの部分をどのようにしてよいかがわかりません。 A.xlsのパス名から書けばよいのかなと思ったのですが、 どうもうまくいきません。 何分必要にせまられてEXCEL勉強し始めたばかりです。 初歩的な質問ですが、すみません、よろしくおねがいします。

専門家に質問してみよう