Add a letter to the value in cells in a certain column

zack8576

Active Member
Joined
Dec 27, 2021
Messages
271
Office Version
  1. 365
Platform
  1. Windows
I have these excel files that contain either Yes or No in column E, and a text string in column D.
If column E on a row is Yes, AND if there is no letter J at the end of the string in column D, then J needs to be added to the end.
so in the screenshot below, the value in D8 needs to be F21223AJ, the value in D26 needs to be F21233AJ
my code below doesnt seem to work, and would you take the same approach to solve this problem ?

1674233465998.png


VBA Code:
Sub StockPiecesWithHoleAddJ()
    Dim lr As Long, i As Long
    Set rng2 = Range("A1").CurrentRegion
    lr = rng2.Cells(Rows.Count, "D").End(3).Row
        
    For i = lr To 2 Step -1
        If rng2.Cells(i, 5) Like "Yes" And _
           Not rng2.Cells(i, 4) Like "*J*" Then
                rng.Cells(i, 4) = rng.Cells(i, 4) & "J"
        End If
    Next i
End Sub
 

Excel Facts

Move date out one month or year
Use =EDATE(A2,1) for one month later. Use EDATE(A2,12) for one year later.
I didn't test it, you can try.
VBA Code:
Sub StockPiecesWithHoleAddJ()
    Dim lr As Long, i As Long
    Set rng2 = Range("A1").CurrentRegion
    lr = rng2.Cells(Rows.Count, "D").End(3).Row
      
    For i = lr To 2 Step -1
        If rng2.Cells(i, 5).value = "Yes" And _
           Right(rng2.Cells(i, 4).value, 1) <> "J" Then
                Rng.Cells(i, 4) = Rng.Cells(i, 4) & "J"
        End If
    Next i
End Sub
 
Upvote 0
Solution
How about this,

Sub StockPiecesWithHoleAddJ()
Dim LRow, Inc As Long
LRow = Cells(Rows.Count, "D").End(xlUp).Row
For Inc = 2 To LRow
If Cells(Inc, 5).Value = "Yes" And Right(Cells(Inc, 4).Value, 1) <> "J" Then
Cells(Inc, 4).Value = Cells(Inc, 4).Value & "J"
End If
Next
End Sub
 
Upvote 0
I didn't test it, you can try.
VBA Code:
Sub StockPiecesWithHoleAddJ()
    Dim lr As Long, i As Long
    Set rng2 = Range("A1").CurrentRegion
    lr = rng2.Cells(Rows.Count, "D").End(3).Row
     
    For i = lr To 2 Step -1
        If rng2.Cells(i, 5).value = "Yes" And _
           Right(rng2.Cells(i, 4).value, 1) <> "J" Then
                Rng.Cells(i, 4) = Rng.Cells(i, 4) & "J"
        End If
    Next i
End Sub
Thank you so much for the response.
I had a studid mistake in my code
VBA Code:
rng.Cells(i, 4) = rng.Cells(i, 4) & "J"
should been
VBA Code:
rng2.Cells(i, 4) = rng2.Cells(i, 4) & "J"
 
Upvote 0
How about this,

Sub StockPiecesWithHoleAddJ()
Dim LRow, Inc As Long
LRow = Cells(Rows.Count, "D").End(xlUp).Row
For Inc = 2 To LRow
If Cells(Inc, 5).Value = "Yes" And Right(Cells(Inc, 4).Value, 1) <> "J" Then
Cells(Inc, 4).Value = Cells(Inc, 4).Value & "J"
End If
Next
End Sub
thank you, you wouldnt recommend using code below ?
VBA Code:
Not rng2.Cells(i, 4) Like "*J*" Then

can you tell me the advantage of using Right instead of Not Like ?
 
Upvote 0
thank you, you wouldnt recommend using code below ?
VBA Code:
Not rng2.Cells(i, 4) Like "*J*" Then

can you tell me the advantage of using Right instead of Not Like ?
Here "*J*" means - before and after of "J" and it will check both the cases. If anyone keyed it incorrectly, then your macro will react in different way.

So, you would need to check at the right side whether letter "J" is present or not. For that case, we used that logic <> with Right() function.
 
Upvote 0
I polished the code & tested it now try
VBA Code:
Sub StockPiecesWithHoleAddJ()
    Dim lr As Long, i As Long
    Set rng2 = Range("A1").CurrentRegion
    lr = rng2.Cells(Rows.Count, "D").End(3).Row
      
    For i = lr To 2 Step -1
        If UCase(rng2.Cells(i, 5).Value) = "YES" And UCase(Right(rng2.Cells(i, 4).Value, 1)) <> "J" Then
                rng2.Cells(i, 4).Value = rng2.Cells(i, 4).Value & "J"
        End If
    Next i
    
End Sub
 
Upvote 0
Here "*J*" means - before and after of "J" and it will check both the cases. If anyone keyed it incorrectly, then your macro will react in different way.

So, you would need to check at the right side whether letter "J" is present or not. For that case, we used that logic <> with Right() function.
this makes perfect sense ! thanks a bunch !
definitely writing this down in my VBA notebook !
 
Upvote 0

Forum statistics

Threads
1,224,820
Messages
6,181,154
Members
453,021
Latest member
Justyna P

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top