Excel VBAでエクセルファイル間の列のコピーがうまくいかない

このQ&Aのポイント
  • 2つのエクセルファイルの特定の列を別のエクセルファイルの行にコピーするプログラムを作成していますが、うまく動作しません。1つのファイルは正常に貼り付けされますが、もう1つのファイルの特定の列が正しく選択されません。
  • 現在、5つのシートでテストしており、各シートには12列あります。ただし、実際のファイルには255シートあります。一時的に列Cのみを使用しています。
  • 作成したプログラムの一部分を以下に示します。2つのエクセルファイルの特定の列をコピーし、新しいファイルの特定の行に貼り付ける処理があります。問題は3つ目のファイルの2番目のシートからの選択方法です。正しく指定されているはずの範囲が、意図しない範囲になってしまいます。
回答を見る
  • ベストアンサー

Excel vba selectが効かない

2と3の2つのエクセルファイルがあります。縦の列を新しいファイルの横の行に コピーしていきたいプログラムです。 2のファイルの1シート目の"C8:C25" 3のファイルの1シート目の"C9:C65" を新しい1のファイルの1シート目の1行目にコピーするプログラムを 作っていますが1シート目はpasteされるのですが 3のファイル2シート目からselectの指定が"C9:C65"ではなく、B9からQ65の指定になってしまい思ったコピーができません(★のところ)、1シート目はうまくいっているのでどうして3のファイルの2シート目のからうまくいかないかわかりません。 5シートまででテストをしているのですが実際は各々255シートありもってくる列も 12列あります。とりあえずCの列だけ5シートで試してみています。 Dim i As Long Dim N As Long i = 1 N = 1 Do While i <= 5 ''C列''' Workbooks(2).Worksheets(i).Activate   '2のファイル Worksheets(i).Range("C8:C25").Select   'もってくるところ Selection.Copy Workbooks(1).Worksheets(1).Activate   '1新しいファイル Range("C" & N).Select   '貼り付けるところ Selection.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, skipblanks:=False, Transpose:=True Workbooks(3).Worksheets(i).Activate   '3のファイル Workbooks(3).Worksheets(i).Range("C9:C65").Select  '★もってくるところ Selection.Copy Workbooks(1).Worksheets(1).Activate   '1新しいファイル Range("U" & N).Select   '貼り付けるところ Selection.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, skipblanks:=False, Transpose:=True i=i+1 N=N+1 LOOP

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1608/2445)
回答No.3

No2の余計なお世話の追加です。 No2はデータのコピペのイメージを残したコード(実際はコピペではありませんが)ですが、それを省いて直接代入するようにしてもいいと思います。 Sub Test() Dim i As Long Dim N As Long i = 1 N = 1 With Workbooks(1).Worksheets(1) Do While i <= 5 ''C列''' .Range("C" & N).Resize(1, 18).Value = WorksheetFunction.Transpose(Workbooks(2).Worksheets(i).Range("C8:C25").Value) .Range("U" & N).Resize(1, 57).Value = WorksheetFunction.Transpose(Workbooks(3).Worksheets(i).Range("C9:C65").Value) i = i + 1 N = N + 1 Loop End With End Sub

DPS-DPS
質問者

お礼

.selectをやめて.copyにしましたら正常に 動きました。ありがとうございます。 とても助かりました。

その他の回答 (2)

  • kkkkkm
  • ベストアンサー率65% (1608/2445)
回答No.2

