Macでも上手くいったのでしょうか?
> merlionXXさんは前回の質問の時に教えていただいたサイトでVBAを覚えられたんですか?
あそこもそうですし、他にも探すと役立つサイトはたくさんありますよ。
ここでもいろいろ教えてもらいましたし。
あと、どうでもいいところですが、コードを少し直してみました。
Private Sub Worksheet_Change(ByVal Target As Range) 'チェンジイベントで作動
If Target.Column < 3 Or Target.Column > 32 Then Exit Sub '3~32列に入力時以外はマクロ終了
If Selection.Rows.Count > 1 Then 'もし複数行を選択した場合
MsgBox "複数行を操作しないで下さい。(複数列はOKです)", vbCritical, "Σ( ̄ロ ̄lll) " '警告
With Application
.EnableEvents = False 'イベント発生一時停止
.Undo 'やり直し
.EnableEvents = True 'イベント発生再開
End With
Exit Sub 'マクロ終了
End If '「場合」終わり
Dim l As Long, c As Integer, v As Variant, r As Range, x As Variant
l = Target.Row '入力行を取得
x = 0 'カウントを0にする
For Each r In Range(Cells(l, "C"), Cells(l, "AF")) '入力行のC~AF各セルについて
v = Val(StrConv(Left(r.Value, 1), vbNarrow)) '先頭の1文字を半角数値化
Select Case v '先頭の1文字で分岐
Case "" '空白の場合、何もしない
Case 1 '先頭の1文字が1の場合
c = 6: x = x + 1 '色番号6、カウントする
Case 2 '2の場合
c = 4 '色番号4
Case 3 '3の場合
c = 34 '色番号34
Case 4 '4の場合
c = 3 '色番号3
Case Else 'その他の場合
c = 0 '色番号0
End Select '分岐終了
r.Interior.ColorIndex = c 'セル背景色を色番号の色に変える
Next '繰り返し
x = IIf(x > 0, x, "") 'カウントが0なら無し
Cells(l, "B") = x '入力行のBセルにカウントした数を代入
End Sub
おはようございます、ao_さん。
Macだったのですね。わたしは、OSがWindows2000,Excel2000とOSがWindowsXP,Excel2003でNo2のコードをそのままコピペして試してみましたが問題なく動きました。
再度、修正してみますが、これでもダメならお手上げです。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column < 3 Or Target.Column > 32 Then Exit Sub '3~32列を対象
If Selection.Rows.Count > 1 Then
MsgBox "縦にドラッグしないで下さい。(横はOK)"
With Application
.EnableEvents = False
.Undo
.EnableEvents = True
End With
Exit Sub
End If
Dim l As Long, c As Integer, v As String, r As Range, x As Variant
l = Target.Row '入力行取得
x = 0
For Each r In Range("C" & l & ":AF" & l) '入力行各セルについて
v = Val(StrConv(Left(r.Value, 1), vbNarrow)) '先頭の1文字を半角数値化
Select Case v '先頭の1文字で判定
Case 1 '先頭の1文字が1の場合
c = 6: x = x + 1 '色番号6、カウントする
Case 2 '先頭の1文字が2の場合
c = 4 '色番号4・・・以下略
Case 3
c = 34
Case 4
c = 3
Case Else 'その他の場合
c = 0
End Select
r.Interior.ColorIndex = c 'セル背景色を色番号のものに変える
Next '繰り返し
x = IIf(x > 0, x, "") 'カウントが0なら無し
Cells(l, "B") = x '入力行のBセルにカウントした数を代入
End Sub
> 標準モジュールを作成し、コピーしてみましたが、反応がありません。
シートのモジュールにコピペしてくださいと書いたと思います。
ao_さんの以前の質問、QNo.2597539でも同様だと思いますが、セルの入力値の変化というチェンジイベントを捉えて作動するのがPrivate Sub Worksheet_Changeのコードです。標準モジュールではだめです。
ついでですから、コードもちょと修正してみました。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column < 3 Or Target.Column > 32 Then Exit Sub '3~32列を対象
If Selection.Rows.Count > 1 Then
MsgBox "縦にドラッグしないで下さい。(横はOK)"
With Application
.EnableEvents = False
.Undo
.EnableEvents = True
End With
Exit Sub
End If
l = Target.Row '入力行取得
x = 0
For Each r In Range("C" & l & ":AF" & l) '入力行各セルについて
Select Case Left(r, 1) '先頭の1文字で判定
Case 1 '先頭の1文字が1の場合
c = 6: x = x + 1 '色番号6、カウントする
Case 2 '先頭の1文字が2の場合
c = 4 '色番号4・・・以下略
Case 3
c = 34
Case 4
c = 3
Case Else 'その他の場合
c = 0
End Select
r.Interior.ColorIndex = c 'セル背景色を色番号のものに変える
Next '繰り返し
x = IIf(x > 0, x, "") 'カウントが0なら無し
Cells(l, "B") = x '入力行のBセルにカウントした数を代入
End Sub
お試し下さい。
ao_さん、こんにちは。
対象シートのモジュールに以下をコピペしてみてください。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column < 3 Or Target.Column > 32 Then Exit Sub '3~32列を対象
l = Target.Row '入力行取得
x = 0
For Each r In Range("C" & l & ":AF" & l) '入力行各セルについて
Select Case Left(r, 1) '先頭の1文字で判定
Case 1 '先頭の1文字が1の場合
c = 6: x = x + 1 '色番号6、カウントする
Case 2 '先頭の1文字が2の場合
c = 4 '色番号4・・・以下略
Case 3
c = 34
Case 4
c = 3
Case Else 'その他の場合
c = 0
End Select
r.Interior.ColorIndex = c 'セル背景色を色番号のものに変える
Next '繰り返し
x = IIf(x > 0, x, "") 'カウントが0なら無し
Cells(l, "B") = x '入力行のBセルにカウントした数を代入
End Sub
お礼
>変ですね、わたしはWin2000で同様に保護をかけてやってみましたが、瞬時に色が変わりました。 おそらく、Macだからだと思います。 明日、会社のWinで確認してみます。 何度も何度もご丁寧にお答えいただきありがとうございました。