• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル マクロ 初心者です)

エクセルマクロ初心者が複数のWorksheet_Changeを1つのシートで実行する方法

このQ&Aのポイント
  • エクセルマクロ初心者が複数のWorksheet_Changeを1つのシートで実行させる方法について教えてください。
  • Private Sub Worksheet_Change(ByVal Target As Range)を2つ組み合わせて1つのシートで動作させたいのですが、うまくいきません。単体では動作します。
  • 初心者なので組み合わせ方が分かりません。どのようにすれば複数のWorksheet_Changeを1つのシートで動作させることができるでしょうか。

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

  • ベストアンサー
  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.2

質問の趣旨は明確ではないが、たぶん下記のようにやりたいのかなと思う。 入力の範囲は特定していない。 特にコピー元の特定はわからないから、Excelからのコピーだけはできないようにしてあるつもり。 Private Sub Worksheet_Change(ByVal Target As Range) f = True For Each c In Target If c <> "" Then f = False Next If f Then Exit Sub With Application .EnableEvents = False If Target.Count > 1 Then MsgBox "複数セルへの入力はダメです。" .Undo .CutCopyMode = False .EnableEvents = True Exit Sub End If If .CutCopyMode <> False Then MsgBox "コピーは禁止!!" & Chr(10) & "データを消去します。" .Undo .CutCopyMode = False Else Target = StrConv(Target, vbUpperCase) End If .EnableEvents = True End With End Sub

OKWAVEKEROKERO
質問者

お礼

私が期待した通りの動作でした。 情報不足で申し訳ありませんでした。 ご回答いただきました内容を理解するため頑張っていきます。 本当に助かりました。 ありがとうございました。

その他の回答 (1)

回答No.1

見た感じ、イベントで、MsgBox を出すのは、あまりうまくありませんから、本当に実用に耐えるものかどうかはなんとも言えませんが、テスト段階でしょうか? 1> Target = StrConv(Target, vbUpperCase) 2>"コピーは禁止!!", これらは、同じセル(列)で行おうとしているのでしょうか? そもそも、これをお使いなろうとしているExcelのバージョンはいくつなのでしょうか? それによっても、コードが変わるのではないかと思います。

OKWAVEKEROKERO
質問者

補足

excel 2010を使用しています。 No1はcaps lockで入力規則でABCなどの『半角英数』大文字を入力させたいため、「a」と入力されたら「A」に強制変換。 No2は他のシートやブックからのコピー防止です。 1つのセルのみと2つ以上セルをコピーしようとした時にキャンセルさせるためです。 私を含めて初心者が多いので、この2つの条件が必要と思いお願いしたところでした。 よろしくお願いします。

関連するQ&A