• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ブックを表示せずにコピー(ExcelVBA))

ExcelVBAでのブックの転記方法と画面描画のチカチカ問題

このQ&Aのポイント
  • ExcelVBAを使用して、転記元エクセルの特定のセルの値を転記先エクセルの特定のセルに貼り付ける方法について質問があります。また、画面描画時に表示されるチカチカの問題についても解決方法を教えてください。
  • 質問者は、転記元エクセルを開いていない状態で転記を行いたいと考えています。画面描画の問題を解決するために、Application.ScreenUpdating = Falseを設定していますが、それでもチカチカしてしまいます。
  • 質問者は、チカチカの問題を解決するために何をすれば良いか教えて欲しいとしています。現在のコードには、転記元エクセルのオブジェクトの作成や、指定のセルのコピー・貼り付けの処理が含まれています。

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

値で貼り付けたいなら、以下でどうでしょう Private Sub CommandButton1_Click() Dim i as Integer  Application.ScreenUpdating = False  Workbooks.Open Filename:=ThisWorkbook.Path & "\" & EXCEL_NAME_MOTO  Workbooks(EXCEL_NAME_SAKI).Sheets(SHEET_NAME_SAKI).Range("B1:B100").Value _   = Workbooks(EXCEL_NAME_MOTO).Sheets(SHEET_NAME_MOTO).Range("A1:A100").Value  Workbooks(EXCEL_NAME_MOTO).Close False  Application.ScreenUpdating = True End Sub

rufas
質問者

お礼

ありがとうございます。 これなら処理時間も早く、チカチカしませんでした。 しかしどうして ScreenUpdating = False 入れてもチカチカしたんでしょう…

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.3

開かないで読んではどうですか? 詳しい使い方はわからないんですが、Application.ExecuteExcel4Macroというのを使うと、Excelファイルを開かずにいろんな事ができるらしいです。 Private Sub CommandButton1_Click() Dim i As Integer Dim sourceSheet As String sourceSheet = "'" & ThisWorkbook.Path & "\[" & EXCEL_NAME_MOTO & "]" & SHEET_NAME_MOTO & "'!" For i = 1 To 100 Worksheets(SHEET_NAME_SAKI).Cells(i, 1) = Application.ExecuteExcel4Macro(sourceSheet & "R" & Trim(Str(i)) & "C1") Next End Sub

rufas
質問者

お礼

ありがとうございます。 そうゆう方法もあるのですね。 ExecuteExcel4Macro これはどのエクセルのバージョンでもサポートされているかどうかが気になりますね。

全文を見る
すると、全ての回答が全文表示されます。
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>とにかくチカチカさせたくないのですが、 単一のセルのコピーとペーストを100回も繰り返しているからです。 FOR文の部分を変更して下さい。 1.コピー方法の変更 For i = 1 To 100 Workbooks(EXCEL_NAME_MOTO).Sheets(SHEET_NAME_MOTO).Cells(i, 1).Copy _ Workbooks(EXCEL_NAME_SAKI).Sheets(SHEET_NAME_SAKI).Cells(i, 2) Next 2.まとめて1回でコピー Workbooks(EXCEL_NAME_MOTO).Sheets(SHEET_NAME_MOTO).Range("A1:A100").Copy Workbooks(EXCEL_NAME_SAKI).Sheets(SHEET_NAME_SAKI).Cells(1, 2).PasteSpecial _ Paste:=xlValues

rufas
質問者

補足

