• 締切済み

エクセル VBAで 各シートの特定セルの一覧の作成

エクセル VBAで 各シートの特定セルの一覧の作成について教えて下さい。 同一フォーマットのシート(20~40シート前後)のエクセルファイルが7個ありまして、 こちらの各シートの特定セルのデータを一覧化したいのです。 色々と調べ以下◆で一覧が作成可能となりました。 以下◆では、モジュールに記載した同一ファイルの全シートの 指定セルデータを”一覧”シートに書き出します。 こちらを、一覧データを取得する独立した1ファイルとし、 ”ファイルを開く”のダイアログを表示させ 任意のファイルを指定し、そのファイルの指定セルのデータを一覧化 したいと思っています。 独立した一覧ファイルと、データ元であるファイルは同一フォルダに あるとは限らないので、 自分で選択できる様にしたいのです。 また、シート名は 07nnnn、08nnnnと決められた名前のつけかたなのですが、 一覧化する対象シートを08から始まる名前のシートとしたいのです。 Application.GetOpenFilename("Microsoft Excelブック,*.xls,テキストファイル,*.txt") で”ファイルを開く”のダイアログは開く様になったのですが、 開いたファイルのデータを読んだ結果となりませんでした。 おそらく、書き方が違ったのだと思います。 エクセルは2003を使用しています。 説明不足、情報不足がございましたら、ご指摘願います。 宜しくお願い致します。 ◆----- Sub 一覧作成() Dim sh As Worksheet, r As Range Const sName = "一覧" Worksheets(sName).Cells.ClearContents Worksheets(sName).Activate Range("B3").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Selection.ClearContents Range("B3").Select Set r = Worksheets(sName).Range("B3") For Each sh In Worksheets If (sh.Name <> sName) Then With sh r.Value = .Name r.Offset(, 1).Value = .Range("H2").Value r.Offset(, 2).Value = .Range("E3").Value r.Offset(, 3).Value = .Range("E4").Value End With End If Set r = r.Offset(1, 0) Next End Sub

みんなの回答

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.2

やりたいことは分かるのですが 今のスキルでは無理なのではと思います 例えば セルA1の値を変数aに代入し 変数aをセルB1へ書き出します a = Range("A1") Range("B1") = a で間違いではありませんが これは省略したものです これを省略しないで表すと a = Application.Workbooks("Book1.xls").Worksheets("Sheet1").Range("A1").Value Application.Workbooks("Book1.xls").Worksheets("Sheet1").Range("B1").Value = a と成ります この基本が分かっていれば、他のシートやブックへの読み込みや書き出しなどの処理も難しいことでは無いと思います

sniff_djur
質問者

お礼

hige_082さん ご回答記入ありがとうございます! >今のスキルでは無理なのではと思います はい、おっしゃられる通りです。。。 ド素人ではありますが、実は既に書かれているVBAですとか webや、本やらを調べ作り始め 欲しい結果のデータが得られる様あれやこれや書き換えて 試しておりました。 かれこれ1ヶ月となり、私の頭で思いつく事が尽きてしまい 質問した次第です。 頂きました情報がヒントで、本日かなり近いところまで 書き換える事が出来ました!少し前進できました。 ありがとうございました!

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>開いたファイルのデータを読んだ結果となりませんでした。 どんな結果になったのか不明ですが、コードを読むと一覧を除くシートの値が書き出されたのだと思います。 08で始まるシートだけを対象にするように修正してみました。 Sub 一覧作成() Dim sh As Worksheet, r As Range Const sName = "一覧" Worksheets(sName).Cells.ClearContents Worksheets(sName).Activate Range("B3").Select Set r = Worksheets(sName).Range("B3") For Each sh In Worksheets If sh.Name <> sName And InStr(sh.Name, "08") = 1 Then With sh r.Value = .Name r.Offset(, 1).Value = .Range("H2").Value r.Offset(, 2).Value = .Range("E3").Value r.Offset(, 3).Value = .Range("E4").Value End With End If Set r = r.Offset(1, 0) Next End Sub

sniff_djur
質問者

補足

hana-hana3さん 早々のご回答ありがとうございます! とても嬉しくありがたいです。 早速試してみました。 シート名08*のデータのみ書き出してくれました。 ありがとうございます。 >開いたファイルのデータを読んだ結果となりませんでした。 現在のファイルは、マクロを書いた同一ファイルのシート内の 指定セルデータを一覧化していますが、 作成したいと考えているのは一覧作成用.xlsファイルを独立したファイルとし 一覧作成用.xlsに作成したマクロでは、ファイルを開く⇒自分でファイルを選択 ⇒選択したファイルの指定セルデータを一覧作成用.xlsへ書き出す 様にしたかったのですが、私が書いたマクロが間違っている様で マクロを書いた同一ファイルのシート内のデータを一覧化した結果 となってしまっていました。 説明が下手で分かりずらくすみません。