Excel VBA質問箱 IV

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

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


6140 / 13645 ツリー ←次へ | 前へ→

【46954】セルを選択せずにデータを削除し、セルの保護をオン・オフする記述 fryday 07/2/23(金) 10:01 質問[未読]
【46955】Re:セルを選択せずにデータを削除し、セル... ぱっせんじゃー 07/2/23(金) 10:15 発言[未読]
【46956】Re:セルを選択せずにデータを削除し、セル... りん 07/2/23(金) 10:19 回答[未読]
【46958】Re:セルを選択せずにデータを削除し、セル... fryday 07/2/23(金) 11:46 質問[未読]
【46959】Re:セルを選択せずにデータを削除し、セル... りん 07/2/23(金) 12:08 回答[未読]
【46966】Re:セルを選択せずにデータを削除し、セル... fryday 07/2/23(金) 15:43 質問[未読]
【46975】Re:セルを選択せずにデータを削除し、セル... りん 07/2/23(金) 19:03 発言[未読]

【46954】セルを選択せずにデータを削除し、セルの...
質問  fryday  - 07/2/23(金) 10:01 -

引用なし
パスワード
   Select Caseのなかで次のような記述で処理は可能なのですが…
実行するとセルに移動して処理するため、非常に見苦しく感じます。

 Select Case kubun
     Case 1

     Sheet1.Unprotect password:=""
     Targetcell.Offset(0, 2).Select 
     Selection.Locked = False
     
     Targetcell.Offset(0, 5).Select 
     Selection.Locked = False
    
     Targetcell.Offset(0, 8).Select 
     SendKeys "{DEL}", True
     Selection.Locked = True
     
     Targetcell.Offset(0, 12).Select
     SendKeys "{DEL}", True
     Selection.Locked = True
     
     Targetcell.Offset(0, 14).Select 
     SendKeys "{DEL}", True
     Selection.Locked = False
     
     Targetcell.Select
     Sheet1.Protect password:=""
     

データの削除は Targetcell.Offset(0, 2).value = Null
で可能だと思うのですが…
セルの保護オン・オフについては セル選択してからSelection.Locked = True
で実行しないと、うまく動作せず前記のような記述になりました。
何か別の方法はないのでしょうか?お知恵を貸して下さい。
宜しくお願い致します。

【46955】Re:セルを選択せずにデータを削除し、セ...
発言  ぱっせんじゃー  - 07/2/23(金) 10:15 -

引用なし
パスワード
   参考になるかな?

Selectするな!
http://www.officetanaka.net/excel/vba/speed/s2.htm

【46956】Re:セルを選択せずにデータを削除し、セ...
回答  りん E-MAIL  - 07/2/23(金) 10:19 -

引用なし
パスワード
   fryday さん、こんにちわ。

>セルの保護オン・オフについては セル選択してからSelection.Locked = True
>で実行しないと、うまく動作せず前記のような記述になりました。

frydayさんの処理をベタに書くなら、たとえばこんな感じです。

Select Case kubun
  Case 1
   With Targetcell
     .Parent.Unprotect Password:="" 'RangeのParentはSheet
     .Offset(0, 2).Locked = False '保護しない
     .Offset(0, 5).Locked = False '保護しない
     .Offset(0, 8).ClearContents 'SendKey{DEL}=>ClearContents
     .Offset(0, 8).Locked = True '保護する
     .Offset(0, 12).ClearContents 'SendKey{DEL}=>ClearContents
     .Offset(0, 12).Locked = True '保護する
     .Offset(0, 14).ClearContents 'SendKey{DEL}=>ClearContents
     .Offset(0, 14).Locked = False '保護しない
     .Parent.Protect Password:=""
   End With

【46958】Re:セルを選択せずにデータを削除し、セ...
質問  fryday  - 07/2/23(金) 11:46 -

引用なし
パスワード
   りんさん、ぱっせんじゃーさん、早速のご回答有り難う御座います。

ぱっせんじゃーさんの情報拝見致しました、参考にさせて頂きます

さて、りんさんのコードは具体的にご指導頂いたので試しましたが、2行目の

 .Offset(0, 2).Locked = False '保護しない

箇所で次のメッセージが表示されエラーとなります。

 Range クラスの Locked プロパティを設定できません。

このメッセージは私も

 Targetcell.Offset(0, 2).Selectを

 Targetcell.Offset(0, 2).Locked = False

