プロが教える店舗&オフィスのセキュリティ対策術

エクセルのVBAの質問です。
どうしてもできないのでお尋ねします。

例えば下のようなものがあったとします。セルのA列が3000だったら、B列の数字を5300に置き換えてセルの色を薄いピンク(色番号は適当で)。一方A列にExtが入っていたら、Bの数字を5400に置き換えて濃いピンク(色番号は適当で)に変えたい場合のVBAはどうなりますか?
Aはデータがある限りこの操作を続けます。

  A     B
3000    1234
3000Ext   4567 

それではよろしくお願いいたします。

質問者からの補足コメント

  • もう一度、A→C B→Eでやってみたら、
    いきました。
    ありがとうございました。

    No.2の回答に寄せられた補足コメントです。 補足日時:2018/04/19 12:28

A 回答 (2件)

こんばんは!



単純にループさせるだけで大丈夫だと思います。
データは1行目からあるとしての一例です。

Sub Sample1()
Dim i As Long
Range("B:B").Interior.ColorIndex = xlNone
For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
If Cells(i, "A") = 3000 Then
With Cells(i, "B")
.Value = 5300
.Interior.ColorIndex = 38
End With
ElseIf InStr(Cells(i, "A"), "Ext") > 0 Then
With Cells(i, "B")
.Value = 5400
.Interior.ColorIndex = 7
End With
End If
Next i
End Sub

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

ありがとうございました。
見た感じいいと思ったのですが、確かに例でやってみたらいきました。
ただ実際は数字ではなく文字の認識で3千番代という設定なのです(すうじじゃないのに3千番代もおかしいですが)。ですので、上記で3000を"3*"に変えたところ、いきませんでした。
お手数おかけしました。

お礼日時:2018/04/17 12:40

No.1です。



>A列にExtが入っていたら・・・
はそのまま生かさなければならないのですかね?
となると優先順位を一番目に持ってくる必要がありますね。

↓のコードにしてみてください。

Sub Sample2()
Dim i As Long, myVal
Range("B:B").Interior.ColorIndex = xlNone
For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
If InStr(Cells(i, "A"), "Ext") > 0 Then
With Cells(i, "B")
.Value = 5400
.Interior.ColorIndex = 7
End With
Else
myVal = Left(Cells(i, "A"), 4)
If IsNumeric(myVal) Then
If Int(myVal / 1000) = 3 Then
With Cells(i, "B")
.Value = 5300
.Interior.ColorIndex = 38
End With
End If
End If
End If
Next i
End Sub

※ 今度はどうでしょうか?m(_ _)m
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございました。
実際のデータはカラムC と Eなので、上記の式で、A→Cというふうに置き換えるといきません。でも、現データの不要なカラムを削除して、AとBにやりたい部分をもってくると、教えてくださったVBAでいきました。
完璧でした。

お礼日時:2018/04/19 12:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!