Excel VBA質問箱 IV

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

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


9272 / 13644 ツリー ←次へ | 前へ→

【28237】空白のセルを飛ばして処理したい あさか 05/9/1(木) 0:00 質問[未読]
【28239】Re:空白のセルを飛ばして処理したい かみちゃん 05/9/1(木) 0:10 回答[未読]
【28271】Re:空白のセルを飛ばして処理したい あさか 05/9/1(木) 20:30 質問[未読]
【28276】Re:空白のセルを飛ばして処理したい nossori 05/9/1(木) 21:53 回答[未読]
【28277】Re:空白のセルを飛ばして処理したい [名前なし] 05/9/1(木) 21:59 回答[未読]
【28278】Re:空白のセルを飛ばして処理したい [名前なし] 05/9/1(木) 22:02 発言[未読]
【28280】Re:空白のセルを飛ばして処理したい あさか 05/9/1(木) 23:20 お礼[未読]
【28283】Re:空白のセルを飛ばして処理したい かみちゃん 05/9/1(木) 23:35 発言[未読]
【28284】Re:空白のセルを飛ばして処理したい [名前なし] 05/9/1(木) 23:44 回答[未読]
【28285】Re:空白のセルを飛ばして処理したい あさか 05/9/2(金) 7:38 お礼[未読]

【28237】空白のセルを飛ばして処理したい
質問  あさか  - 05/9/1(木) 0:00 -

引用なし
パスワード
   以下のような記述で動作させたのですが空白のセルが2〜3行以上あると
動作が止まってしまいます。また1番最初の時もうまく処理してくれません。
用途的にはランダムに"A1:B100"まで日付を入力したいのですが・・・
どなたか、お助けください。

あとですね、出来れば入力前(空白のセル)も色を付けたいし、
入力後のセルも数字を消去したら、空白のセルと同じ色に戻ってもらいたいです。

よろしくお願い致します。

--------------------------------------------------------

Sub auto_open()
  
Dim MyColorIndex
Dim Worksheet_SelectionChange
Dim Worksheet_Change
Dim MyValue As Integer
Dim MyRange As Object


For Each MyRange In Worksheets(1).Range("A1:B100") 
MyValue = MyRange.Value
    
'On Error Resume Next  ’ここがもんだいかな?

With MyRange.Interior 

Select Case MyValue

Case 1 To 31
.ColorIndex = 34

Case Else
.ColorIndex = xlNone

End Select
End With
Next

End Sub

--------------------------


どうぞ、よろしくお願い致します。

【28239】Re:空白のセルを飛ばして処理したい
回答  かみちゃん  - 05/9/1(木) 0:10 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>以下のような記述で動作させたのですが空白のセルが2〜3行以上あると
>動作が止まってしまいます。また1番最初の時もうまく処理してくれません。

動作がよく理解できないのですが、
特定のセル範囲の「数値」または「文字」が入っているセル範囲のみ処理する場合は、
一般操作の「編集」−「ジャンプ」の「セル選択」で「定数」を選択し、「数値」と「文字」にチェックを入れる
という操作を「マクロの記録」で記録して、少し変えると次のようなコードでできると思います。

Sub Macro1()
 Dim MyRange As Range
 For Each MyRange In Range("A1:B100").SpecialCells(xlCellTypeConstants, 3)
  MsgBox MyRange.Address(0, 0) & " の値は " & MyRange.Value
 Next
End Sub

【28271】Re:空白のセルを飛ばして処理したい
質問  あさか  - 05/9/1(木) 20:30 -

引用なし
パスワード
   動作なんですが言葉ではうまく言えませんので図で・・・

  A B
1  1 1 ←入力するとセルの色が変わる
2     ←空白のセルの色
3 12 2 ←削除すると空白のセルと同じ色に戻る
:
:
100

てな感じで入力するたびにセルの色が変化するよう
動いてくれるとうれしいのですが

ご理解していただけますか?

【28276】Re:空白のセルを飛ばして処理したい
回答  nossori  - 05/9/1(木) 21:53 -

引用なし
パスワード
   ▼あさか さん:
今晩はこれで一度試してみてください。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 
Dim MyValue As Integer
Dim MyRange As Object

For Each MyRange In Worksheets(1).Range("A1:B100")
MyValue = MyRange.Value
  
With MyRange
Select Case MyValue

Case 1 To 31
.Interior.ColorIndex = 34

Case Else
.Interior.ColorIndex = xlNone

End Select
End With
Next

End Sub


