• ベストアンサー

エクセル2010です。マクロ記述を教えてください。

行番号1から12の任意のセルをコピーして貼り付ける場合ですが、 行番号13以降への貼り付けをしようとしても「制御されています。」というメッセージボックスが出て、しかも貼り付けが実行されない設定をしたいと思います。 また、 行番号13以降の任意のセルをコピーして貼り付ける場合も、 行番号1から12への貼り付けをしようとしても「制御されています。」というメッセージボックスが出て、しかも貼り付けが実行されない設定をしたいと思います。This Workbookにどんなマクロ記述をしたらよいですか? 教えてください。よろしくお願いします。

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

  • ベストアンサー
  • emaxemax
  • ベストアンサー率35% (43/121)
回答No.1

ThisWorkbookに記述するということは、特定のシートではなくそのBOOKのすべてのシートに適用させるのですね? こんなのはどうでしょう? http://www2.aqua-r.tepm.jp/~kmado/kvba.htm のE03M121 切り取り又はコピーされたセル範囲を取得する を参考にさせていただきました。 標準モジュールに Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long Declare Function CloseClipboard Lib "user32" () As Long Declare Function RegisterClipboardFormat Lib "user32" Alias "RegisterClipboardFormatA" _  (ByVal lpString As String) As Long Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _  (Destination As Any, Source As Any, ByVal Length As Long) Declare Function GetClipboardData Lib "user32" (ByVal wFormat As Long) As Long Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long Declare Function GlobalSize Lib "kernel32" (ByVal hMem As Long) As Long Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long Function kGetRangeCopyCut() As Range   Dim mem&, sz&, lk&, vv As Variant, buf$   If Application.CutCopyMode = False Then Exit Function   OpenClipboard 0&   mem = GetClipboardData(RegisterClipboardFormat("Link"))   CloseClipboard   If mem = 0 Then Exit Function   sz = GlobalSize(mem)   lk = GlobalLock(mem)   buf = String(sz, vbNullChar)   CopyMemory ByVal buf, ByVal lk, sz   GlobalUnlock mem   vv = Split(buf, vbNullChar)   buf = "'" & vv(1) & "'!" & Application.ConvertFormula(vv(2), xlR1C1, xlA1)   Set kGetRangeCopyCut = Range(buf) End Function ThisWorkbookに Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)   If Application.CutCopyMode <> xlCopy Then Exit Sub   If kGetRangeCopyCut.Row < 13 Then     If Target.Row > 12 Then buf = True   Else     If Target.Row < 13 Then buf = True   End If   If buf Then     MsgBox "制御されています。"     Application.EnableEvents = False     Application.Undo     Application.EnableEvents = True   End If End Sub

mszjmszj
質問者

お礼

ご挨拶がおそくなり失礼しました。完璧でした。心よりお礼申し上げます。作成中の「万年予定出納日記帳」もこれを以て完成となりそうです。助かりました。このマクロがないとどうしても条件付き書式のセルが移動してしまったりで悩んでおりました。

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

