エクセルVBAで特定のファイルの特定の列を並べる方法

このQ&Aのポイント
  • エクセルVBAを使用して、特定のフォルダ内にある特定のファイルの特定の列のデータをコピーして並べる方法について教えてください。
  • フォルダ内の複数のファイルから、「結果」という名前のシートのC4~AU37までのセルに入っているデータをコピーし、「記録集計第3期」ファイルの「年度末結果」シートに並べてコピーする方法について教えてください。
  • エクセルVBAを使用して、特定のフォルダ内の特定のファイルから特定の列のデータをコピーし、別のファイルの特定のシートに並べてコピーする方法について教えてください。
回答を見る
  • ベストアンサー

エクセルVBAに関しての質問です。

エクセルVBAに関しての質問です。 同じフォルダ内に同形式のエクセルファイルが複数あります。そのファイルの特定のシートの中の特定の列のみをコピーして並べたいと思っています。 (1)フォルダはUSBに入れて使ったり、複数のパソコンの中で使われるので特定の場所にあるとは限りません。 (2)フォルダ名はその年度に応じて変更されます。「2009」、「2010」・・・といった具合です。 (3)フォルダ内のファイル数は常に3つで、「記録集計第1期」「記録集計第2期」「記録集計第3期」と名前を付けています。 (4)3つのファイル全てに「結果」という名前のシートがあり、そのシートのC4~AU37までのセルをコピーしたいです。 (5)C4~AU37までのセルには数値では無く、IF関数を使用して出された「◎」「◯」「△」等の文字列が入っています。 (6)コピーしたセルを「記録集計第3期」ファイルの中の「年度末結果」というシートのC2以降に並べてコピーしたいです。 「記録集計第1期」のC4~AU37を「年度末結果」のC2~AU35へ 「記録集計第2期」のC4~AU37を「年度末結果」のAV2~CN35へ 「記録集計第3期」のC4~AU37を「年度末結果」のCO2~EG35へ といった具合です。 (7)作業手順としては、「記録集計第3期」のファイルを開き、その中の「年度末結果」のシートにボタンを作って上記のVBAを動かせたらと思っています。 (8)「記録集計第1期」「記録集計第2期」のファイルは開かずにデータをコピーしたいです。 勝手なお願いで申し訳ございませんが、 お時間がございましたら、よろしくお願いいたします。

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

  • ベストアンサー
  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.4

こんにちは。 あと一息ですね。 A列B列が消えてしまう件ですが、   ThisWorkbook.Worksheets("年度末結果").Cells.Clear の行で、「年度末結果」シート上のセルを最初に全てクリアしています。 ここを消すか、先頭に'を付けてコメントにすれば大丈夫です。 もし、ある特定のセルをクリアしたければ、   ThisWorkbook.Worksheets("年度末結果").Range("C2:F9").Clear にすれば良いです。 列クリアなら   ThisWorkbook.Worksheets("年度末結果").Columns("C:F").Clear などにしてください。

soulset319
質問者

お礼

何から何まで本当にありがとうございました。 完璧です!! すごいです!! これをきっかけにVBAを勉強してみたくなりました。 色々とお世話になりました。 ありがとうございました。

その他の回答 (3)

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.3

#1、#2です。 大事なことを忘れていました。 私のコードはエクセル2003以前を対象とした作りになっています。 もし、エクセル2007を使っているのであれば、 ファイルの拡張子が[.xls]ではなく[.xlsx]になっていますので、    myWbName = "記録集計第" & i & "期.xls" を    myWbName = "記録集計第" & i & "期.xlsx" に変更してください。

soulset319
質問者

お礼

はじめまして、ka_na_deさん。 何度も御丁寧に教えて頂き、本当にありがとうございます。 同じような例が無いかと検索ばかりしていたのですが、 やはり、そう簡単には解決法も見つからず、 あきらめかけていましたが、 こんなに親切に教えて頂けて、本当に本当に感謝しております。 早速、明日にでもチャレンジしてみたいと思います。 ありがとうございました。

soulset319
質問者

補足

ka_na_deさん、すみません。 実際にやってみたのですが、 コピー先のシート『年度末結果』のC2以降へのコピーは完璧だったのですが、 元々入っていたA列とB列の文字が全て消えてしまっていました。 解決できますでしょうか? 甘えてばかりですみません。 お時間がございましたら、教えてくださいませ。 追伸:この文章をお礼のところに書き加えたかったのですが、 補足入力の所で書かせて頂きました。

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.2

#1です。 不具合がありましたので修正します。 <不具合内容>  例えば、「2009」のフォルダーの中の「記録集計第3期」にて  年度末結果を出力しようとした際、「2008」のフォルダーの  中の「記録集計第1期」や「記録集計第2期」が既に開いていた場合、  「2009」ではなく「2008」のファイルの値をコピーしてしまう。 <変更点>  「記録集計第1期」や「記録集計第2期」が開いている場合は、   一旦閉じてから再実行するように警告を出すようにしました。 Sub Test2()   Dim i As Long   Dim flg As Boolean   Dim myWb As Workbook   Dim myWbName As String      Application.ScreenUpdating = False      ChDrive ThisWorkbook.Path   ChDir ThisWorkbook.Path      ThisWorkbook.Worksheets("年度末結果").Cells.Clear      For i = 1 To 3     flg = False     myWbName = "記録集計第" & i & "期.xls"     If myWbName <> ThisWorkbook.Name Then       For Each myWb In Workbooks         If myWb.Name = myWbName Then flg = True       Next myWb       If flg = False Then         Workbooks.Open Filename:=myWbName       Else         Workbooks(myWbName).Activate         MsgBox myWbName & "を閉じてから再実行してください。"         Exit Sub       End If     End If     Worksheets("結果").Range("C4:AU37").Copy     ThisWorkbook.Worksheets("年度末結果").Range("C2").Offset(, 45 * (i - 1)).PasteSpecial Paste:=xlPasteValues     If myWbName <> ThisWorkbook.Name Then       Application.DisplayAlerts = False       Workbooks(myWbName).Close SaveChanges:=False       Application.DisplayAlerts = True     End If   Next i   Application.CutCopyMode = False   Application.ScreenUpdating = True End Sub

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.1

こんばんは。 一例です。 <注意> ・ファイルを開いてから処理してます。  VBAで開いたものは閉じて終了します。 ・コピーの際は、値のみ貼り付けしてます。 Sub Test()   Dim i As Long   Dim flg As Boolean   Dim myWb As Workbook   Dim myWbName As String      Application.ScreenUpdating = False      ChDrive ThisWorkbook.Path   ChDir ThisWorkbook.Path      ThisWorkbook.Worksheets("年度末結果").Cells.Clear      For i = 1 To 3     flg = False     myWbName = "記録集計第" & i & "期.xls"     For Each myWb In Workbooks       If myWb.Name = myWbName Then flg = True     Next myWb     If flg = False Then       Workbooks.Open Filename:=myWbName     Else       Workbooks(myWbName).Activate     End If     Worksheets("結果").Range("C4:AU37").Copy     ThisWorkbook.Worksheets("年度末結果").Range("C2").Offset(, 45 * (i - 1)).PasteSpecial Paste:=xlPasteValues          If myWbName <> ThisWorkbook.Name And flg = False Then       Application.DisplayAlerts = False       Workbooks(myWbName).Close SaveChanges:=False       Application.DisplayAlerts = True     End If   Next i   Application.CutCopyMode = False   Application.ScreenUpdating = True End Sub

関連するQ&A

  • エクセルVBAに関しての質問です。

    エクセルVBAに関しての質問です。 同じフォルダ内に同形式のエクセルファイルが複数あります。そのファイルの特定のシートの中の特定の列のみをコピーして並べたいと思っています。 (1)フォルダはUSBに入れて使ったり、複数のパソコンの中で使われるので特定の場所にあるとは限りません。 (2)フォルダ名はその年度に応じて変更されます。「2009」、「2010」・・・といった具合です。 (3)フォルダ内のファイル数は常に3つで、「記録集計第1期」「記録集計第2期」「記録集計第3期」と名前を付けています。 (4)3つのファイル全てに「結果」という名前のシートがあり、そのシートのC4~AU37までのセルをコピーしたいです。 (5)C4~AU37までのセルには数値では無く、IF関数を使用して出された「◎」「◯」「△」等の文字列が入っています。 (6)コピーしたセルを「記録集計第3期」ファイルの中の「年度末結果」というシートのC2以降に並べてコピーしたいです。ただし、コピーする際に4行ずつ飛ばしてコピーしたいです。 「記録集計第1期」のC4を「年度末結果」のC2へ、C5をC6へ...... 「記録集計第2期」のC4を「年度末結果」のC3へ、C5をC7へ...... 「記録集計第3期」のC4を「年度末結果」のC4へ、C5をC8へ...... といった具合です。 このコピーにより、C2から始まって、C2=記録集計第1期のC4、C3=記録集計第2期のC4、 C4=記録集計第3期のC4ときて、年度末結果のC5には空白の列ができます。 そして、C6からまた続く訳です。 ややこしくてすみません。 (7)作業手順としては、「記録集計第3期」のファイルだけを開き、その中の「年度末結果」のシートにボタンを作って上記のVBAを動かせたらと思っています。 (8)「記録集計第1期」「記録集計第2期」のファイルは開かずにデータをコピーしたいです。 勝手なお願いで申し訳ございませんが、 お時間がございましたら、よろしくお願いいたします。

  • VBAの質問です。

    VBAの質問です。 以下のプログラムで、4列おきにコピーしたい時はどうすればいいでしょうか? 1つのフォルダの中に集約第1期・集約第2期・集約第3期という名前の3つのファイルがあり、 その3つのファイル全てに「結果」というシートがあります。 この「結果」シートのC4:AU37の数値をコピーします。 コピーした数値を、集約第3期のファイルの中にある「集計用シート」のC2から貼り付けしていきたいのですが、 この時に、4列おきにはりつけたいと思っています。 集約第1期ファイル-結果-C4の列→集約第3期ファイル-集計用シート-C2の列から4列おきに 集約第2期ファイル-結果-C4の列→集約第3期ファイル-集計用シート-C3の列から4列おきに 集約第3期ファイル-結果-C4の列→集約第3期ファイル-集計用シート-C4の列から4列おきに といった具合です。 集約第3期ファイル-集計用シート-C5の列は空白し、C6からまた貼り付けます。 どこをどう直せば良いでしょうか? Sub データ抽出() Dim i As Long Dim flg As Boolean Dim myWb As Workbook Dim myWbName As String Application.ScreenUpdating = False ChDrive ThisWorkbook.Path ChDir ThisWorkbook.Path ThisWorkbook.Worksheets("集計用シート").Range("C2:EG35").Clear For i = 1 To 3 flg = False myWbName = "集約第" & i & "期.xls" If myWbName <> ThisWorkbook.Name Then For Each myWb In Workbooks If myWb.Name = myWbName Then flg = True Next myWb If flg = False Then Workbooks.Open Filename:=myWbName Else Workbooks(myWbName).Activate MsgBox myWbName & "を閉じてから再実行してください。" Exit Sub End If End If Worksheets("結果").Range("C4:AU37").Copy ThisWorkbook.Worksheets("集計用シート").Range("C2").Offset(, 45 * (i - 1)).PasteSpecial Paste:=xlPasteValues If myWbName <> ThisWorkbook.Name Then Application.DisplayAlerts = False Workbooks(myWbName).Close SaveChanges:=False Application.DisplayAlerts = True End If Next i Application.CutCopyMode = False Application.ScreenUpdating = True End Sub

  • エクセル フォルダ内の.xlsファイルの集計

    エクセルで、複数の.xlsファイルの特定セルを集計するマクロを組みたいのですが、VBA勉強しはじめでうまくいかず、皆様の知識をお借りできればありがたいと思い質問させていただきます。 作業としては あるフォルダに複数の.xlsファイル(それぞれのファイルは同一形式で、sheet1およびsheet2は作業用シート。sheet3以降がデータの入ったシートとする)を置いておき、それぞれのデータ入りシート(シート数はファイルにより異なる)の特定セルを集計したものを、新たなブックに書き込む という形です。 その際に、各シートの特定セルの内容により出力するセルを変えたいと思っています。 実際には、 AAA.xlsというファイルの3枚目以降のシートで、L2セルに「B」と記述があれば別ブックのB3セルに、「C」と記載されていれば別ブックのC3セルに、それぞれD4セルの数値を集計する。 次にBBB.xlsというファイルに関しても同様に集計し、その結果はB4セルとC4セルに出力する これを当該フォルダに入っているファイル全てについて行う ※L2セルには「B」「C」以外の文字は入りません。 こういった作業ができればと思っています。 お時間のある方がおられましたら、ご教授いただけますでしょうか。 参考になるサイトなどがありましたら、アドレスだけでも御教えいただけると幸いです。 質問の仕方が悪いようでしたら、ご指摘いただければ再度説明させていただきます。拙劣な説明ですがどうかよろしくお願いします。

  • エクセルで同じ様式のファイルを集計するには「VBA

    某会社の総務系の者です。 エクセルのsheet1に以下のような5行、4列の表を作り(課の名称もA1セルに入れてもらいます)、80個ほどの部署にそれを送り入力してもらい、それをこちらで1枚のシートに集計することになったのですが、困っています!どうかお力を貸してください。m(__)m ○○課            21年度   22年度   23年度   「あああ」の人数 「いいい」の人数 「ううう」の人数 「えええ」の人数 集計シートもこちらで作るので決められた様式はありませんが、集計したい項目としては、組織全体(80個ほどの部署)の21年度、22年度、23年度ごとの「あああ」「いいい」「ううう」「えええ」それぞれの合計人数です。 VBAを使うとするとどのように書けば良いでしょうか? ファイルを開くのも、課ごとにデータを取得するのも自動でできたらなと思っています。 なお、私は、各部署に送るファイルのsheet2にsheet1の表に入力してもらったデータを以下のような横長の2行に飛ばそうかと考えています。(素人意見なのでわかりませんが、VBAで処理をするにしてもsheet1から直接よりもそのほうが集計がしやすいうよいな気がするので。)      21年度     22年度      23年度     21年度     22年度   23年度・・○○課 あああの人数 あああの人数   あああの人数 いいいの人数 いいいの人数 いい・・ どうか、よろしくお願いいたします!      

  • excel vba 作成について教えて下さい。

    excel VBAを使ってあるブックのセル範囲を別のブック(日報.XLS)のシートへコピー貼り付けをしたいのですが、コピーする側のブックがランダムに取り込まれ(例 8時間ピッチにて自動的にブックが作成される)そのブックを日にちごとに集計し、一か月ごとにまとめるということをやらなければなりません。 例)8時間ごとにフォルダが作成されます。   000001.XLS 000002.XLS   00000F.XLS ・・・・・・・・16進数にて   上記ブックのSheet1のA2:A11までの数値を別のブック(日報月報集計)のに貼り付ける。 別のブック(日報月報集計)は項目ごとに10個のシートがあり 8時間ごとのファイルのセルA2は別ブックのSheet1の日付けに対応するセルへ貼り付け B2は       Sheet2 上記操作を8時間ごと(可変可能)に自動的にコピー貼り付けをやりたいのですが ブック間のコピー貼り付け等わからないことが(初心者です。)多々あり、いろいろ調べてはいるのですが、STOPした状態です。 出来れば、初心者にも理解しやすい解説等あれば宜しくお願いします。

  • EXCELのVBAで質問があります。

    EXCELのVBAで質問があります。 次の処理を実現しようと、  1.テンプレート的なファイルを用意する。  2.作業ファイルの作業シート(VBA組み込み有)を    初期化するために「1」のファイルからセルをコピーする    ※マクロがあるため、単純なシートコピーは出来ない 以下のようにコーディングしました。  objXls = CreateObject("Excel.Application")  objXlsWorkBook = objXls.Workbooks.Open("C:\Template.xls")  objXlsSheet = objXlsWorkBook.Sheets("テンプレートシート")  objXlsSheet.Range("1:10").Copy  ActiveWorkbook.Worksheets("作業シート").Range("1:10").PasteSpecial すると、コピーした内容がオブジェクト(図)として貼り付けられました。 どうすればオブジェクトではなく、セルとしてコピーが可能になるのでしょうか。 「Workbooks.Open("C:\Template.xls")」としてもいいのですが、 ファイルが見えてしまうのが都合が悪いのです。 どうかよろしくお願いします。

  • VBA 複数ブックへ書き込み

    VBA初心者です。 1つのフォルダ内にある100(ファイル名001から100)個のエクセルファイル(ブック)の特定の場所(すべてのエクセル ファイルはファイル名は違うが、同一のシート名で同一のセルの構造になっている。 以上に対して、1つのもとになるファイルA(ブック、シート)の特定のセル(同一列の行を上から順次下る)セルの値を先の同一フォルダ内のエクセルファイル100(001~100)個に対して、ブックオープン、特定セルのデリート、特定セルへの書き込み、ブック保存という一連の作業を行いたいです。 多数のファイルから1つの集計ファイルに値を読み込んできて書き込むサンプルはあるようですが、逆に1つのファイルから同一フォルダ内の多数のファイル(ブック)の特定場所に書き込むためのサンプルコードを教えていただけると大変助かります。 以上よろしくお願いいたします。

  • VBA どのように記述すれば良いか教えてください。

    はじめて、質問させていただきます。 まだExcel VBAの勉強を始めたばかりの者です。 下記のようなツールを作ることになったのですが、非常に困っています。どなたかわかる方がみえましたら、どうか教えて下さい。(Excel2003を利用) <すべてAという同じフォルダ内> book1.xls book2.xls ・  ・ book*.xls →ファイル数は変動します。集計.xls以外のファイルはすべて同じシート名で構成されて         います。すべてのファイルのシート名 ”結果”が対象です。 集計.xls →このファイルにマクロを作りたいです。        シート名が1、2、3・・と116まで用意されています。 __________________________________________________________________________________________________________________________________ Aフォルダ内の複数ファイルの同じシート名(”結果”)というシートのみコピーをし、同じフォルダ内のファイル「集計.xls」のシートへ値貼り付けをしたいのですが、 一番初めにコピーしたシートを「集計.xls」の1という名のシートへ値貼り付け、2番目にコピーしたシートは「集計.xls」の2という名のシートへ値貼り付け。。3番目にコピーしたシートは「集計.xls」の3という名のシートへ値貼り付け。。というのを、シート数分繰り返す。。という記述を教えて頂きたいのです。 ループ??ですが、【一番初めにコピーしたシートを「集計.xls」の1という名のシートへ値貼り付け】 次に【2番目にコピーしたシートは「集計.xls」の2という名のシートへ値貼り付け】というのを一連の流れにしてループ処理したいのです。 こんなこと出来るのでしょうか??  初心者とはいえ丸投げは駄目だと、1週間ほどネットやいろいろなテキストで自分で何とかできないかと頑張ってみたのですが、部分部分しか記述できず時間だけが過ぎていき。。すっかり行き詰ってきてしまいました。 どうかお力を貸してください。宜しくお願い致しますm(uu)m

  • Excel VBA

    Excel VBAについて シート1にはデータが入ってます。 G列に日付、L列に商品名、N列に件数。 シート2には集計結果を入力したいです。 セルB2に、日付が10月1日から15日までで、商品名がAの件数の合計。 セルB3は、日付が10月16日から末日まで、セルB4は、日付が11月1日から15日までと半月毎に集計を半年後の末日まで繰返し、B2の数行下には、商品名Bの集計行を作り、その数行下には商品名Cの集計行を作りたいです。 これまでは関数SUMIFSで集計していましたが、複数店舗分のシートの更新・メンテナンスが大変なので、VBAでの集計を考えいろいろ調べてるのですが、方法が思い付かないので、ご教授ください。

  • VBA教えて下さい

    VBA初心者です。 思った結果が出ず手詰まりしました。 こういった場合のコードを教えて欲しいです。 まず、例として エクセルファイル名が 試験1(sheet1) 試験2とします(sheet2) 試験1のsheet1の中にある B1~B100セルの文字をコピーするが セルの背景色が塗られているセルはコピーしない (セルの背景色塗りつぶしなしだけコピーするといった内容です) そして、試験2のsheet2のB1~B100に貼り付けるが空白行は上に詰めるようにする 回答お願いします。