Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


647 / 76735 ←次へ | 前へ→

【81753】Re:行のを削除・行の挿入について
お礼  TDS  - 21/4/25(日) 13:58 -

引用なし
パスワード
   ▼γ さん:
>1行目から66行目までに「名前定義」をしておき(例:下記test)、
>これを利用して、その範囲の行の挿入・削除が行われたら、その動作を元に戻します。
>
><<シートモジュール>>
>Private Sub Worksheet_Change(ByVal Target As Range)
>  If Intersect(Target, Rows("1:66")) Is Nothing Then Exit Sub
>  If Range("myRange").Rows.Count <> 66 Then
>    Application.EnableEvents = False
>    Application.Undo
>    Application.EnableEvents = True
>  End If
>End Sub
># Application.EnableEventsを操作しているのは、
># Undoによって再度Changeイベントプロシージャが
># 呼ばれることを回避するため。
>
>(*)標準モジュールで一度だけ実行します。(もちろん手作業でも可)
>Sub test()
>  ActiveWorkbook.Names.Add Name:="myRange", RefersToR1C1:="=Sheet1!R1:R66"
>End Su

γ さん、やりたかったことができました。
少し手直しして行の削除と行の挿入ができました。ありがとうございますm(__)m

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim ctr As Integer
  Dim ctc As Integer
  Dim mystr As String
  Dim myrange As Range

  'オブジェクト変数 myrange にセル範囲を放り込みます
  Set myrange = Target.CurrentRegion

  'セル範囲の行数と列数を数えます
  ctr = myrange.Rows.Count
  ctc = myrange.Columns.Count
  
  If Intersect(Target, Rows("1:66")) Is Nothing Then Exit Sub
  If ctr < 66 Then
    Application.EnableEvents = False
    Application.Undo
    Application.EnableEvents = True
  End If
  
End Sub

10 hits

【81734】行のを削除・行の挿入について TDS 21/4/21(水) 15:49 質問[未読]
【81735】Re:行のを削除・行の挿入について 山内 21/4/21(水) 16:24 回答[未読]
【81747】Re:行のを削除・行の挿入について TDS 21/4/23(金) 18:56 お礼[未読]
【81750】Re:行のを削除・行の挿入について sinzo 21/4/24(土) 22:39 回答[未読]
【81752】Re:行のを削除・行の挿入について TDS 21/4/25(日) 13:55 お礼[未読]
【81751】Re:行のを削除・行の挿入について γ 21/4/25(日) 7:41 回答[未読]
【81753】Re:行のを削除・行の挿入について TDS 21/4/25(日) 13:58 お礼[未読]
【81758】Re:行のを削除・行の挿入について γ 21/4/25(日) 15:37 発言[未読]

647 / 76735 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free