• ベストアンサー

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

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

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

  • ベストアンサー
  • emaxemax
  • ベストアンサー率35% (44/124)
回答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