はじめまして。
excel2000ですが・・・
以下の過去ログと類似しているのですが、
http://oshiete1.goo.ne.jp/qa4134321.html
管理表.xlsと同一フォルダ内に、
予定表1.xls (sheet1, sheet予定1, sheet予定2, sheet2)
予定表2.xls (sheet1, sheet予定2, sheet予定3, sheet2)
予定表3.xls (sheet1, sheet2, sheet予定1, sheet予定5)
予定表4.xls (sheet1, sheet予定4, sheet予定2, sheet2)
予定表5.xls (sheet予定2, sheet予定1, sheet1, sheet2)
・
・
・
(管理表.xlsもあります)
が、あるとします。
フォルダ内の全ての「予定表*.xls」ブックの中の「sheet予定*」シートの一定の範囲の値を「管理表.xls」の「sheet1」にまとめたいと思っています。
ここでやっかいなのが、「sheet予定*」は、同一のフォーマットなので、まとめやすいと思ったのですが、セルが結合されていたり、マクロが入っていたりで、なかなか思うようにペーストできません。必要なのは値だけなので、「Sheet予定*」の一定範囲(B4:I4、B5:I5、B6:I6・・・)の値を「管理表.xls」の「sheet1」のそれぞれ1行ずつ(例えばA4:H4、A5:H5・・・)にまとめていきたいです(コピペではなく参照の方がよいのでしょうか)。
自分でやろうとして色々調べながらできたのは、フォルダ内のファイル名「予定表*.xls」の取得のみです。「sheet予定*」の値の参照もやってみましたが、上書きされ、結局最後にコピーした「sheet*」予定のセルの範囲のみが貼り付けられて終わってしまいました。
長々と書いてしまって申し訳ありませんが、わかる方いらっしゃいましたら、ご指導いただきたいと思います。
No.4ベストアンサー
- 回答日時:
ブックのループは出来るとして、それ以外についてのサンプル。
1つのブックをコピーします。
Sheet2はデータのない状態にしておいて下さい。
以下のコードを貼り付けます。
Sub test()
Dim ws As Worksheet
Dim r As Range
Dim v, i As Integer
v = Array("J3", "O3", "G3", "H3")
Set r = Worksheets("Sheet2").Range("A1")
For Each ws In Worksheets
If InStr(ws.Name, "予定") Then
With ws
For i = 0 To 3
r.Offset(, i).Value = .Range(v(i)).Value
Next
r.Offset(1).Resize(32, 17).Value = .Range("B14:R45").Value
Set r = r.End(xlDown).Offset(1)
End With
End If
Next
Set r = Nothing
End Sub
シート名に”予定”が含まれていると、そのシートのデータをSheet2に
代入していきます。
シートが変われば順次Sheet2に続けて代入します。
ご参考になれば。
どうもありがとうございます!
なんか動きました!
ですが、1つ目のファイルは問題なく終わるのですが、2つ目のファイルに行ってから
r.Offset(, i).Value = .Range(v(i)).Valueで止まってしまいます。
実行時エラー'91':
オブジェクト変数またはWithブロック変数が設定されていません。
と、表示されてしまいます。
それと「シート予定*」の他に「シート予定*記入例」みたいなシートが隠れておりまして、そのシートまで拾われてしまいます。でもこれに関してはファイルの検索でも使っていたことだし、ワイルドカードでも使って対応してみようと思います。
丁寧に教えていただきありがとうございます。
助かります!
No.5
- 回答日時:
ANo.4です。
>ですが、1つ目のファイルは問題なく終わるのですが、2つ目のファイルに行ってから
>r.Offset(, i).Value = .Range(v(i)).Valueで止まってしまいます。
ブックのループは一切考慮していませんので、エラーになりますね。
例えば、
Set r = Worksheets("Sheet2").Range("A1")
は
Set r = ThisWorkbook.Worksheets("Sheet2").Range("A1")
とかブックを指定しなければなりません。
また
For Each ws In Worksheets
でも、どのブックのワークシート群なのかを指定しなければなりません。
基本的にサンプルですので、あとはどのように変更してエラーになったのかは、
エラーの発生した文とエラー内容のみではわからない時もあります。
全体のコードの提示が必要かと。
(提示したサンプルそのままでエラーになった場合なら、回答者側でも
検証は出来ますけど)
たびたびご迷惑をおかけしております。
本当に助かります!ありがとうございます!
Set r = Nothingを消したらフォルダ内の検索はうまくいきました!
また、シート名の検索も
If Instr(ws.Name, "予定")Then
から
If ws.Name Like "*予定")Then
に変更し、問題ないと思います。
ただ、ひとつだけ問題があり、sheet予定2のシートだけが、B45~R45のデータが取れないのです。おそらくsheet予定2のB43~R43が空白だからカウントされないんだと思うのですが。もう少し調べてみます!
No.3
- 回答日時:
他の方の回答にあるように、マクロが入っていることは関係ないと思います。
セルの結合が原因でコピペができないのであれば、マクロでセルの結合を解除してコピペすれべいいのではないでしょうか?(開いたファイルを上書き保存せずに閉じれば、元データは変更されません)もしくは、行全体をコピペするという手もあると思いますが、ダメでしょうか?
回答ありがとうございます。
結合を解除してコピペですか。
ということは書式等も初期値にしたほうがよいのでしょうか。
結局欲しいのは値だけなので、書式は関係ないでしょうか。
少し調べてみます。
どうもありがとうございます!
No.2
- 回答日時:
コピペより代入の方がよかったりするかも?
>セルが結合されていたり
どこがどのように結合されてるか見えないのでなんとも。。。
回答いただきありがとうございます。
私も代入の方がいいと思うのですが、配列というのがどうも理解できなくて・・・。
フォルダ内のファイルを検索して順番にファイルを開いていったり、該当シートをアクティブにしたりすることは何とかできたのですが、コピー、しかも限られた範囲のみというのが思うようにできません。最初はシートを管理表.xlsの空白のシートに丸々コピーしようと思ったのですが、セルが結合されていて貼り付けられなかったり、条件を変えてやってみたのですが、シート毎コピーするのはできたのですが、その次に開いたシートをコピーして、前にコピーした上に上書きみたいな状態になってしまい、先に進みません。
最終的には必要データのみを抜きたいので、シートごとのコピーはなるべく避けたいと思います。
「sheet予定*」は全て同一のフォーマットで、結合されていて値を抜き出したいセルは
・予定表1.xlsから始まると仮定して
sheet予定1を選択し・・・
「J3(J3:M3の結合)」、「O3(O3:Q3の結合)」の2箇所で、その2箇所プラス「G3」と「H3(値が"*月度"となっているので、月度を抜いて"*"だけにしたい)」の合計4項目の値を管理表のsheet1の1行目(A1~D4)に、
あとは、B14~R14の値を「管理表Sheet1の2行目(A2~Q2)へ
B15~R15の値を「管理表sheet1の3行目(A3~Q3)へ
B16~R16の値を「管理表sheet1の4行目へ(A4~Q4)へ
・
・
・
B45~R45の値を「管理表sheet1の33行目へ(A33~Q33)
sheet予定2を選択し・・・
「J3(J3:M3の結合)」、「O3(O3:Q3の結合)」の2箇所と、「G3」と「H3(同じく"月度"を抜く)」の合計4項目の値を管理表のsheet1の34行目(A34~D34)に、
あとは、B14~R14の値を「管理表Sheet1の35行目(A35~Q35)へ
B15~R15の値を「管理表sheet1の36行目(A36~Q36)へ
B16~R16の値を「管理表sheet1の37行目へ(A37~Q37)へ
・
・
・
B45~R45の値を「管理表sheet1の67行目へ(A67~Q67)
sheet予定*がなくなるので予定表1.xlsを閉じる
予定表2.xlsを開く・・・
という感じで行いたいのです。
わがままなお願いかもしれませんが、よろしくお願いします。
No.1
- 回答日時:
(1)管理表.xlsにすべての予定表*.xlsをリンク貼付けするとか、(予定表1.xlsのsheet予定1のB4:I4、B5:I5、B6:I6・・・を管理表.xlsのsheet1のA4:H4、A5:H5・・・にリンク張付け→sheet予定2のB4:I4、B5:I5、B6:I6・・・をA10:H10、A11:H11・・・にリンク張付け)
(2)マクロで1予定表毎にファイルオープンして、データを自動でコピペするとか
>結局最後にコピーした「sheet*」予定のセルの範囲のみが貼り付けられて終わってしまいました
コピー→張付け→コピー→張付け・・・で出来ませんか?
>セルが結合されていたり、マクロが入っていたりで
どちらも影響が無いような気がするけど・・・現物見れないんで分かりませんねー
回答いただきありがとうございます。
VBAを使って、使い勝手のよいレイアウトにしようと思ってるので、リンクではなく、コマンドボタンなどで行うと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- その他(プログラミング・Web制作) python文字化けエラーが発生しているようです 3 2022/04/13 19:41
- Excel(エクセル) エクセルカレンダーに予定表を反映したいです。 6 2022/09/30 14:39
- Visual Basic(VBA) VBA active sheetをPDF化して指定フォルダに保存 1 2022/07/07 11:27
- Visual Basic(VBA) VBA 別sheetからの転記なのですが 2 2023/05/22 15:55
- Visual Basic(VBA) VBA Userform転記のみ編集可 1 2023/06/29 11:03
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- Visual Basic(VBA) VBA For Each 〜 複数条件について 3 2022/10/20 20:05
- Visual Basic(VBA) Sheet「状況」から、分類の年齢別カウント数をSheet「D表」へ転記する下記マクロを作っています 7 2022/12/14 17:57
- Excel(エクセル) SUMIFSと日付変換 10 2023/04/16 15:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
●●時頃の頃って 前後何分くら...
-
Outlookで送った会議依頼が相手...
-
ご予定のご提示ありがとうござ...
-
また予定合えばって行く気ない...
-
遊ぶ約束をしていてLINEで予定...
-
人から忘れられる事がかなり多...
-
友達と遊ぶ計画が全く進まない
-
グーグルカレンダーの保存期間...
-
簡単で使いやすい無料の予定表...
-
イタリアンのコース料理に18時...
-
「先約」と「予定」について
-
エクセル スピンボタン切り替え...
-
OutlookとGoogleカレンダーの同期
-
信頼性の高い、予定管理ソフトは?
-
outlookでの予定表の共有
-
野菜の宅急便!すみません…急い...
-
3人で遊ぶ約束しててグループLI...
-
4月23日(日)になったら、何時...
-
スケジュールをみっちり組む方...
-
誘いを断ると「は?なんで?」...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
●●時頃の頃って 前後何分くら...
-
グーグルカレンダーの保存期間...
-
Outlookで送った会議依頼が相手...
-
また予定合えばって行く気ない...
-
遊ぶ約束をしていてLINEで予定...
-
ご予定のご提示ありがとうござ...
-
友達と遊ぶ計画が全く進まない
-
好きな人をGW誘おうと思ってい...
-
人から忘れられる事がかなり多...
-
家庭訪問の時間
-
「先約」と「予定」について
-
GWにどこに出掛ける予定ですか?
-
Googleカレンダーで、終日の予...
-
友達の自分に対する優先順位が...
-
3人で遊ぶ約束しててグループLI...
-
イタリアンのコース料理に18時...
-
同一アカウントにて、Outlookで...
-
Outlookの予定表で
-
掃除の当番日を相手のOutlook20...
-
outlook vba 予定表
おすすめ情報