Excel VBA コピー貼り付け時のチェック

このQ&Aのポイント
  • VBAを使用して、Excelの特定のシートの範囲をコピーし、別のブックに貼り付けたいが、他のユーザーがそのブックを開いている場合は貼り付け処理を中止する方法について教えてください。
  • Excel VBAを使って、特定のシートの範囲をコピーして別のブックに貼り付けたいが、他のユーザーがそのブックを開いている場合は貼り付け処理を中止したいです。方法を教えてください。
  • ExcelのVBAで、特定のシートの範囲をコピーして別のブックに貼り付ける方法について教えてください。ただし、他のユーザーがそのブックを開いている場合は貼り付け処理を中止したいです。
回答を見る
  • ベストアンサー

EXCEL VBA コピー貼り付け時のチェック

お世話になります。田中と申します。 VBAの練習で下記の操作を実現したいと思っておりますが、どうしたらよいのか分りません。 A.xlsというブックがあります。 A.xlsの[データ]というシートにボタンをおいてそのボタンをクリックしたら以下のような動作をしたいのです。 このA.xlsの[データ]シートのA1~L20までをコピーして、C:\Users\田中\DesktopにあるB.xlsというブックの[シート1]という名称の単にシートに貼り付けしたいのです。 ただし貼り付け時に他のユーザーがB.xlsを開いている場合は、貼り付け処理を中止したいのですが、そのようなユーザーに開かれているかどうかVBAでチェックする方法はありますでしょうか? どなたかお知恵をお借りできますでしょうか。 よろしくお願い致します。 環境 Windows7 Excel2013

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

  • ベストアンサー
  • eden3616
  • ベストアンサー率65% (267/405)
回答No.2

「VBAの練習」との事なので、No1にてご質問のチェック方法のみの記述としましたが、コピー貼付の部分も含めた回答を補足として上げさせていただきます。 不要であれば以下は無視してください。 今回のコードは、コピー元となるAブックにVBAコードを記述する場合となります。 (Aブックがほかに有る場合はAブックを開く処理を加える必要が有ります) >[シート1]という名称の単にシートに貼り付けしたいのです。 どのセルに張り付けるのか記載されていないため、 同じセル(基点をA1セルとして)貼り付けています。 不明な点がありましたら補足願います。 参考まで。 ■VBAコード Sub Sample()   'ダイアログ表示を無効化   Application.DisplayAlerts = False   'Bブックのファイルを開く(利用可能時の通知非表示)   Workbooks.Open Filename:="C:\Users\田中\Desktop\B.xls", Notify:=False   'ダイアログ表示を有効化   Application.DisplayAlerts = True   '読み取り専用で開いているかチェック   If ActiveWorkbook.ReadOnly Then   '▼読み取り専用の場合に実行     '誰かが開いている場合、メッセージを表示     MsgBox "読み取り専用のため中止します"     '開いたBブックを閉じる     ActiveWorkbook.Close   Else   '▼読み取り専用でない場合に実行     'このマクロコードが記述されているAブックの選択中のシートのA1:L20をコピーし、     'Bブックのシート1のセルA1を基点にして貼り付ける     ThisWorkbook.ActiveSheet.Range("A1:L20").Copy Worksheets("シート1").Range("A1")     'Bブックを上書き保存(不要であれば削除)     ActiveWorkbook.Save     'Bブックを閉じる(不要であれば削除)     ActiveWorkbook.Close   End If End Sub

その他の回答 (1)

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

