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

解決済みの質問

excel vbaについてです

VBA初心者で、暇な時にいろいろためしています。
以下のマクロを組んだのですが、エラーがでてうまくいきません。
どこがいけないのかご指摘願います。


Sub ather()

Dim A As Range
Dim B As Range
Dim i As Integer

With ThisWorkbook.Worksheets("Sheet1")
For i = 1 To 30

Set A = Cells(i, 1)
Set B = Cells(1, i)

If Not .Range(A).Interior.ColorIndex = vbYellow Then GoTo port10
If Not .Range(B).Interior.ColorIndex = vbRed Then GoTo port10

.Range(B).Offset(, 1).Value = "○"


port10:
Next i
End With
End Sub


イメージとしてはセルの塗りつぶしが黄色で、かつ右隣のセルの塗りつぶしが赤の時に、
赤色セルの右隣のセルに○を表示させようとしているのですが。。。
こうしたらいいんじゃない?といったアドバイスもお願いします(-人-)

投稿日時 - 2012-07-03 14:22:52

QNo.7569598

困ってます

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

いくつか間違いがありますね。

まず、
Set A = Cells(i, 1)
Set B = Cells(1, i)
は間違いです。
これだと、Cells(i, 1)とCells(1, i)のセルに入っている値をAとBに代入してしまっているので、
Range(Cells(i, 1)の値)となってしまっているのでもちろんエラーになります。

また、Rangeの使い方ですが、Rangeは二つ以上のセルを含む範囲ではないとエラーになります。
つまりRange(Cells(i, 1))はエラーになってしまうと言うことです。
ひとつのセルを参照するなら、そのままCells(i.1)のみで良いです。

あと「セルの塗りつぶしが黄色で、かつ右隣のセルの塗りつぶしが赤」ということは
一つ目のセルがCells(i, 1)だとすると、その右隣のセルはCells(i, 2)になります。
Cells(1, i)じゃ全然違うセルを参照してしまいます。

あともう一つ、vbYellowやvbRedと一致させたいなら、ColorIndexではなくColorプロパティを使用する必要があります。

これらを総合すると、

Sub ather()
Dim i As Integer
With ThisWorkbook.Worksheets("Sheet1")
For i = 1 To 30
If Not .Cells(i, 1).Interior.Color = vbYellow Then GoTo port10
If Not .Cells(i, 2).Interior.Color = vbRed Then GoTo port10

.Cells(i, 3).Value = "○"

port10:
Next i
End With
End Sub

でOKということになります。
ご参考まで。

投稿日時 - 2012-07-03 15:00:02

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

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

回答(2)

ANo.2

マクロのご相談では,「どこ番地のセル」をキチンと明記します。

>イメージとしてはセルの塗りつぶしが黄色で、かつ右隣のセルの塗りつぶしが赤の時に、

A1:A30の範囲で,黄色のセルについて
隣のB列のセルが赤だったら
隣のC列のセルに○を記入する

マクロにも幾つか間違いがあります。

参考にしてください:
sub macro1()
 dim i as integer
 worksheets("Sheet1").select

 for i = 1 to 30
  if cells(i, "A").interior.color = vbyellow then
   if cells(i, "B").interior.color = vbred then
    cells(i, "C") = "○"
   end if
  end if
 next i
end sub

投稿日時 - 2012-07-03 15:09:30

あなたにオススメの質問