で試した時にも発生し、挫折してました…

【46959】Re:セルを選択せずにデータを削除し、セ...
回答  りん E-MAIL  - 07/2/23(金) 12:08 -

引用なし
パスワード
   fryday さん、こんにちわ。

>さて、りんさんのコードは具体的にご指導頂いたので試しましたが、2行目の
> .Offset(0, 2).Locked = False '保護しない
>箇所で次のメッセージが表示されエラーとなります。
新規のシートで試したときはエラーにならなかったです。

> Range クラスの Locked プロパティを設定できません。
これが出て、
> Targetcell.Offset(0, 2).Select・・・
Selectしたら出ないのなら、Targetcell.Offset(0, 2)のセルが結合セルではないですか?

もし、結合セルなら、
  With targetcell
   .Parent.Unprotect Password:="" 'RangeのParentはSheet
   .Offset(0, 2).MergeArea.Locked = False '保護しない
   .Offset(0, 5).MergeArea.Locked = False '保護しない
   .Offset(0, 8).MergeArea.ClearContents 'SendKey{DEL}=>ClearContents
   .Offset(0, 8).MergeArea.Locked = True '保護する
   .Offset(0, 12).MergeArea.ClearContents 'SendKey{DEL}=>ClearContents
   .Offset(0, 12).MergeArea.Locked = True '保護する
   .Offset(0, 14).MergeArea.ClearContents 'SendKey{DEL}=>ClearContents
   .Offset(0, 14).MergeArea.Locked = False '保護しない
   .Parent.Protect Password:=""
  End With


です。
ちなみに、こちらの環境はXL2003 & WinXPです。

【46966】Re:セルを選択せずにデータを削除し、セ...
質問  fryday  - 07/2/23(金) 15:43 -

引用なし
パスワード
   りんさん またまた有り難う御座います

そして申しわけありません 結合が影響するとは思いませんでした…
確かにTargetcellとOffsetがらみのセルは全て結合セルでした。

まずはMergeAreaに修正した結果のご報告です
☆☆☆です無事に動きました〜♪

無事に動くのですがシートの保護でもう少し質問させて下さい。

まず .Parent.Unprotect Password:=""と
Sheet1.Unprotect Password:="" の違いが判りません

それと.Parent.Unprotect Password:=""を
Select Caseの前と外に設定すれば、複数あるCaseの内側に書くより
簡単と思い試しましたが、エラーの連続でパニックになりました。
またSelect Caseの内側と最後のEnd Selectの前も同じ結果で、
ますますパニック状態に…

たぶん.Parent.Unprotect Password:=""と
Sheet1.Unprotect Password:="" の違いが問題かと思い、
教えて頂いた.Parent.Unprotect Password:=""を使わず
Sheet1.Unprotect Password:=""を試すと、
Private Sub Workbook_Open()内の記述がエラーに…
ここで最悪の状態になりました。

このブックマクロでは Sheet1.Unprotect Password:=""が殆どで
各所に使用しております。
教えて頂いたコードのマクロは同じシートの
Private Sub Worksheet_Change(ByVal Target As Range)の中で動かしています。

流れをご説明しますと、ブックのPrivate Sub Workbook_Open()で
同じシートの別な単独セルに、
  Sheet1.Unprotect Password:=""
の処理後に文字を自動で入力しています。
  Sheet1.Protect Password:="" で終了しています

従って、Workbook_OpenでWorksheet_Changeイベントが発生するのですが
範囲を設定して、ターゲットセルでない場合は
教えて頂いたコードのマクロは動きません

またフォームのボタンでもtargetcellに1桁の数字を
下方向に自動で連続入力しています
この場合 Worksheet_Changeイベントのターゲットセル範囲であるため
教えて頂いたコードのマクロが動くことになります。

このようにいろいろな箇所でシートの保護と解除をしながらなので
パニック解消に苦労しました。

以上、結果のご報告です。
時間がありましたら、質問にご回答頂ければ幸いです。

PS 当方環境 WinXP EXCEL2000です。

【46975】Re:セルを選択せずにデータを削除し、セ...
発言  りん E-MAIL  - 07/2/23(金) 19:03 -

引用なし
パスワード
   fryday さん、こんばんわ。

どんなエラーですか?
エラーメッセージを見ないとなんともいえません。
保護解除の失敗なら、TargetCellがSheet1上のセルでないということですが。

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