• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:コピー処理)

Excel VBAでBook間の入力項目を転記するコマンドボタンを作成する方法

このQ&Aのポイント
  • Excel VBAを使用して、Book1とBook2の間で入力項目を転記するコマンドボタンを作成する方法について教えてください。
  • 入力項目の範囲は異なるため、特定のセル範囲をコピーする必要があります。
  • 保護されたセルと非保護のセルが混在しているため、コピー元とコピー先のセルの違いに注意する必要があります。

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

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

#01です もしや… ブック名が質問の条件と違うのでは?  Workbooks("BOOK2").Activate を直さないとダメですよ。実行時にエクセルのBOOKが3つ以上開いている可能性があるので、そこまでは汎用的に作っていません。 提供したマクロはあくまでサンプルですので、修正が必要なら、ご自身でがんばって下さい

polalis
質問者

お礼

zap35様、返事が遅れてスミマセン。 それと、なにからなにまでご丁寧にありがとうございました。 ブック名が違うのもさることながら、どうやら保護で引っか かっていたようです。 保護もマクロで制御して、なんとか想定どうりに動かすこと が出来ました!! 本当にありがとうございます^^勉強になりました。

その他の回答 (2)

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

#01です。 >(「編集」→「ジャンプ」→「セル選択」→定数で選択される範囲)は、特に操作しておりません。。。 →これは手動で上記操作を行ったときに選択セルがコピー対象(入力項目)でよいですか? という趣旨の確認でした。この手動操作に対応するコード行が Set selRange = Selection.SpecialCells(xlCellTypeConstants, 23) です >それとも、標準モジュールの部分ですか? はい。BOOK1の標準モジュールシートにペーストします。コマンドボタン(オートシェイプ)にマクロ登録するのが簡単でしょう。(コマンドボタンのモジュールでもかまいませんが、不慣れならこちらが簡単かと…) このマクロはBOOK1の全てのシートの「入力項目(前述)」をコピー対象にします。対象外とするシートがある場合は For Each ws In Worksheets  If ws.Name <> "表記説明" Then   #01 のコード  End If Next ws のようなIf文を追加して下さい。 質問には詳細な情報がないため汎用的に作成しました。なお私のPC環境では動作を確認してあります。もし動作しないのであればシート構成や保護環境に起因することが想定されますが、それは残念ながら実物をみてデバッグしないとわかりません もし多少なりともVBAの知識をお持ちなら、ブレークポイントを設定してステップ実行して動作をトレースしてみてください。このとき6行目はコメントにするのがよいでしょう。  ' Application.ScreenUpdating = False コードは分かりやすいようにできるだけ原始的(?)なままにしましたので多少追いかけ易いと思います

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

入力項目の意味が数式ではなく手入力した定数(「編集」→「ジャンプ」→「セル選択」→定数で選択される範囲)という意味であれば、以下のマクロではどうでしょうか? Option Explicit Sub Macro1() Dim selRange As Range, cntArea As Integer Dim adr As String, ws, ts As Worksheet Dim psw As Boolean Application.ScreenUpdating = False On Error GoTo err0 For Each ws In Worksheets ws.Activate Set selRange = Selection.SpecialCells(xlCellTypeConstants, 23) For cntArea = 1 To selRange.Areas.Count adr = selRange.Areas(cntArea).Address selRange.Areas(cntArea).Copy Workbooks("BOOK2").Activate psw = False For Each ts In Worksheets If ts.Name = ws.Name Then psw = True End If Next ts If psw Then Worksheets(ws.Name).Activate Else Worksheets.Add after:=ActiveSheet ActiveSheet.Name = ws.Name End If ActiveSheet.Range(adr).Select ActiveSheet.Paste ws.Activate Next cntArea Next ws err0: Application.CutCopyMode = False Application.ScreenUpdating = True End Sub

polalis
質問者

補足

zap35様、ご丁寧な対応ありがとうございます。 >入力項目の意味が数式ではなく手入力した定数 はい、手入力してある値です。 (「編集」→「ジャンプ」→「セル選択」→定数で選択される範囲) は、特に操作しておりません。。。 私自身、VBA初心者でよくわかっていないので、見当違いの質問 でしたら、スミマセン。 上記のコードは、使用するコマンドボタンのコードに直接書けば いいのでしょうか? それとも、標準モジュールの部分ですか? もしそうであれば、どういう形で呼び出せばいいのでしょうか?? ちなみに、コマンドボタンに書いた場合は、Sheet1にジャンプして 特に、処理はされずに終わってしまっているようです。 念のため、Sheet1を全選択して 「編集」→「ジャンプ」→「セル選択」→定数で選択される範囲 のように、やってみたのですが、結果は変わりませんでした。 シートの構成は、4枚になっていて 1番目:表記説明 2番目:指標シート 3番目:入力シート 4番目:集計シート(一部入力する) ような形になっているので、実際はSheet2~4までの転記になります。 お手数かけて申し訳ないのですが、もう少し教えて下さい。

関連するQ&A

専門家に質問してみよう