1つのファイルを共有して開いた場合は、あとから開いた方が読み取り専用で開かれます。 ワークブックオブジェクトのReadOnlyプロパティの値で読み取り専用であるかが判断可能です。これを利用すれば、そのファイルがほかのユーザーが既に開いているか判断することが出来ます。 末尾に「★」を付けている箇所でBブックのパスを指定してください。 また同一行の「Notify:=False」にて、ファイルが使用可能になった際の通知を無効化しています。 この場合、開く際に誰かが開いていると確認のダイアログが表示されてしまうため、 前後に「Application.DisplayAlerts = False/True」でダイアログを無効化しています。 誰かが開いていた場合は、メッセージを表示した後に読み取り専用で開いたブックを閉じる処理にしています。 「'ここにAブックからBブックへのコピー処理を記述」の箇所へ、コピーする処理を記述してください。 ■VBAコード Sub Sample()   Application.DisplayAlerts = False   Workbooks.Open Filename:="Bブックのファイルパス", Notify:=False '★   Application.DisplayAlerts = True   If ActiveWorkbook.ReadOnly Then     MsgBox "読み取り専用のため中止します"     ActiveWorkbook.Close   Else     'ここにAブックからBブックへのコピー処理を記述   End If End Sub

yakkun2338
質問者

お礼

eden3616 さん、早速のご連絡ありがとうございます! ご教授いただきましたロジックで完璧に出来ました!! すごいです! このたびは本当にありがとうございました!!

