[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『別ブックの指定シートにコピー』(bass)
流れ
コピー元のファイル C:\data\csv\170122の中のcsvファイル
コピーを貼り付けるブック C:\data\csv\集計ブック.xlm
1・データの入ったブック10枚を開く、
(下のコードをSub ファイルを開く1〜10まで並べて セル位置も併せて
B1〜B10まで作りました)
セル内にコピー元で参照するファイルのパスをB1〜B10まで入力しています。
2・C:\data\csv\集計ブックのシート1に1に書いたブックのB1セルのファイルを
コピーして貼り付けます
3・コピー元のブックはC:\data\csv\170122←(最後のフォルダ日付)
4・ ※1で説明したコードは2で書いた集計ブックのシートに作りました。
フォルダの中のファイルを開くところまではできましたが
コピーする所でつまづいてます。
集計ブックでできたファイルを開く部分
Sub ファイルを開く1()
Dim fn As String
fn = Range("B1")
Workbooks.Open Filename:=fn
End Sub
B1の箇所を変更してB2〜B10と続けて並べてます。
Dim fn As String
fn = Range("B10")
Workbooks.Open Filename:=fn
End Sub
< 使用 Excel:Excel2010、使用 OS:Windows7 >
シート名が重複しないか懸念ありですが、取りあえず・・・
Sub Copy10CSV() Dim fn As Variant Dim csvBook As Workbook
Application.ScreenUpdating = False
For Each fn In Range("B1:B10").Value 'csv名を順次取得 Set csvBook = Workbooks.Open(Filename:=fn) 'csvを開く
csvBook.Sheets(1).Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) csvBook.Close False Next Application.ScreenUpdating = True
MsgBox "完了" End Sub
(半平太) 2017/06/08(木) 11:29
シート名の重複ですがのB1〜B10セルのファイル名は全部違う名前です。
ファイルの最後にEとTつけて重複しないようにしてます。
セル内の値
B1 C:\data\csv\170122\大阪部品_14時00分_E.csv
B2 C:\data\csv\170122\大阪部品_14時00分_T.csv
B3 C:\data\csv\170122\東京部品_14時00分_E.csv
B4 C:\data\csv\170122\東京部品_14時00分_T.csv
B5 C:\data\csv\170122\福岡部品_14時00分_E.csv
B6 C:\data\csv\170122\福岡部品_14時00分_T.csv
B7 C:\data\csv\170122\未完部品_14時00分_E.csv
B8 C:\data\csv\170122\未完部品_14時00分_T.csv
B9 地名だけ違うファイル名_14時00分_E.csv
B10 地名だけ違うファイル名_14時00分_T.csv
コピー先の指定シートについて、もっと詳細を書くべきでした、ごめんなさい。
8Eや8Tは集計用の作業シートに参照してる名前のシートです、大阪部品Eなら8Eシートのデータを
大阪部品Tなら8Tシートのデータにあって作業シートの参照に使ってます。
B1のC:\data\csv\170122\大阪部品_14時00分_E.csvcsvは
C:\data\csv\集計ブック.xlmのシート名"8E"にコピー。
B2 C:\data\csv\170122\大阪部品_14時00分_T.csvは
C:\data\csv\集計ブック.xlmのシート名"8T"にコピー。
B3 C:\data\csv\170122\東京部品_14時00分_E.csvは
C:\data\csv\集計ブック.xlmのシート名"9E"にコピー。
B4 C:\data\csv\170122\東京部品_14時00分_T.csvは
C:\data\csv\集計ブック.xlmのシート名"9T"にコピー。
B5 C:\data\csv\170122\福岡部品_14時00分_E.csvは
C:\data\csv\集計ブック.xlmのシート名"10E"にコピー。
B6 C:\data\csv\170122\福岡部品_14時00分_T.csvは
C:\data\csv\集計ブック.xlmのシート名"10T"にコピー。
B7 C:\data\csv\170122\未完部品_14時00分_E.csvは
C:\data\csv\集計ブック.xlmのシート名"11E"にコピー。
B8 C:\data\csv\170122\未完部品_14時00分_T.csvは
C:\data\csv\集計ブック.xlmのシート名"11T"にコピー。
B9 地名だけ違うファイル名_14時00分_E.csv
C:\data\csv\集計ブック.xlmのシート名"12E"にコピー。
B10 地名だけ違うファイル名_14時00分_T.csvは
C:\data\csv\集計ブック.xlmのシート名"12T"にコピー。
最後に開いたCSVがとじる流れになります。
よろしくお願い致します。
(bass) 2017/06/08(木) 14:21
開いたシート(コピー元)
Dim fn As String
fn = Range("B1")
Workbooks.Open Filename:=fn
End Sub
指定したブックの指定シート部分に貼り付け後
指定シート1枚相当分書き足して終わらせて、
残り9個ぶんは読み込むセルの値の一部分変更して
指定シート部分を変更して作るつもりでした。
(bass) 2017/06/08(木) 14:44
>完了メッセージもでました、最後に開いたファイルが閉じなかったです。
「完了」が出たなら、開いたCSVは、全て閉じている筈ですけど?
Sub Copy10CSV() Dim fn As Variant, fnLeft As String, fnWithoutEX As String Dim csvBook As Workbook Dim actWsh As Worksheet Dim PathBrDown Dim AreaAry, WshtAry Dim posInAry Dim WsName As String
AreaAry = Array("大阪", "東京", "福岡", "未完") WshtAry = Array(8, 9, 10, 11, 12)
Application.ScreenUpdating = False
Set actWsh = ActiveSheet
For Each fn In Range("B1:B10").Value 'csv名を順次取得 If fn <> "" Then PathBrDown = Split(fn, "\") fnWithoutEX = Replace(PathBrDown(UBound(PathBrDown)), ".csv", "") fnLeft = Left(fnWithoutEX, 2) '地域名(2文字)を取得
posInAry = Application.Match(fnLeft, AreaAry, 0) If Not IsNumeric(posInAry) Then posInAry = 5 End If
WsName = WshtAry(posInAry - 1) & Right(fnWithoutEX, 1)
Set csvBook = Workbooks.Open(Filename:=fn) 'csvを開く
csvBook.Sheets(1).Cells.Copy
With ThisWorkbook .Activate With .Sheets(WsName) .Range("A1").PasteSpecial xlPasteAll .Select .Range("A1").Select End With End With
Application.DisplayAlerts = False csvBook.Close False Application.DisplayAlerts = True End If Next actWsh.Select Application.ScreenUpdating = True
MsgBox "完了" End Sub
(半平太) 2017/06/08(木) 15:53
実行時エラー9インデックスが有効範囲にありません
With .Sheets(WsName)
この行で止まります。
ファイル一つ目を開いてコピー用に全選択してる状態で止まってます。
(bass) 2017/06/08(木) 19:47
>With .Sheets(WsName) >この行で止まります。
止まった時点で、そのWsNameにマウスと近づけると、WsNameが実際に何と言うシート名なのか分かると思います。 その名前のシートが集計ブックに存在しないと言うエラーだと思います。
私の理解では、以下のシート名が存在すると思っているのですが、
8E 8T 9E 9T 10E 10T 11E 11T 12E 12T 実在しないのでしょうか?
それとも、WsNameがそのどれでもない名前になっている、と言うことなんでしょうか?
(半平太) 2017/06/08(木) 20:40
実在しないのでしょうか?
古い集計ファイルと比較して確認します。
ありがとうございます半平太さん
(bass) 2017/06/08(木) 21:26
ちょっと、流れが理解できないのですが・・・
テスト環境にそのシートがあるかどうかは、直ぐ分りませんか?
>8Eや8Tは集計用の作業シートに参照してる名前のシートです、 >大阪部品Eなら8Eシートのデータを大阪部品Tなら8Tシートのデータにあって >作業シートの参照に使ってます
それで、もし本番環境にも実在してないなら、作業シートの参照先が無いと言うことなので、 作業シートの数式が壊れちゃうはず。そんな状態であるハズがないと思っているのですけども。
(半平太) 2017/06/08(木) 23:41
こっちのURLに参考の画像と使用するデータのcsvファイルをいれてます。
参考画像1 (最初にコードを入れて試したブックのシート部分
参考画像2 (テスト用にシートを再現したブック)
参考画像3 (フォルダ内のファイル一覧を置いたシートの画像)
参考画像4 (参考画像3で使った一覧取得のコードの画像
フォルダ(名前170604)
中に参考画像で使ってるデータ入りのCSVファイルです。
もしまだ続けて頂けるのなら使ってください。
https://www.dropbox.com/s/vy0bxdkbzx915ms/%E8%B3%87%E6%96%99.zip?dl=0
(bass) 2017/06/09(金) 04:38
>似たシート名が多い
そうなんですか。
因みに、B列にファイル名が入力されている「シート1」の実際のシート名は何ですか?
>またコピー元のファイル名も原因となりそうだった
2回目のコードは、データ部分だけコピーするものなので、 コピー元のファイル名は何であっても、無害です。
>画像をつくりました。みてください。
申し訳ないですが、ネットからファイルを開くようなことは 出来るだけ避けております。
(半平太) 2017/06/09(金) 09:56
>B列にファイル名が入力されている「シート1」の実際のシート名は何ですか?
シート1は「ファイル一覧」です。
最初につかった集計と作業に使ったブックのシート名です
まるで囲んだ数字に変化して「まるでかこんだ8」〜「まるでかこんだ12」や
「まるで囲んだ8E1」〜「まるで囲んだ12E1」や「作業8」〜「作業12」などシートの
名前に同じ数字の重複する箇所を含んでブック内で使ってました。
※まるで囲んだ数字がここのコメント使用で?表記に変わるためまるで囲んだと書いてます。
>またコピー元のファイル名も原因となりそうだった
ファイルの名前 使用CSVファイル
地名漢字2個+アルファベット1個+数字2個(01〜12)+_(アンダーハイフォン)+時刻(00時00分)
+_(アンダーハイフォン)+S.csv
ファイル名に14文字
詳しく違いを書きます。
大阪部品_14時00分_E.csv →大阪P08_14時00分_E.csv
大阪部品_14時00分_T.csv →大阪P08_14時00分_T.csv
大阪部品_14時00分_E.csv →大阪P09_14時00分_E.csv
大阪部品_14時00分_T.csv →大阪P09_14_時00分_T.csv
大阪部品_14時00分_E.csv →大阪P10_14時00分_E.csv
大阪部品_14時00分_T.csv →大阪P10_14_時00分_T.csv
大阪部品_14時00分_E.csv →大阪P11_14時00分_E.csv
大阪部品_14時00分_T.csv →大阪P11_14_時00分_T.csv
大阪部品_14時00分_E.csv →大阪P12_14時00分_E.csv
大阪部品_14時00分_T.csv →大阪P12_14_時00分_T.csv
ファイル名の中にP8〜P12までの数字があったので原因です、ごめんさい。
地名の漢字は全部で10個全部2文字の漢字です。
ファイル一覧でB1セル〜B10セルないの中は順番に並べてます。
大阪P08_14時00分_E.csv
大阪P08_14時00分_T.csv
大阪P09_14時00分_E.csv
大阪P09_14時00分_T.csv
大阪P10_14時00分_E.csv
大阪P10_14時00分_T.csv
大阪P11_14時00分_E.csv
大阪P11_14時00分_T.csv
大阪P12_14時00分_E.csv
大阪P12_14時00分_T.csv
こういう形にはなってません。
大阪P08_14時00分_E.csv
大阪P08_14時00分_T.csv
東京P12_14時00分_E.csv
東京P12_14時00分_T.csv
大阪P12_14時00分_E.csv
大阪P12_14時00分_T.csv
東京P11_14時00分_E.csv
大阪P11_14時00分_T.csv
大阪P09_14時00分_E.csv
大阪P09_14時00分_T.csv
大阪P08_14時00分_E.csv (末尾EファイルのデータはA1〜G200の範囲です)
大阪P08_14時00分_T.csv (末尾TファイルのデータはA1〜AB50の範囲です)
Excelのバージョン2010を使ってます。
(bass) 2017/06/09(金) 16:49
>B1 大阪部品_14時00分_E.csvは シート名"(8)E"にコピー ※大阪だから(8)E >B3 東京部品_14時00分_E.csvは シート名"(9)E"にコピー ※東京だから(9)E
※○囲み数字は、(カッコ)書きにしてあります。
上が以前の説明ですよね? 修正後はどうなるんですか?(地名は関係なくなるんですか?)
B1 大阪R08_14時00分_E.csv は シート名"(8)E"にコピー ?※R08だから(8)E B3 東京Z11_14時00分_T.csv は シート名"(11)T"にコピー ?※Z11だから(11)T
>こういう形にはなってません。
10個の地名は、全て同じで、複数の地名が混ざることはないと言う意味ですか? いずれにしても、地名は(2文字存在しているだけで)処理に関係ないのですね?
(半平太) 2017/06/09(金) 19:46
R数字08 + 末尾E なので シート名8Eにコピー
Z数字11 + 末尾T なので シート名11Tにコピー
そういうことです。
ファイル名の地名の説明(貼り付ける元データに場所データ情報が入っていなので使ってます、OKなんです)
地名の漢字2文字部分が必要な理由は、作業シートで参照して使う時にどこの地域データか不明にしないためです。でもデータ部分に地名の場所データがないので。
ブックに作ったシートは「8E」「9E」「10E」「11E」「12E」と「8T」「9T」「10T」「11T」「12T」 合計10種類
ここに地名で東京のファイルのデータだけ貼り付けて、作業シートから参照して、東京だけのデータにまとめて印刷する流れです、関係あるといえばあります。ファオルダパス一覧表示したセルの順番でこの同じ地名
ファイルだけにできたので
「大阪」や「東京」も他の地名もファイルが混ざらないように、振り分けできるに着けてます。
>10個の地名は、全て同じで、複数の地名が混ざることはないと
言う意味ですか?
一つのファイルに、一つの地名をファイルの先頭につけてるだけです。
地名を2つ以上繋げて書いたり「大阪福岡」「新潟東京広島」などと使ってません。
>いずれにしても、地名は(2文字存在しているだけで)処理に関係ないのですね?
ないです。
(bass) 2017/06/09(金) 21:13
(1)シート名ファイル一覧 B1からB10のフォルダパスの入ったセル
※毎回シート名ファイル一覧のB1〜B10範囲セル内
(2)セルのファイル名
大阪P08_14時00分_E.csv
大阪P08_14時00分_T.csv
大阪P09_14時00分_E.csv
大阪P09_14時00分_T.csv
大阪P10_14時00分_E.csv
大阪P10_14時00分_T.csv
大阪P11_14時00分_E.csv
大阪P11_14時00分_T.csv
大阪P12_14時00分_E.csv
大阪P12_14時00分_T.csv
※地名は必ず同じ、P+数字(01〜12まで)時刻部分は変わりますが(1)の最初のセル入力で並べ替え済み
ファイル末尾のアルファベットは「E」と「T」の2種類
(3)指定シートにコピー
ブックに有るシート名 「8E」「9E」「10E」「11E」「12E」と「8T」「9T」「10T」「11T」「12T」
8E ファイル名の中にあるP以降の数字08 + 末尾アルファベットEへ
9E ファイル名の中にあるP以降の数字09 + 末尾アルファベットEへ
10E ファイル名の中にあるP以降の数字10 + 末尾アルファベットEへ
11E ファイル名の中にあるP以降の数字11 + 末尾アルファベットEへ
12E ファイル名の中にあるP以降の数字12 + 末尾アルファベットEへ
8T ファイル名の中にあるP以降の数字08 + 末尾アルファベットTへ
9T ファイル名の中にあるP以降の数字09 + 末尾アルファベットTへ
10T ファイル名の中にあるP以降の数字10 + 末尾アルファベットTへ
11T ファイル名の中にあるP以降の数字11 + 末尾アルファベットTへ
12T ファイル名の中にあるP以降の数字12 + 末尾アルファベットTへ
(bass) 2017/06/09(金) 21:32
>ブックに作ったシートは「8E」「9E」「10E」「11E」「12E」と「8T」「9T」「10T」「11T」「12T」 合計10種類
そこも分からないです。
こんな説明がありました。 ↓ >地名漢字2個+アルファベット1個+数字2個(01〜12)+_(アンダーハイフォン)+時刻(00時00分) >+_(アンダーハイフォン)+S.csv
数字は(01〜12)となっているので、12x2(EとT)で合計24種類じゃないですか?
「テスト環境では」ですか? (本番は24種類?)
(半平太) 2017/06/09(金) 22:15
>数字は(01〜12)となっているので、12x2(EとT)で合計24種類じゃないですか?
> 「テスト環境では」ですか?
シート10種類です。
数字は08〜12です訂正します。元ファイルでも使ってるのは08〜12です。
(bass) 2017/06/09(金) 23:14
○囲み文字が正常に表示されないので、(カッコ書き)にしています。 その部分は、そちらで書き換えてください。(上から10行目辺りにあります)
Sub Copy10CSV() Dim fn As Variant, fnLeft As String, fnWithoutEX As String Dim csvBook As Workbook Dim actWsh As Worksheet Dim PathBrDown Dim WshtAry Dim WsName As String ' ここ、○囲み文字を(各一文字)入れ替えてください。 ※ダブルクォーテーションは必要 ' ↓ WshtAry = Array("(8)", "(9)", "(10)", "(11)", "(12)")
Application.ScreenUpdating = False
Set actWsh = Sheets("ファイル一覧")
For Each fn In actWsh.Range("B1:B10").Value 'csv名を順次取得
If fn <> "" Then PathBrDown = Split(fn, "\") fnWithoutEX = Replace(PathBrDown(UBound(PathBrDown)), ".csv", "") fnLeft = Mid(fnWithoutEX, 4, 2) '数字(2文字、4,5桁目)を取得
fnLeft = WshtAry(fnLeft - 8) WsName = fnLeft & Right(fnWithoutEX, 1)
Set csvBook = Workbooks.Open(Filename:=fn) 'csvを開く
csvBook.Sheets(1).Cells.Copy
With ThisWorkbook .Activate With .Sheets(WsName) .Range("A1").PasteSpecial xlPasteAll .Select .Range("A1").Select End With End With
actWsh.Range("A1").Copy 'クリップボードを軽くする為だけ csvBook.Close False End If Next
Application.CutCopyMode = False actWsh.Select Application.ScreenUpdating = True
MsgBox "完了" End Sub
(半平太) 2017/06/09(金) 23:58
(bass) 2017/06/10(土) 07:18
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.