関連するQ&A

  • エクセルのマクロについて教えて下さい

    エクセルで、データ(書類)のコピー貼り付けのマクロを組みました。 ツール→マクロで、新しいマクロの記録から、実際にコピーをして貼り付けをし、記録の終了をしました。 次に他のセルの場所でもそのマクロを実行して、何度も場所を変えてコピー貼り付けを実行したいのですが、操作用のボタンを作成して貼り付け、ボタンを押すと、同じ場所でコピー貼り付けを繰り返します。 たしか絶対参照とか相対参照とかあったような気がするのですが…。 どうすれば、他の場所でもボタンを押すだけでコピー貼り付けのマクロを実行できるようになりますか? よろしくお願いします。

  • エクセル マクロ

    エクセル マクロで、シート1のA1セルないの文字列(数式)をクリックボードにコピーするマクロを組みたいのですが、セルのコピーは出来るのですが、文字列のみコピーが出来ません。貼り付けは任意でするので必要ないです。 初心者で何もわかりません。よろしくお願いします。

  • エクセルで特定のセルを選択したい(マクロ)

    以下のようなマクロを組もうとしていますが、出来ません。 sheet1において 1)マクロを実行すると、メッセージボックスが出る。 2)メッセージボックスに入力した文字と同じ文字が入力されているセルを選択する。 3)2)のセルの1行下のセルを選択する。 2)で必ずエラーが出てしまいます。どのような方法が良いのか教えていただけるとありがたいです。よろしくお願いします。

  • 【再】エクセル2013 マクロをご教示ください

    Sheet1で選択しているセルの行をSheet2に転写したいです。 Sheet1とSheet2の4行目に見出し。 Shet1にはA~U列までデータがあります。(途中空白セルの場合もあり) Sheet1の5行目以降の、あるセルを選択してマクロを実行すると Sheet1のC~S列までをSheet2のA~Q列へコピペしたいです。 Sheet1は H列に必ずデータがあるので それらを最終行の判断基準とします。 Sheet1での選択セルは複数の場合もあります。 ただし、同じ行のセルを複数選択しても Sheet2への貼り付けは1行とします。 マクロを実行する度に、Sheet1での選択セルの該当行が Sheet2へ追加されるようにしたいです。 (Sheet2へコピペされたデータは残します) また、Sheet2への貼り付け内容が同じだった場合は 注意喚起のため メッセージで 「重複データが存在します」を表示したいです。 重複の判断基準はSheet2の B、D、F列とします。 宜しくお願い致します。

  • マクロ記述を教えてください。

    エクセル2010を使用しています。貼り付けのオプションで 「値のみ」しか選択できないマクロ記述を教えてください。 セル上で右クリックし「コピー」選択後、貼り付け先セルで右クリックした時、「値のみ」しか選択できないファイル設定をしたいと思います。 要するに起動後、すべての「貼り付け」の作業が「値のみ」に限定したいと思います。よろしくお願いします。

  • エクセルマクロについておしえてください

    マクロ1 を実行すると、そのマクロを実行した日時を任意のセルに表し、そのマクロを何度実行しても任意のセルの日時は初回実行日時から変わらない。ただし、マクロ2 を実行すると任意のセルの日時が消される・・・そんなマクロは作成可能でしょうか?

  • EXCELのマクロがわかりません・・・

    現在、A列にデータが並んでいるのですが、 これを7つ区切り(例:A1~A7、A15~A21)にして、 別シートに用意した表に行列を入れ替えて、 貼り付けるマクロを作っているのですが、 なにぶんVBは素人ですので、よくわかりません。 今作ろうとしているマクロは、 「元データ」セルのA1からA7までをコピーして、 「作成データ」セルのB2を起点として、 コピーした内容の行列入れ替えを行い貼り付け、 以後、「元データ」のコピー範囲を7つづつ 下にずらし、「作成データ」の貼り付け起点を 1つづつ下にずらして、「元データ」のA列の 最後までくりかえすものです。 必ず「Range」文で引っかかってしまうのですが、 何か構文的におかしいでしょうか? かなり急ぎですので、 わかる方、よろしくお願いしますっ!! 下に、作成したマクロを貼り付けます。 Sub Macro3() ' ' Macro3 Macro ' マクロ記録日 : 2005/12/5 ユーザー名 : *** Worksheets("元データ").Activate 開始行 = -6 終了行 = 0 ペースト行 = 0 Do 開始行 = 開始行 + 7 終了行 = 終了行 + 7 ペースト行 = ペースト行 + 1 開始セル番号 = "A" & 開始行 終了セル番号 = "A" & 終了行 ペーストセル番号 = "B" & ペースト行 Range("開始セル番号:終了セル番号").Select Selection.Copy Sheets("作成データ").Select Range(ペーストセル番号).Select Selection.PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False _ , Transpose:=True Loop End Sub

  • エクセルマクロについて教えて

    マクロか関数かわかりませんがよく番号を入力すると(例)名前や商品名がでてきますがそれを作りたいのですがなかなかわかりません。マクロで自動記録でコピーして貼り付けでもいいかなと思い試したのですが貼り付けは列と行を指定しないと駄目?できませんでした。 アドバイスお願い致します。

  • Excelマクロ:選択したセルに通し番号を入れたい

    任意のセルを選択している状態で、マクロの実行をすると左上から下へ、一番したへ来たら次の行の一番上から通し番号を入れるというマクロを作りたいのですが、どのようなコードを書けば良いのでしょうか?

  • エクセルのマクロ コマンドボタンなどについて

    エクセルのマクロを作っています。 しかし、コマンドボタンを作って記述しても、エラー(実行時エラー'1004' copyメソッドが失敗しました)が出ます。マイクロソフトのHPのQ&Aを参照してみましたが、それでもうまく動きません。 その他、コンボボックスなども使ってみたいのですが、どうすればボタンを押せば特定の操作が出来るようになるのでしょうか? ちなみに、実行させる内容は、セルのコピーと、データの追加にしたがって、新しいデータに対して自動で新しい番号を割り付ける、この程度です。 大変困っています。 どなたか教えてください。 差し支えなければ、列単位、行単位、セル単位のコピーや、自動で番号を割り付ける簡単なマクロの記述を添えていただけますと、ありがたく存じます。 なにとぞよろしくおねがいします。

専門家に質問してみよう