関連するQ&A

  • excel vba 複数シートをまとめる

    お世話になります。 A.xlsというブックがあります。 その中に[集計]というシートがあります。 このシートに[ボタン]を配置してクリックしたら以下の動作を実現させたいのです。 (1)[集計]シートのA2に位置セット (2)[東京]、[大阪],[名古屋]という名称のシートの列=A2~A62、行=A2~データ最下行にある全データを[集計]シートにどんどんコピー貼り付けして追加していきたいのです。 上記動作を実現するVBAのロジックをどなたかご教授いただけますでしょうか。 よろしくお願い致します。

  • EXCEL VBA 別ブックから貼り付け

    お世話になります。 A、Bという2つのブックがあります。 A.xls データファイル B.xls 処理実行ファイル Bブックを開いてSheet1に置いてあるボタンを押すとファイル洗濯ダイヤログが出てきて、そこで指定したBブックをsrtPathに格納(シートは1つだけ)のBブックのA1から全データをAブックのSheet1に貼り付けたいのです。 下記VBAを書いてみましたがエラーになってうまく動きません。 Workbooks(strPath).Range("A1").Copy ActiveWorkbooks.Worksheets("Sheet1").Range("A1").PasteSpecial どなたが解決方法をご教授いただけませんでしょうか。 よろしくお願い致します。

  • excel vba

    テーブル情報に基づきシートをコピーするVBAマクロを記述したい。 ExcelのBook111のSheet1に次のような データが入っています。 (1、2)セルにn=3という数字が入っているものとします。 その数値に合わせて、この場合は3なので Sub Sample01() Workbooks("Book3.xls").Worksheets("booksheet3").Copy After:=Workbooks("Book111.xls").Sheet(1) End Sub のようなつまり、booksheet3なるシートをBook111(固定なBOOK)にコピーしようとしています。 このようなことをVBAで書くにはどうすればいいのでしょうか。 ただしBook名とシート名はあくまでデータの値にもとづいたデータをもってくることになります。 要するに間接参照したデータに基づき処理するのをどのように記述するかという質問です。 A列 B列 1 回数 n=3 2     3     4 Book1.xls book1sheet ←n=1 5 Book2.xls book2sheet ←n=2 6 Book3.xls book3sheet ←n=3 7 Book4.xls book4sheet 8 Book5.xls book5sheet 9 Book6.xls book6sheet ←n=6 10 Abc,xls Defsheet ←n=7

  • 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した状態です。 出来れば、初心者にも理解しやすい解説等あれば宜しくお願いします。

  • エクセルのシートのコピーについて

    シートのコピーをVBAで行いたいのですが、エラーになってしまいます。 間違っている箇所が分からないのでご教授お願いします。 貼り付けというブックにマクロが組まれています。 ”データ”のブックにあるシート名が”貼り付けのブックのリスト”のシートに記載されています。 リストのシートに記載されているシートを貼り付けのブックにコピーしたいです。 よろしくお願いします。 Sub シートコピー() 行数 = 2 Do Until IsEmpty(Cells(行数, 3).Value) コピー元 = Workbooks("貼り付け.xls").Worksheet("リスト").Cells(行数, 3) Workbooks("データ.xls").Worksheet(コピー元).Copy After:=Workbooks("貼り付け.xls").Sheets(Workbooks("貼り付け.xls").Sheets.Count) 行数 = 行数 + 1 Loop End Sub

  • VBAで他のexcelのシートをコピーしてくる方法

    a.xlsにb.xlsのsheet1をVBAを使ってコピーしたいと考えています。 (このVBAをボタンに振ろうかと。。。) 参考になるVBAはありませんか?

  • エクセル(VBA)のブック間でのコピーペーストについて

    こんにちは。VBA入門レベルのものですが、質問させてください。 ブックAとブックBを開いた状態にし、 ・ブックA⇒VBAを組む&データ貼付け先 ・ブックB⇒データコピー元 ブックBの特定セル(例:D10)からブックAの特定セル(例:E12)にコピー⇒貼付 する方法を探しています。 なお、ブックBは、ブック名とシート名が都度変わるので、「ブックAではない方の開いているエクセルファイルからデータをコピーし、ブックAに貼付ける」の構文にしたいです。 また、コピペの他に数式(イコール)で飛ぶ方式でもかまいません。 この内容でのVBAの記述方法が分かる方、どなたか教えて頂けますでしょうか。 すみませんがよろしくお願いいたします。 ※エクセル2003です。

  • EXCEL VBA 貼り付け

    A.xls 、B.xlsと二つのブックがあります。 A.xls のA列の最終行がA100だった場合は、A.xlsのA101以降にB.xlsのA2以降のデータ、A.xlsのB101以降にB2以降のデータA.xlsのC01以降にC2以降のデータを貼り付けたいのですが・・ ※A.xls のA列の最終行を取得して、B.xlsのデータをA.xlsの最終行に貼り付ける。 よろしくお願いいたします。

  • エクセル(2003)のコピーと貼り付けについて。

    エクセル(2003)のコピーと貼り付けについて、操作を自動化したいです。 VBA初心者です。 同じフォルダ内にAファイルとBファイルがあります。 Aファイルにはシート1からシート4まで有り、シート1とシート2にシート3と4を比較したデータを表示させています。 シート1とシート2はA1からG1まで項目として、A2からデータが表示されます。約20行程度、表示される行数は毎日変わります。 Bファイルにはシート1しかありません。A1からG1まで項目とし、A2からデータが表示されています。約100行。毎日変わります。 (Aファイルのシート1とシート2の表示されているデータを貼り付けていく為) Aファイルのシート1に表示されているデータ(A2から)を仮に20行としBファイルの101行目(入力されているデータのすぐしたの行)に貼り付け、Aファイルのシート2に表示されているデータ(A2から)を仮に20行とし、120行目に貼り付け。 毎日コピーする範囲や貼り付けをするセルが変わっていく、固定の範囲、セルではない。この作業を毎日、コピー貼り付けで操作しています。 この操作をラクにしたいです。 困っていることは、コピーする範囲が毎日変わってしまう。(行数が増減するため) 貼り付けるセルも変わってしまう、(行数が増減するため) 分かりずらい説明になっていましたら、申し訳ないです。 よろしくお願いします。

  • VBAでコピーと貼り付けに時間がかかる

    ブックAのシートA´のA2:AZ80にあるデータをコピーし別のパスにあるブックBのシートB´のアクティブなセルに貼り付けをしたいのですが、速度が遅いです。(というよりずっと実行中になってしまいます。) A2:AZ80には空白の行もあるため貼り付け後に空白の行は削除するようにします。 さらに次回貼り付けする際にはその最終行から貼り付けるようにしたいので、(誰かがデータをいじってアクティブセルが任意のところに移動したまま保存された場合も考慮したいので) 現在は貼り付ける前にB2をアクティブにし、その最終行に飛ばし、その下をアクティブにするように しています。 上記の条件で速度をできるだけ早くしてあげるにはコードをどのように書いたらいいのでしょうか? 宜しくお願いいたします。

専門家に質問してみよう