Nối chuỗi với điều kiện không nối những ô không có giá trị

Liên hệ QC

heyhey1994

Thành viên chính thức
Tham gia
16/3/17
Bài viết
78
Được thích
18
Chào mọi người trong diễn đàn, hiện nay mình muốn lập bảng tính cần nối các chuỗi như ví dụ sau. Cột mong muốn là màu vàng. Nó sẽ là số trong ô bên dưới kết hợp với chữ bên trên và nối với nhau bằng dấu +.
Mình có thể làm bằng cách đặt if ô đó khác 0 thì bằng ô dưới & ô trên, rồi nối lại nhưng như vậy thì nó mất khá nhiều thời gian, mong mọi người giúp đỡ ạ.
1665546685379.png
 

File đính kèm

  • Ví dụ.xlsx
    13.3 KB · Đọc: 5
Chào mọi người trong diễn đàn, hiện nay mình muốn lập bảng tính cần nối các chuỗi như ví dụ sau. Cột mong muốn là màu vàng. Nó sẽ là số trong ô bên dưới kết hợp với chữ bên trên và nối với nhau bằng dấu +.
Mình có thể làm bằng cách đặt if ô đó khác 0 thì bằng ô dưới & ô trên, rồi nối lại nhưng như vậy thì nó mất khá nhiều thời gian, mong mọi người giúp đỡ ạ.
.
Nếu bạn đang xài excel 365, có thể dùng:

Mã:
=TEXTJOIN("+",1,IF(B2:R2<>"",B2:R2&$B$1:$R$1,""))
 
Upvote 0
Code VBA:
Nhấn nút "KẾT QUẢ" nhé
Mã:
Option Explicit
Sub test()
Dim lr&, i&, j&, k&, rng, arr()
Dim st As String
lr = Cells(Rows.Count, "A").End(xlUp).Row
rng = Range("B1:R" & lr).Value
ReDim arr(1 To UBound(rng), 1 To 1)
For i = 2 To UBound(rng)
    st = ""
    For j = 1 To UBound(rng, 2)
        If Not IsEmpty(rng(i, j)) Then st = st & IIf(st = "", "", "+") & rng(i, j) & rng(1, j)
    Next
    arr(i - 1, 1) = st
Next
Range("S2:S10000").ClearContents
Range("S2").Resize(UBound(arr), 1).Value = arr
End Sub
 

File đính kèm

  • Ví dụ.xlsm
    20.4 KB · Đọc: 6
Upvote 0
Sub yyy()
Set sht = ActiveSheet
lastrow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row
lastcolumn = sht.Range("A1").CurrentRegion.Columns.Count

Dim arr() As Variant
Dim x As Long
Dim y As Long
x = lastrow
y = lastcolumn
ReDim arr(0 To x, 0 To y)
ReDim arr2(0 To x, 0 To y)

For x = LBound(arr, 1) To UBound(arr, 1)
For y = LBound(arr, 2) To UBound(arr, 2)
arr(x, y) = Range("B1").Offset(x, y)
Next
Next

For x = LBound(arr, 1) + 1 To UBound(arr, 1)
For y = LBound(arr, 2) To UBound(arr, 2)
If arr(x, y) <> 0 Then
arr(x, y) = arr(x, y) & arr(0, y)
Else
arr(x, y) = ""
End If
Next
Next
Range("T1").Resize(UBound(arr, 1), UBound(arr, 2)).Value = arr

End Sub

Em mò mẫm được đến đây rồi mà không biết nối các chuỗi ra sao, các ơn mọi người đã giúp ạ :D
 
Upvote 0
Em mò mẫm được đến đây rồi mà không biết nối các chuỗi ra sao, các ơn mọi người đã giúp ạ :D
Ít nhất bạn cũng phải xác nhận code ở bài #3 có OK không, chứ cứ mò mẫm với cái code này thì càng đi càng lạc ...
 
Upvote 0
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom