PDA

View Full Version : Automatically conjoin columns



prasadk
11-06-2021, 05:36 AM
I need this code can you modify this code as per my



Private Sub Worksheet_Change(ByVal Target As Range)
Const columns As String = "$A/$B/$C"
Dim rw As Long, var As Variant
If InStr(1, columns, Left$(Target.Address, 2), vbTextCompare) Then
rw = Target.Row
var = Split(columns, "/")
Range("d" & Target.Row) = Range(var(0) & rw) & vbCrLf & Range(var(1) & rw) & vbCrLf & Range(var(2) & rw)
End If
End Sub







If I type in
Col A vamsi Col B prasad Col C reddy

Then in Col D vamsi prasad reddy

I want like this if I type first middle last name in col A col B col C then add full name in col D automatically

arnelgp
11-07-2021, 12:23 AM
here i modified for a "less" complicated one
and will handle copy/paste on multiple rows.
and will not go into endless loop.


Private Sub Worksheet_Change(ByVal Target As Range)
Const columns As String = "$A/$B/$C"
Dim last_row As Long, var As Variant
Dim s As String, rw As Long
If InStr(1, columns, Left$(Target.Address, 2), vbTextCompare) Then
last_row = fnLastRow(Target.Address)
var = Split(columns, "/")
For rw = Target.Row To last_row Step 1
s = Trim$(Range(var(0) & rw) & " " & Range(var(1) & rw) & " " & Range(var(2) & rw))
If Len(s) Then
Range("D" & rw) = s
Else
Range("D" & rw) = Null
End If
Next
End If
End Sub


Private Function fnLastRow(ByVal adr As String) As Long
Dim length As Long
Dim i As Long, s As String, ret As String
length = Len(adr)
For i = length To 1 Step -1
s = Mid$(adr, i, 1)
If IsNumeric(s) Then
ret = s & ret
Else
Exit For
End If
Next
fnLastRow = Val(ret)
End Function

prasadk
11-07-2021, 01:59 AM
Thank you so much

Code is Excellent