Excel VBA質問箱 IV

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

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


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

【50470】セルデリートで他の列も消す ooisi 07/7/26(木) 17:39 質問[未読]
【50474】Re:セルデリートで他の列も消す Ned 07/7/26(木) 21:35 発言[未読]
【50484】Re:セルデリートで他の列も消す ooisi 07/7/27(金) 1:30 質問[未読]
【50485】Re:セルデリートで他の列も消す Ned 07/7/27(金) 1:40 発言[未読]
【50486】Re:セルデリートで他の列も消す ooisi 07/7/27(金) 1:53 質問[未読]
【50487】Re:セルデリートで他の列も消す Ned 07/7/27(金) 2:09 発言[未読]
【50488】Re:セルデリートで他の列も消す ooisi 07/7/27(金) 2:19 お礼[未読]

【50470】セルデリートで他の列も消す
質問  ooisi  - 07/7/26(木) 17:39 -

引用なし
パスワード
   教えてください
R17:R550の範囲で1行毎で良いのですが
デリートしたときにA列とD列も同時に消したいのですが
どのようにコード画けばよいですか
過去データで調べてoffsetはわかったのですが・・・
よろしくお願いします。

  Dim r As Range
  Dim rr As Range
  
  Set rr = Intersect(Target, Range("R17:R550"))
  If rr Is Nothing Then Exit Sub
  
  Application.EnableEvents = False
  For Each r In rr
    If r.Value = "" Then
      r.Offset(, -14).ClearContents
      r.Offset(, -17).ClearContents

【50474】Re:セルデリートで他の列も消す
発言  Ned  - 07/7/26(木) 21:35 -

引用なし
パスワード
   ▼ooisi さん:
こんにちは。
そのコードでできているようですよ?
該当SheetのシートモジュールのWorksheet_Changeイベントで書かれているのですよね。
何か問題があるのでしょうか?
(A,D列が結合セルでしたらちょっと修正が必要かもしれません)

【50484】Re:セルデリートで他の列も消す
質問  ooisi  - 07/7/27(金) 1:30 -

引用なし
パスワード
   ▼Ned さん:
返事ありがとうございます。
目的は達成できました。
下記コードにおいて
ちょっと不安な部分があります。
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim r As Range
  Dim rr As Range
  
  Set rr = Intersect(Target, Range("R17:R550"))
  If rr Is Nothing Then Exit Sub
  
  Application.EnableEvents = False
  For Each r In rr
    If r.Value = "" Then
      r.Offset(, -14).ClearContents
      r.Offset(, -17).ClearContents
    Else
      ★この部分はどのようにするのがベストでしょうか
    End If
  Next
  Set rr = Nothing
End Sub
よろしくお願いします。

>▼ooisi さん:
>こんにちは。
>そのコードでできているようですよ?
>該当SheetのシートモジュールのWorksheet_Changeイベントで書かれているのですよね。
>何か問題があるのでしょうか?
>(A,D列が結合セルでしたらちょっと修正が必要かもしれません)

【50485】Re:セルデリートで他の列も消す
発言  Ned  - 07/7/27(金) 1:40 -

引用なし
パスワード
   ▼ooisi さん:
>★この部分はどのようにするのがベストでしょうか
r.Valueが""ではない時に何をさせたいか、ですが。
何もさせる必要がなければ何も書かなくても良いかと思います。
その時は
>Else
も不要です。

また、あまりないと思いますが、
>If r.Value = "" Then
は例えば =IF(S17="","",1) などの数式を入れた時も TRUE と判断されますから
If IsEmpty(r.Value) Then
としておいたほうが良いかもしれません。

【50486】Re:セルデリートで他の列も消す
質問  ooisi  - 07/7/27(金) 1:53 -

引用なし
パスワード
   ▼Ned さん:
深夜の回答
ありがとうございます。
説明よーくわかりました。

追加でdelがもう一つ必要なってしまったのですが
"Q17:Q550"をdelした場合r.Offset(, -16).ClearContents(A列)は
下記コードにどのように組み込めばよいのでしょうか
たびたびすみませんよろしくお願いします。

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim r As Range
  Dim rr As Range
  
  Set rr = Intersect(Target, Range("R17:R550"))
  If rr Is Nothing Then Exit Sub
  
  Application.EnableEvents = False
  For Each r In rr
    If r.Value = "" Then
      r.Offset(, -14).ClearContents
      r.Offset(, -17).ClearContents←ここを消去
    Else
      ★この部分はどのようにするのがベストでしょうか
    End If
  Next
  Set rr = Nothing
End Sub

>▼ooisi さん:
>>★この部分はどのようにするのがベストでしょうか
> r.Valueが""ではない時に何をさせたいか、ですが。
>何もさせる必要がなければ何も書かなくても良いかと思います。
>その時は
>>Else
>も不要です。
>
>また、あまりないと思いますが、
>>If r.Value = "" Then
>は例えば =IF(S17="","",1) などの数式を入れた時も TRUE と判断されますから
>If IsEmpty(r.Value) Then
>としておいたほうが良いかもしれません。

【50487】Re:セルデリートで他の列も消す
発言  Ned  - 07/7/27(金) 2:09 -

引用なし
パスワード
   ▼ooisi さん:
あまり難しく考えず、またOffsetに拘らず、下記みたいな感じで良いかと。

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim r As Range
  Dim rr As Range

  Set rr = Intersect(Target, Range("Q17:R550"))
  If rr Is Nothing Then Exit Sub
  Application.EnableEvents = False
  For Each r In rr
    If IsEmpty(r.Value) Then
      Cells(r.Row, 1).ClearContents
      Cells(r.Row, 4).ClearContents
    End If
  Next r
  Set rr = Nothing
  Application.EnableEvents = True '■必要
End Sub

【50488】Re:セルデリートで他の列も消す
お礼  ooisi  - 07/7/27(金) 2:19 -

引用なし
パスワード
   ▼Ned さん:
ありがとうございました。
簡単なコードで出来るのですね
固い頭ではダメですね(-_-;)
Offset Onlyでは・・・
遅くまで本当にありがとうございました。
安心して、これで眠りにつけます。
また、お願いします。

>あまり難しく考えず、またOffsetに拘らず、下記みたいな感じで良いかと。
>
>Private Sub Worksheet_Change(ByVal Target As Range)
>  Dim r As Range
>  Dim rr As Range
>
>  Set rr = Intersect(Target, Range("Q17:R550"))
>  If rr Is Nothing Then Exit Sub
>  Application.EnableEvents = False
>  For Each r In rr
>    If IsEmpty(r.Value) Then
>      Cells(r.Row, 1).ClearContents
>      Cells(r.Row, 4).ClearContents
>    End If
>  Next r
>  Set rr = Nothing
>  Application.EnableEvents = True '■必要
>End Sub

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