Excel VBA質問箱 IV

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

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


7030 / 13646 ツリー ←次へ | 前へ→

【41616】Range("A1:A5").Value = "" 等の不思議 Jaka 06/8/17(木) 9:55 発言[未読]
【41620】Re:Range("A1:A5").Value = &qu... ichinose 06/8/17(木) 10:27 発言[未読]
【41643】Re:Range("A1:A5").Value = &am... ichinose 06/8/18(金) 7:53 発言[未読]
【41662】Re:Range("A1:A5").Value = &am... Jaka 06/8/18(金) 16:31 発言[未読]

【41616】Range("A1:A5").Value = &quo...
発言  Jaka  - 06/8/17(木) 9:55 -

引用なし
パスワード
   昨日、Worksheet_Changeのコードを書いていて気づいたことですが...。

A、B列こんな感じに適当な文字を入れます。

A B
あ い
あ い
あ い
あ い
あ い
あ い
あ い

シートモジュールに下記マクロを

Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Cells(1).Value = "" Then
   Application.EnableEvents = False
   Target.Offset(, 1) = ""
   Application.EnableEvents = True
 End If
End Sub

A列の文字を消すと同じ行のB列の文字が消えます。
この後、編集メニューの元に戻す等が生きています。
実際、元に戻してみると、A列の消した分だけ元に戻ります。
(Ctrl + Z でも同じ)
Target.Offset(, 1) = "1"
などと、何か文字の類を入れると元に戻せません。
(セルの文字を消した場合限定。)
Range("A1:A5").ClearContents
等で、消した場合は元に戻せません。

下記コードも同じようなものです。
C1以外の適当なセルに1を入れると、C1の値が消えます。
Ctrl + Z で、元に戻すと1を入れたセルだけ元に戻ります。

Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Value = 1 Then
   Application.EnableEvents = False
   Range("C1") = ""
   Application.EnableEvents = True
 End If
End Sub

今度は、下記コードをマクロ登録してボタンから試してみました。
同じようにマクロで文字を消した操作以外は元に戻せます。
表現があっているのか解りませんが、
元に戻せるのは、マクロで消した文字を入力した直後までで、入力した文字はマクロで消されている為、それ以前の操作は元に戻せなかった。

Sub dkdk()
  Range("A1:A5").Value = ""
End Sub
""は、Emptyでも可。

マクロでセル内容を変えた場合、ずべて元に戻せないと思っていましたが、
こんなものなのでしょうか?
今まで知らなかった。

By Win98se & EXL2000SR1

【41620】Re:Range("A1:A5").Value = &...
発言  ichinose  - 06/8/17(木) 10:27 -

引用なし
パスワード
   ▼Jaka さん:
おはようございます。
Win2000 & Excel2002 SP3 でも確認しました。

出かけてしまうのでとりあえず、他のバージョンでも再現することを
ご報告まで・・・・。

【41643】Re:Range("A1:A5").Value = &...
発言  ichinose  - 06/8/18(金) 7:53 -

引用なし
パスワード
   ▼Jaka さん:
おはようございます。

元に戻せるマクロの例の追加で

>マクロでセル内容を変えた場合、ずべて元に戻せないと思っていましたが、
>こんなものなのでしょうか?

達人 芳坂和行さんのサイトの「日替わりエクセルQ」で確か

Excel4Macroは、元に戻せる という記述がありました。
これの過去問題がどうやったら見れるのだろう??

http://hp.vector.co.jp/authors/VA016119/index.html


例えば、新規ブックの標準モジュールに

'=============================================================
Sub test()
  With Range("a1:a20")
    .Formula = "=row()"
    .Value = .Value
    .Cells(8).Select
    ExecuteExcel4Macro "INSERT(2)"
    .Cells(1).Select
    End With
End Sub


これを実行すると、セルA8でExcel4Macroでセルの挿入を行っています。
これは、元に戻せます。

ということでUndoが有効な場合の例でした。




【41662】Re:Range("A1:A5").Value = &...
発言  Jaka  - 06/8/18(金) 16:31 -

引用なし
パスワード
   ichinose さん こんにちは。

これで試してみました。
Sub dmmm()
ExecuteExcel4Macro "INSERT(2)"
End Sub

2回挿入した後、元に戻してみたら1回ポッキリしか戻ってくれませんでした。
色々あるものですねぇ。
今度、ExecuteExcel4Macroの講習会開いてください。
簡単ですみません。
ここに着にくい場所(部署)で、エラーが頻繁にでると、余計にきにくいです。

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