こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ExcelのVBAで質問です。

以下のようなシートがあります。

A列  B列  C列  D列  E列  F列  G列  H列
NO  名前  確認 日付1 日付2  確認 日付1 日付2

6行目からデータを入れる予定です。
C列には○印を入力します。

C列~E列までデータが入った行は、
F列~H列まで同じ処理をします。
(セルの背景色を変えます。)
以後同じことを列方向で繰り返します。

以下のようなVBAを組みましたが、
○の個数を数える部分でエラーがでます。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim staff As String
Dim kakunin As String
Dim date1 As Date
Dim date2 As Date
Dim i As Long
Dim j As Long
Dim cnt As Long

'100件分ループ
For i = 6 To 105

'○の数をカウント
cnt = WorksheetFunction.CountIf(ActiveSheet.Range(Cells(i, 2), Cells(i, 256)), "○")

'jとは確認の列番号のこと
j = 3 * cnt

staff = Cells(i, 2)
kakunin = Cells(i, j)
date1 = Cells(i, j + 1)
date2 = Cells(i, j + 2)

'スタッフ名が入力されたら
If staff = "" Then
Range(Cells(i, j), Cells(i, j + 50)).Interior.ColorIndex = 15
Else
Cells(i, j).Interior.ColorIndex = xlNone

'○が入力されたら
If kakunin = "○" Then
Range(Cells(i, j + 1), Cells(i, j + 2)).Interior.ColorIndex = xlNone
Else
Range(Cells(i, j + 1), Cells(i, j + 2)).Interior.ColorIndex = 15
End If

If Cells(i, j + 1) <> "" And Cells(i, j + 2) <> "" Then
Cells(i, j + 3).Interior.ColorIndex = xlNone
End If

End If

Next i

End Sub

ご教授いただけたら、幸いです。
よろしくお願いいたします。

投稿日時 - 2011-05-02 18:53:56

QNo.6709466

すぐに回答ほしいです

質問者が選んだベストアンサー

cnt = WorksheetFunction.CountIf(ActiveSheet.Range(Cells(i, 2), Cells(i, 256)), "○")

ここで○が無かった場合cntは0になるので

j = 3 * cnt

はJ=0になります

ですので
kakunin = Cells(i, j)
は列0を指すのでエラーとなります。アプリケーション定義またはオブジェクト定義のエラー

投稿日時 - 2011-05-02 19:39:37

お礼

確かにそうでした!!

If cnt = 0 Then
j = 3
Else
j = 3 * cnt
End If

に変更したことで、解決しました。
お世話になりました。

投稿日時 - 2011-05-03 18:13:53

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

たとえば ○ だけの例ですが


If Target.Column = 3 And Target.Row >= 6 Then
For Each c In Range(Target.Address)
If Cells(c.Row, Target.Column) = "○" Then
Range(Cells(c.Row, Target.Column + 1), Cells(c.Row, Target.Column + 2)).Interior.ColorIndex = xlNone
Else
Range(Cells(c.Row, Target.Column + 1), Cells(c.Row, Target.Column + 2)).Interior.ColorIndex = 15
End If
Next
End If

こんな感じではいかがですか。

投稿日時 - 2011-05-02 20:47:19

補足

Cellの列と行を間違っているようなふしはありますが
Cellを使う場合(行,列)
Rangeは(列行)ですが。

そこらへん見直せば治ると思います。

投稿日時 - 2011-05-02 19:29:34

お礼

回答ありがとうございます。
Cells(行,列)は理解しています。
原因は他にありました。
お世話になりました。

投稿日時 - 2011-05-03 18:17:01

○を数えるところではERRは出ていません
下記のところでひかかってます。
見ているセルがおかしいと思いますが?

F8でデバッグしてみてください。

Date関数のところに○を呼び込もうとしてERRになってます

date1 = Cells(i, j + 1)
date2 = Cells(i, j + 2)

投稿日時 - 2011-05-02 19:22:08

あなたにオススメの質問