>動作なんですが言葉ではうまく言えませんので図で・・・
>
>  A B
>1  1 1 ←入力するとセルの色が変わる
>2     ←空白のセルの色
>3 12 2 ←削除すると空白のセルと同じ色に戻る
>:
>:
>100
>
>てな感じで入力するたびにセルの色が変化するよう
>動いてくれるとうれしいのですが
>
>ご理解していただけますか?

【28277】Re:空白のセルを飛ばして処理したい
回答  [名前なし]  - 05/9/1(木) 21:59 -

引用なし
パスワード
   ▼あさか さん:
>3 12 2 ←削除すると空白のセルと同じ色に戻る

>てな感じで入力するたびにセルの色が変化するよう

であれば、Changeイベントでしょう。
シートモジュールに記述して、セル値の変更や削除をしてみてください。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cell As Range

  Set Target = Intersect(Target, Range("A1:B100"))
  If Target Is Nothing Then Exit Sub
  
  For Each Cell In Target
    With Cell
      Select Case .Value
      Case 1 To 31
        .Interior.ColorIndex = 34
      Case Else
        .Interior.ColorIndex = xlNone
      End Select
    End With
  Next

End Sub

【28278】Re:空白のセルを飛ばして処理したい
発言  [名前なし]  - 05/9/1(木) 22:02 -

引用なし
パスワード
   ▼あさか さん:
>あとですね、出来れば入力前(空白のセル)も色を付けたいし、
>入力後のセルも数字を消去したら、空白のセルと同じ色に戻ってもらいたいです。
空白セルに色をつけるとなっていますが、

>Select Case MyValue
>
>Case 1 To 31
>.ColorIndex = 34
>
>Case Else
>.ColorIndex = xlNone
>
>End Select
>End With

だと、空白セルには色はつきませんけど。

【28280】Re:空白のセルを飛ばして処理したい
お礼  あさか  - 05/9/1(木) 23:20 -

引用なし
パスワード
   みなさん、ありがとうございます。
動きました。
しかし、問題が・・・
現在、シートをパス付きで保護しています。
セルの保護は解除していますが止まってしまいます。
シートの保護を解除してあげると問題ないのですが
良い解決策はありますか?

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cell As Range

  Set Target = Intersect(Target, Range("A1:B100"))
  If Target Is Nothing Then Exit Sub
 
  For Each Cell In Target
    With Cell
      Select Case .Value
      Case 1 To 31
        .Interior.ColorIndex = 20 ←ここでとまる
      Case Else
        .Interior.ColorIndex = 40
      End Select
    End With
  Next

End Sub

よろしくお願い致します。

【28283】Re:空白のセルを飛ばして処理したい
発言  かみちゃん  - 05/9/1(木) 23:35 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>現在、シートをパス付きで保護しています。
>セルの保護は解除していますが止まってしまいます。
>シートの保護を解除してあげると問題ないのですが

For 〜 Next の前後でシートの保護を解除・設定すればいいのではないでしょうか?
そのコードは、「マクロの記録」で記録すれば、わかると思います。

【28284】Re:空白のセルを飛ばして処理したい
回答  [名前なし]  - 05/9/1(木) 23:44 -

引用なし
パスワード
   ▼あさか さん:
>現在、シートをパス付きで保護しています。
>セルの保護は解除していますが止まってしまいます。
>シートの保護を解除してあげると問題ないのですが
>良い解決策はありますか?
Excelのバージョンによりますが、シートの保護をする時に許可する操作が選択
できるのであれば、「セルの書式設定」のところにチェックをつけるだけでいいはずです。
これが出来ないのであれば、かみちゃんさんが提案された方法でいいと思います。

【28285】Re:空白のセルを飛ばして処理したい
お礼  あさか  - 05/9/2(金) 7:38 -

引用なし
パスワード
   みなさま本当にありがとうございました。
また、お力を貸していただくことがあるかと思いますが
よろしくお願い致します。

ありがとうございました。

完成版は下記です。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cell As Range

  Set Target = Intersect(Target, Range("A1:B100"))
  If Target Is Nothing Then Exit Sub
 
  ActiveSheet.Unprotect Password:="1234"
  
  For Each Cell In Target
    With Cell
      Select Case .Value
      Case 1 To 31
        .Interior.ColorIndex = 20
      Case Else
        .Interior.ColorIndex = 40 '塗りつぶしなしの場合は「xlNone」
      End Select
    End With
  Next
  
  ActiveSheet.Protect Password:="1234"

End Sub

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