Excel VBA質問箱 IV

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

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


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

【35439】奇数行に入力したら、下のセルをクリア オタピョン 06/3/4(土) 20:24 質問[未読]
【35442】Re:奇数行に入力したら、下のセルをクリア ponpon 06/3/4(土) 21:02 発言[未読]
【35459】ponpon さん ありがとうございます オタピョン 06/3/5(日) 14:13 お礼[未読]
【35445】Re:奇数行に入力したら、下のセルをクリア Kein 06/3/4(土) 21:47 回答[未読]
【35461】Kein さん 考え方をありがとうございます オタピョン 06/3/5(日) 14:18 お礼[未読]

【35439】奇数行に入力したら、下のセルをクリア
質問  オタピョン  - 06/3/4(土) 20:24 -

引用なし
パスワード
    もし、奇数行のセルに入力したら、一つ下のセルをクリアして、
逆に偶数行のセルに入力したら、一つ上のセルをクリアしたいのですが、
どなたか教えていただけないでしょうか。

   B列 C列
5  収  ●
6  発   
7  収
8  発

と、いうような表で、収と発で1セットの組み合わせとしています。C列には収の横か、
発の横のどちらか片方だけに●がつくようにしたいのです。

 今、●を簡単にダブルクリックか右クリックで入力できるように、下記のVBAをシートに書き込みました。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column = 3 Then
  Select Case Target.Value
   Case ""
    Target.Value = "●"
   Case Else
    Target.ClearContents
  End Select
  Cancel = True
End If
End Sub

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column = 3 Then
  Select Case Target.Value
   Case ""
    Target.Value = "●"
   Case Else
    Target.ClearContents
  End Select
  Cancel = True
End If
End Sub


 例えば、最初に収の意味でC列の奇数行に●を入力したものの、それが間違いだったとして、
発の隣のC列の偶数行に●を入力したときに、最初に入力した奇数行の●をクリアしたいのです。


 どうか、教えてください。お願いします。

【35442】Re:奇数行に入力したら、下のセルをクリア
発言  ponpon  - 06/3/4(土) 21:02 -

引用なし
パスワード
   こんばんは。

こんな感じでしょうか?
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  Dim D As Long
  With Target
   If .Count > 1 Then Exit Sub
   If .Row < 5 Then Exit Sub
   If .Column = 3 Then
     If .Value = "" Then
      .Value = "●"
      D = .Row Mod 2
      If D = 0 Then
       .Offset(-1).ClearContents
      Else
       .Offset(1).ClearContents
      End If
     Else
     .ClearContents
     End If
    Cancel = True
   End If
  End With
End Sub

【35445】Re:奇数行に入力したら、下のセルをクリア
回答  Kein  - 06/3/4(土) 21:47 -

引用なし
パスワード
   "左隣のB列の値が、収か発かで処理を分岐する"というロジックの方が、確実では
ないでしょーか ? それならこんな感じです。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _
Cancel As Boolean)
  Dim CkR As Range

  On Error Resume Next
  If Intersect(Target, Range("B:B").SpecialCells(2).Offset(, 1)) _
  Is Nothing Then Exit Sub
  If Err.Number <> 0 Then Exit Sub: On Error GoTo 0
  Cancel = True
  With Target
   Select Case .Offset(, -1).Value
     Case "収": Set CkR = .Offset(1)
     Case "発": Set CkR = .Offset(-1)
     Case Else: Exit Sub
   End Select
   If IsEmpty(.Value) Then
     .Value = "●"
     If CkR.Value = "●" Then
      CkR.ClearContents
     End If
   Else
     .ClearContents
   End If
  End With
  Set CkR = Nothing    
End Sub

【35459】ponpon さん ありがとうございます
お礼  オタピョン  - 06/3/5(日) 14:13 -

引用なし
パスワード
   ponpon さんありがとうございました。

思った通りの動作になりました。助かりました。ありがとうございました。

【35461】Kein さん 考え方をありがとうございます
お礼  オタピョン  - 06/3/5(日) 14:18 -

引用なし
パスワード
   Kein さん ありがとうございました。
出来ました。思い通りの動作です。このような論理を組めばいいのですね。大変参考になりました。
この教えてもらったVBAを把握できるよう、勉強します。ありがとうございました。

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