ありがとうございます。 すいません。質問用にコードを簡単にしすぎてしまいました。 本当は連続していないセルをコピーして、 連続していないセルに貼り付けるので、 まとめて1回でコピーは出来ないのかなぁと思いました。 わからないですが…

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルのブック間ででデータをコピーするPG

    エクセル2000でブック間のデータのコピーをやっていての質問です。 あるディレクトリ内に「統合するファイル.xls」と「統合されるファイル.xls」があります。両方のファイルにはC列からG列、2行目以下に数字のデータが入っています。(C2~G2、C3~G3・・・・というように続きます) 「統合されるファイル」のC列からG列のデータをコピーして「統合するファイル」のデータの下に貼り付けるプログラムを作っています。プログラムは以下です。 Dim sBase As String Dim sMyPath As String Dim lLine As Long Dim lStartRow As Long Application.ScreenUpdating = False '統合するファイル名・ディレクトリ名取得 sBase = ActiveWorkbook.Name sMyPath = ActiveWorkbook.Path & "\" Workbooks.Open Filename:=sMyPath & "統合されるファイル.xls" lLine = Workbooks("統合されるファイル.xls").Worksheets("Sheet1").Cells(ActiveSheet.Rows.Count, 3).End(xlUp).Row '統合するファイルの最終行を抽出 lStartRow = 0 lStartRow = Workbooks(sBase).Worksheets("Sheet1").Cells(ActiveSheet.Rows.Count, 3).End(xlUp).Row '統合されるファイルからコピーして統合するファイルの最終行より下に貼り付け Workbooks("統合されるファイル.xls").Worksheets("Sheet1").Range(Cells(2, 3), Cells(lLine, 7)).Copy Destination:=Workbooks(sBase).Worksheets("Sheet1").Range(Cells(lStartRow + 1, 3)) Workbooks("統合されるファイル.xls").Close SaveChanges:=False Application.ScreenUpdating = True 現在、このプログラムを走らせると、コピーして貼り付けるところで「アプリケーション定義またはオブジェクト定義のエラーです」という警告が出てコピーされない状況です。 何が悪いのでしょうか?

  • ExcelVBAで特定のブックをcloseしたい

    よろしくお願いします。Excel2000ですが、2002,2003,2007でも利用できることを前提に考えています。  複数のExcelブックを開いているとき、特定のファイル名のブックを閉じる方法を考えています。  2通り考えたのですが、いずれもだめでした。デバッグ機能でステップインしながら確認したのですが、エラーにもならず、closeメソッドを通過していました。 以下のVBAはなにか誤りがあるのでしょうか? (その1)  For i = 1 To Workbooks.Count   If Left(Workbooks(i).Name, 2) = "v3" Then    msw = Workbooks(i).Name    If msw <> "V3main.xls" Then     Workbooks(msw).Close    End If   End If  Next (その2)  For Each wb In Workbooks   If Left(wb.Name, 2) = "v3" Then    MsgBox (wb.Name)    If wb.Name <> "V3main.xls" Then     With wb      .Saved = True      .Close     End With    End If   End If  Next wb

  • 保護されたブックのコピーについて

    現在、ボタンを押すと新規ブックが作成され、最初のブックのシートをコピーするというマクロを組みました。 しかし、元になるブックにはブックの保護とシートの保護を両方かけていて、途中でエラーになるはずなのですが、何故かそうならずに普通に新規ブックにコピーがされます。 上手くいったのですがエラーが出ると予想していたので気持ちが悪く、また個人だけで使うわけじゃないので原因を知っておきたいです。 どなたかよろしくお願いします。 Private Sub makeBookButton_Click() Dim myWorkBook As String Dim newWorkBook As String Dim mySheet As Worksheet Application.ScreenUpdating = False On Error GoTo ErrTrap Application.DisplayAlerts = False myWorkBook = ThisWorkbook.Name Workbooks.Add ActiveWorkbook.SaveAs Filename:=NEWBOOK newWorkBook = ActiveWorkbook.Name Workbooks(myWorkBook).Activate For Each mySheet In ThisWorkbook.Worksheets Workbooks(myWorkBook).Sheets(mySheet.Name).copy after:=Workbooks(newWorkBook).Sheets(Workbooks(newWorkBook).Sheets.Count) Next Workbooks(NEWBOOK).Sheets("Sheet1").Delete Workbooks(NEWBOOK).Sheets("Sheet2").Delete Workbooks(NEWBOOK).Sheets("Sheet3").Delete Application.DisplayAlerts = True Application.ScreenUpdating = True Exit Sub ErrTrap: Call MsgBox("ブック作成時にエラーが発生しました。", vbCritical) End Sub

  • 横にコピーするには・・。

    教えてください・・。 01.xls・02.xls・03.xlsとあり、その中のシート(01・02・03)をコピーして、全部というシートにまとめたいと思っています。 列にデータを追加したいのですが、行にデータが追加されてしまいます・・。 どうしたらいいのか教えてください。 01のシートがAからDまで 02のシートがEからGまで 03のシートがHからLまで とコピーをしたいと思っています・・。 --------- PathName = ThisWorkbook.Path & "\" ArrBook = Array("01.xls", "02.xls", "03.xls") For i = LBound(ArrBook) To UBound(ArrBook) Workbooks.Open PathName & ArrBook(i) Next Set WS(1) = Workbooks("01.xls").Worksheets("01") Set WS(2) = Workbooks("02.xls").Worksheets("02") Set WS(3) = Workbooks("03.xls").Worksheets("03") Set WS(4) = ThisWorkbook.Worksheets("全部") With WS(4) .Cells.ClearContents .Cells(1, 1) = "A" .Cells(1, 2) = "B" .Cells(1, 3) = "C" .Cells(1, 4) = "D" .Cells(1, 5) = "E" .Cells(1, 6) = "F" .Cells(1, 7) = "G" .Cells(1, 8) = "H" .Cells(1, 9) = "I" .Cells(1, 10) = "J" .Cells(1, 11) = "K" .Cells(1, 12) = "L" .Cells(1, 13) = "M" .Cells(1, 14) = "N" .Cells(1, 15) = "O" .Cells(1, 16) = "P" .Cells(1, 17) = "Q" LastRow(1) = WS(1).Range("A65536").End(xlUp).Row LastRow(2) = WS(2).Range("A65536").End(xlUp).Row LastRow(3) = WS(3).Range("A65536").End(xlUp).Row For i = 1 To 3 LastRow(4) = .Range("A65536").End(xlUp).Row + 1 WS(i).Rows("2:" & LastRow(i)).Copy .Cells(LastRow(4), 1) LastRow(4) = .Range("A65536").End(xlUp).Row End With For i = LBound(ArrBook) To UBound(ArrBook) Workbooks(ArrBook(i)).Close SaveChanges:=False Next End Sub

  • VBAであるBOOKの「sample」というシートを別BOOKに

    VBAであるBOOKの「sample」というシートを別BOOKに 別Bookにコピーしたいのですが、 ネットを参考にして下記のようにするとエラーになります。 実行時エラー'9' 「インデックスが有効範囲にありません」 と表示されます。 どこが間違っているでしょうか? どなたか教えてください。 ---------------------------------------- Dim NewBook As Workbook Dim fName As String Set NewBook = Workbooks.Add fName = ThisWorkbook.Path & "cp.xls" NewBook.SaveAs Filename:=fName Workbooks("moto.xls").Sheets("ピッキング").Cells.Copy Workbooks(fName).Sheets("Sheet1").Paste Destination:=Cells(1, 1) '<---ここでエラー Workbooks(fName).Save ----------------------------------------

  • ExcelVBA ブック全データを別ブックにコピー

    お世話になります。 自分のPC環境のC:\test\配下にある"練習.xls"というブックがります。 ボタンが押された時にこのブックの全データをデスクトップにある"集計.xls"のA1から張り付けたいのです。 あるサイトで下記のようなロジックが公開されていましたので、ファイル名を変えて実行しましたが 下記★箇所で"インデックスが有効範囲にありません"とエラーが出てしまいます。 どなたか改善方法をご教授いただけませんでしょうか? よろしくお願い致します。 環境 windows XPSP3  Excel2003 Sub ボタン1_Click() Dim a As Variant Dim b As Variant Workbooks.Open Filename:="C:\test\練習.xls" ★Set a = Workbooks("\C:\test\練習.xls").Worksheets("sheet1").UsedRange Set b = Workbooks("集計.xls").Worksheets("sheet1").Range("A1") a.Copy (b) Set a = Nothing Set b = Nothing End Sub

  • EXCEL2000 VBA でエラートラップできません。

    次のスクリプトで”Select Case Workbooks(saki).Worksheets(z).Name”のところで変数zに存在しないワークシートのインデックスが入った時にはエラーが出るので、On Erroe Goto で回避しようと思うのですができません(そのままマクロが止まってしまう)。 なぜ回避できないのか教えてください。 また回避するいい方法があれば教えてください。 Private Sub UserForm_Activate() moto = Cells(2, 5) saki = Cells(1, 5) For z = 1 To 50 On Error GoTo e0 Select Case Workbooks(moto).Worksheets(z).Name Case "検索" Case "結果" Case "エフ" Case "ツール" Case "記憶" Case Else On Error GoTo e0 UserForm3.ComboBox1.AddItem Workbooks(moto).Worksheets(z).Name End Select Next e0: For z = 1 To 50 On Error GoTo e1 Select Case Workbooks(saki).Worksheets(z).Name    ’ここでエラーが出る(実行時エラー'9' インデックスが有効範囲にありません) Case "検索" Case "結果" Case "エフ" Case "ツール" Case "記憶" Case Else On Error GoTo e1 UserForm3.ComboBox2.AddItem Workbooks(saki).Worksheets(z).Name End Select Next e1: End Sub

  • ExcelVBAでBook間のシートコピーについて

    以前、Excel2003を使用しているときに作成したファイルで、2003の時には特に問題なく動いたのですが、Excel2010に入れ替えてからうまくいきません。 コードは以下のようなもので、コピーするシートには埋め込みグラフ(ソースは同一シート)があります。 Dim Book_A As Workbook Dim Book_B As Workbook Set Book_A = ThisWorkbook Set Book_B = Workbooks.Open("D:\Book_B.xls") For i = 1 To 3 Book_A.Sheets(i).Copy Before:=Book_B.Sheets(i)   '※ Next i 上記※印の部分で下記のエラーが発生します。 実行時エラー '-2147417848(80010108)': オートメーションエラーです。 起動されたオブジェクトはクライアントから切断されました。 となり、止まってしまいます。 また、同じファイルを2003の入った端末から実行するとエラーは発生しません。 また、2010の入った端末で試しにシート見出しを右クリックして別のBookにコピーをしたところ、グラフやテキストボックスが抜け落ちたものがコピーされます。 2010では方法が違うのでしょうか?

  • 転記マクロでの現象(2回目以降の表示位置がずれる)

    転記マクロでの現象(2回目以降の表示位置がずれる) 外部ブックのデータを元に集計作業をするため、第一段階でデータを転記するマクロを 作成しました。 (転記元データを、転記先のF~H列には3行おき、R4:T2000には1行おきに転記させています) 1回目の転記では希望の表示位置に転記されるのですが、2回目のテストをしようと再度 実行すると、1回目の最後の転記された位置より、転記が開始されてしまいます。 一度ブックを閉じて再実行をしてみたら、1回目の転記は希望位置だったのですが、 2回目はやはり1回目の最後の転記位置から開始され、試しに3回目をやってみたら今度は 2回目の最後の転記位置から開始されました。 どの部分を直せば良いのか、お解りになる方がいましたら教えてください。 よろしくお願いします。 Option Explicit Public Kihon As Worksheet, BaseG As Worksheet Public i As Integer, L As Integer, R As Integer Sub Step1_転記() Application.ScreenUpdating = False Worksheets("転記先").Range("F4:H2000,R4:T2000").ClearContents Set BaseG = Workbooks("転記元.xls").ActiveSheet Set Kihon = Worksheets("転記先") For i = 1 To 2000 '↓転記元の合計覧が0以外を集計する '--------------------------------------------------------------- If BaseG.Cells(i + 5, 16) <> 0 Then '↓コード '--------------------------------------------------------------- Kihon.Cells(L + 4, 6) = BaseG.Cells(i + 5, 2) Kihon.Cells(R + 4, 18) = BaseG.Cells(i + 5, 2) '↓社名 '--------------------------------------------------------------- Kihon.Cells(L + 4, 7) = BaseG.Cells(i + 5, 3) Kihon.Cells(R + 4, 19) = BaseG.Cells(i + 5, 3) '↓金額 '--------------------------------------------------------------- Kihon.Cells(L + 4, 8) = BaseG.Cells(i + 5, 16) Kihon.Cells(R + 4, 20) = BaseG.Cells(i + 5, 16) L = L + 3 R = R + 1 End If Next i Application.ScreenUpdating = True End Sub

  • Excel2000のマクロが2007で型が一致しませんと表示されます

    自作マクロを作成し別ブックから転記するものですがExcel2000では正常に動くのですが、Excel2007では、転記対象のセルが0なら空白にするという行(IF文)で「型が一致しません」と表示されてしまいます。 ExecuteExcel4Macroが悪いのか、いろいろ調べましたが型とは?などマクロ初心者なので分からないです。宜しくお願いします。 For i = 1 To 7 Cells(i, 1).Value = ExecuteExcel4Macro("'\[meca.xls]Sheet1'!R" & i & "C1") If ExecuteExcel4Macro("'\[meca.xls]Sheet1'!R" & i & "C1") = "0" Then Cells(i, 1).Value = "" Next i

専門家に質問してみよう