> 開いた順のWorksheets(1)でファイル名は指定していません。 質問のコードの部分だけで見るとちょっと怖い気もします(私の場合Workbooks(1)はPERSONAL.XLSBになります) Selectがおかしいのは、連続でコピペすると環境によっては変なエラーになったりしますのでその影響かもしれません(Selectではありませんが過去に変なエラーになるという事例がありましたその時はDoEvents()を入れて良くなったみたいでした) 余計なお世話だと思いますが、改善されない場合以下のようにしてみてはいかがでしょう。 Sub Test() Dim i As Long Dim N As Long Dim TmpData1 As Variant, TmpData2 As Variant i = 1 N = 1 With Workbooks(1).Worksheets(1) Do While i <= 5 ''C列''' TmpData1 = Workbooks(2).Worksheets(i).Range("C8:C25").Value 'もってくるところ .Range("C" & N).Resize(1, 18).Value = WorksheetFunction.Transpose(TmpData1) '貼り付けるところ TmpData2 = Workbooks(3).Worksheets(i).Range("C9:C65").Value '★もってくるところ .Range("U" & N).Resize(1, 57).Value = WorksheetFunction.Transpose(TmpData2) '貼り付けるところ i = i + 1 N = N + 1 Loop End With End Sub

DPS-DPS
質問者

お礼

ありがとうございました。

  • kkkkkm
  • ベストアンサー率65% (1608/2445)
回答No.1

こちらでテストしたところ正常にコピペできました。 コードは標準モジュールにあるとして、Workbooks(1)などは本来のブック名にしてるんですよね。 Workbooks(3).Worksheets(i).Range("C9:C65").Select   で止めて選択された範囲がB9からQ65だったということでしょうか。 たとえば Worksheets(i).Range("C8:C25").Select   'もってくるところ Selection.Copy を Worksheets(i).Range("C8:C25").Copy のように.PasteSpecialの所も含めて全て変更してみてはいかがでしょう。

DPS-DPS
質問者

お礼

ありがとうございました。

DPS-DPS
質問者

補足

回答ありがとうございます。 「Workbooks(1)などは本来のブック名にしてるんですよ」 は開いた順のWorksheets(1)でファイル名は指定していません。 「Range("C9:C65").Select」の指定を止めてみると ("B9:Q65")が SELECTされているのです。 2ファイル目はうまくコピーできてまして3ファイル目のRange("C9:C65").Select がおかしいのでご指摘のようにCOPYで試してます。

関連するQ&A

  • マクロでフォントサイズを縮小するには!?

    現在、エクセルのマクロを勉強しています。 文字数がある一定を超えるとフォントサイズを縮小したいのですが、 どうもうまくいきません。 下記のような場合はどうしたらいいのでしょうか?? file_name= "aa.xls" data_sheet= "data" Windows(file_name).Activate Worksheets(data_sheet).Activate Workbooks(file_name).Worksheets(data_sheet).Cells(i, 2).Select Selection.Copy Windows(file_name).Activate Worksheets(print_sheet).Activatee Workbooks(file_name).Worksheets(print_sheet).Range("J20").Select /* ここに フォントサイズを入れたらいいのでしょうか??*/ Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False

  • Excel Selectは使わない? VBA

    おはようございます。 ExcelのVBAを独学しております。 いまさらな質問だとは思いますが、 そこで、色々調べていたところ 「Select」はあまり使うな! ということが良く出てきました。 selectを使わず、上手くシート移動などができるのでしょうか? 私が組んでいるものは、色んなシートを切り替えなければならなく、 毎回Selectしています。 Activateを使ったこともありますが、 エラーが多発し、良く分からなかったためSelectを使用しています。 出来れば、シートをアクティブにすることなく 操作ができれば良いのですが・・・ 例)「データ」「コピー」のシートがあります。 「データ」シートのAからD列を「コピー」シートにコピー しようとするものです。 WorkSheets(データ).select Range("A1").select Range("A:D").select selection.copy Worksheets("コピー").select Range("A1").select ActiveSheet.Paste どうしてもSelectを多様してしまいます。 ●Selectを使わないデータの入力方法 ●Selectを使わず、シートをアクティブにしなくても良い参照方法 ●どうしてもSelectを使わないといけない場面 ●Selectを使うのを回避するためには・・・ などなど、ご存知でしたら回答お願い致します。

  • エクセルで複数ファイルからコピーをする。

    すみませんが、BOOK1に複数のファイルから部分的にコピーして貼り付けるという作業をしたいのですが、ど素人なもんでわかりません。マクロで記録したモノをいじってみてるのですが、根本的にコードが分かっていなくギブアップです。  やりたいことは、フォルダーの中の970305日報1、970305日報2、970306日報1、970306日報2のようなファイルが山ほどあるのですが、 この970305の日報1と2を開き、それぞれファイルの決まった列を順番にをBook1の行へ行列を入れ替えて貼りつけていき(1日が1行)保存して閉じてから、次の日970306のデータをBOOK1の2行目に貼り付けるということをしたいのですが、どなたか教えていただければ助かります。よろしくお願いします。 Sub Macro2() Dim MyFile As String, MyPath As String Dim wb As Workbook, tb As Workbook Set tb = ThisWorkbook MyPath = tb.Path & "\" MyFile = Dir(MyPath & "*.xls", vbNormal) Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Do While MyFile <> "" If MyFile <> tb.Name Then Set wb = Workbooks.Open(MyPath & MyFile) With ActiveSheet Windows("970305日報1.xls").Activate Range("B34:B38").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("C1").Select Selection.PasteSpecial Paste:=xlPasteAll,         Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Windows("970305日報1.xls").Activate Range("C33:C38").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("H1").Select Selection.PasteSpecial Paste:=xlPasteAll,       Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Application.CutCopyMode = False ActiveWorkbook.Save Windows("970305日報1.xls").Activate ActiveWindow.Close Windows("970305日報2.xls").Activate Range("B31:B36").Select Selection.Copy Windows("日報リスト.xls").Activate Range("N1").Select Selection.PasteSpecial Paste:=xlPasteAll,   Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Windows("970305日報2.xls").Activate Range("D31:D36").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("T1").Select Selection.PasteSpecial Paste:=xlPasteAll,   Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Application.CutCopyMode = False ActiveWorkbook.Save Windows("970305日報2.xls").Activate ActiveWindow.Close Windows("970306日報1.xls").Activate Range("B34:B38").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("C2").Select Selection.PasteSpecial Paste:=xlPasteAll,   Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Windows("970306日報1.xls").Activate Range("C33:C38").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("H2").Select Selection.PasteSpecial Paste:=xlPasteAll,   Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Application.CutCopyMode = False ActiveWorkbook.Save Windows("970306日報1.xls").Activate ActiveWindow.Close -----------------------------------------

  • 複数のシートの値を一つのシートに整列

    よろしくお願いします。 複数のシートに行も列もバラバラになっているデータを一つのシートの行に整列させたいと思っています。 具体的には下記のようなシートがあります。一つは組織の名前のシート、一つは組織の基礎情報といった感じでシートごとに回答されています。 これを他のシートに一つの組織を一つの行で整列させ分析をしていきたいと思っています。 ファイルが数千あるため、マクロで書こうと思っているのですが、下記のように書いたのですがうまくいきません。 アドバイスをいただけないでしょうか? ファイルは(アンケートデータ1,アンケートデータ2といった感じで統一、作業フォルダ内にすべて保存) マクロを動かすセルは”統合”というファイル名、シート1に持ってきます。 Sub Macro1() Dim i As Integer For i = 1 To 1000 'アンケートデータファイルを開く Workbooks.Open Filename:="C:\Documents and Settings\Administrator\My Documents\作業\アンケートデータ" & i" .xls 'アンケートデータファイル 学校名シートのB11 を新しいブックのシート1のA1にコピー Worksheets(学校名).Activate Range("B11").Select Worksheets(統合).Activate ActiveSheet.Paste ThisWorkbook.Worksheets(1).Range("A" & i).PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=True Worksheets(基本データ).Activate Range("D3").Select Worksheets(統合).Activate ActiveSheet.Paste ThisWorkbook.Worksheets(1).Range("B" & i).PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=True Worksheets(基本データ).Activate Range("D6").Select Worksheets(統合).Activate ActiveSheet.Paste ThisWorkbook.Worksheets(1).Range("C" & i).PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=True 'アンケートデータファイルを閉じる ActiveWorkbook.Saved = True ActiveWorkbook.Close Next i End Sub 最終的には統合ファイル内で      A(学校名)         B(学校区分)    C(広さ)   D経営状況   E   F 1列  アイウエオ学校       3             500    黒字 2列    といった感じで学校数文行で並ぶようにしたいのです。 上記の式の間違いの指摘、書き方についてアドバイスをください。

  • エクセルマクロ 繰り返して、別のシートへコピーしたい

    エクセルマクロ 繰り返して、別のシートへコピーしたい マクロ初心者のため、やり方が全くわかりません。 どなたか教えてください。 やりたいことは、 コピーするシートはあらかじめ作成しています。 簡素化の方法がわからないので、 とりあえず自分で作ってみたものが下にあるものです。 繰り返す方法がわからないので、 どなたか教えてください。 よろしくお願いします。 以下、作成したマクロです。 1行目から10行目まで繰り返したくて、 1行目から2行目のセルの移動の差は10行目までかわりません。 '1行目 Sheets("Sheet1").Select Range("B14:C14").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False Sheets("Sheet1").Select Range("B15:C17").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B1").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False '2行目 Sheets("Sheet1").Select Range("B18:C18").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("A2").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False Sheets("Sheet1").Select Range("B19:C21").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B2").Select Range("B2").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False

  • EXCEL VBA  任意のシートに貼りつけ

    御世話になります。おしえて下さい。 データPCのexcelデータからオートフィルタでデータを抽出して任意の列を 抽出するところまでは出来ているようですが、その先が付け焼刃ですので、 さっぱり解決策がみつけられません。 データをオートフィルタにて抽出→帳票ブックの任意のシートに張り付け 帳票のシート名はユーザフォームのリストボックスから代入してるつもりです。 宜しくお願い致します。 Option Explicit Sub Macro3_2() Dim myRL As Date Dim MyRow As Long Dim Window1 As Window Dim buf As String myRL = UserForm1.TextBox1 buf = UserForm1.ListBox1 Workbooks.Open Filename:= _ "\\WPCABC\Users\hoge\Documents\hogehoge\データ.xlsx" ActiveSheet.ListObjects("テーブル_PCABC_からのクエリ") _ .Range.AutoFilter Field:=9, _ Criteria1:="=" & myRL ActiveSheet.ListObjects("テーブル_PCABC_からのクエリ") _ .Range.AutoFilter Field:=12, _ Criteria1:=">=1" MyRow = Worksheets("sheet1") _ .Range("A" & Rows.Count).End(xlUp).Row Worksheets("sheet1").Activate Range("B2:B" & MyRow).Select Selection.Copy ------------------------------------------------------↓上手く出来ません Workbooks("帳票.xlsm").Worksheets("buf") _ .Range("Y3" & MyRow) _ .PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Workbooks("帳票.xlsx").Worksheets("sheet1").Activate Range("L2:L" & MyRow).Select Selection.Copy Workbooks("帳票.xlsm").Worksheets("buf") _ .Range("Z3" & MyRow) _ .PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Set Window1 = Application.Windows("クエリデータ.xlsm") Window1.Activate End Sub

  • マクロについて教えてください

    マクロの超初心者です。 数式を入力しているのではなく、配付物をエクセルで作成しているのですが、同じもの(氏名や項目は違いますが)を100枚ほど作成しているのでマクロを・・・と思ったのですがやり方が全く分かりません。 sheet1からsheet2に下記のようにデータを写したいのですが、やり方を教えてください。 ●氏名が入力されています sheet1(A9) → sheet2(C2) sheet1(E9) → sheet2(C5) sheet1(I9) → sheet2(C8) ●項目1 sheet1(A8) → sheet2(E3) sheet1(E8) → sheet2(E6) sheet1(I8) → sheet2(E9) ●項目2 sheet1(A18~D18の結合セル) → sheet2(E2) sheet1(E18~H18の結合セル) → sheet2(E5) sheet1(I18~L18の結合セル) → sheet2(E8) と反映させたいのですが、250行あるのですが、 簡単にマクロで出来ないでしょうか?? ちなみに↓コレが上記の内容で作ってみたものです。 わかりずらい質問でスイマセン。 Range("A9").Select Selection.Copy Sheets("sheet2").Select Range("C2").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Sheets("sheet1").Select Range("E9").Select Application.CutCopyMode = False Selection.Copy Sheets("sheet2").Select Range("C5").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Sheets("sheet1").Select Range("I9").Select Application.CutCopyMode = False Selection.Copy Sheets("sheet2").Select Range("C8").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Sheets("sheet1").Select Range("A8").Select Application.CutCopyMode = False Selection.Copy Sheets("sheet2").Select Range("E3").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Sheets("sheet1").Select Range("E8").Select Application.CutCopyMode = False Selection.Copy Sheets("sheet2").Select Range("E6").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Sheets("sheet1").Select Range("I8").Select Application.CutCopyMode = False Selection.Copy Sheets("sheet2").Select Range("E9").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Sheets("sheet1").Select Range("A18:D18").Select Application.CutCopyMode = False Selection.Copy Sheets("sheet2").Select Range("E2").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Sheets("sheet1").Select Range("E18:H18").Select Application.CutCopyMode = False Selection.Copy Sheets("sheet2").Select Range("E5").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Sheets("sheet1").Select Range("I18:L18").Select Application.CutCopyMode = False Selection.Copy Sheets("sheet2").Select Range("E8").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False End Sub

  • Excel 繰り返しマクロ

    下記のようなマクロを使ってn個あるシートの内容を「集計」シートにコピーさせるようにしました。 (自動マクロとの組合せなので、スマートではないかもしれませんが) でも、これだと「集計」シートもコピー作業を行ってしまうので、 「集計」シートはコピー作業をしないように除外したいのですが、どうしたら良いのでしょう? 実際にはシート数は30程度、コピペ項目は1シートあたり30項目程度あります。 よろしくお願いします。 ------------------------- Sub テスト2() ' For i = 1 To Worksheets.Count '案件番号等コピー ' Sheets(i).Select Range("D3").Select Application.CutCopyMode = False Selection.Copy Sheets("集計").Select Range("A4").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False '案件名 Sheets(i).Select Range("F3").Select Application.CutCopyMode = False Selection.Copy Sheets("集計").Select Range("B4").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False '国名 Sheets(i).Select Range("E3").Select Application.CutCopyMode = False Selection.Copy Sheets("集計").Select Range("C4").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False '選択セルの解放 Application.CutCopyMode = False '行挿入 ' Sheets("集計").Select Rows("4:4").Select Selection.Insert Shift:=xlDown Next i End Sub

  • Excel VBA連続コピー、貼付処理について

    特定のフォルダ内に格納されている複数のExcelファイルの「sheet1」シートのデータを 所定のExcelファイルにコピー&ペーストしたいのですが、うまくいきません。 (貼付先のファイルを閉じようとするとエラーが発生します。) どうすればできるようになるでしょうか? ご教授の程よろしくお願いいたします。 -------------------------------------------------------------------- Sub copy_test() Dim myPath As String Dim copyFile As String Dim pasteFile As String Dim n As Long myPath = "C:\copy\" copyFile = Dir(myPath & "*.xls*") pasteFile = "C:\paste\paste_data.xlsx" n = 2 Do Until copyFile = "" Workbooks.Open Filename:=myPath & copyFile Workbooks(copyFile).Worksheets("sheet1").Range("A2:L201").Copy Workbooks.Open Filename:=pasteFile 'Workbooks(pasteFile).Worksheets("paste_data").Active Range("B1").Select Selection.End(xlDown).Select Selection.End(xlToLeft).Select Selection.End(xlUp).Select ActiveCell.Offset(1, 0).Select ActiveSheet.Paste ActiveWorkbook.Save Workbooks(pasteFile).Close False Application.CutCopyMode = False Workbooks(copyFile).Close False n = n + 999 copyFile = Dir() Loop End Sub ---------------------------------------------------------------------------------

  • エクセル VBA 各シートに貼り付け

    いつも皆様には大変お世話になっております。 表題に書いたようにコピーしたものを貼り付けしたいのですがうまく動きません。 Sheets("A").Select Range("B8:B38").Select Selection.Copy For Each sh In Worksheets If sh.Name <> "A" Then Range("B12:B42").Select Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Range("F38").Select ActiveWindow.SmallScroll Down:=-12 End If Next と言った様な構文を書いているのですが Aのファイル内のみでコピーして貼り付けをやってしまいます。 ちなみにシートはB,C,Dなど各種あります。 よろしくお願いいたします。

専門家に質問してみよう