Nối dữ liệu các ô trong vùng cùng điều kiện cho trước (2 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

ginkgo36

Thành viên mới
Tham gia
13/12/12
Bài viết
38
Được thích
7
Chào mọi người.
Nhờ mọi người giúp em 1 hàm để group những lines có cùng điều kiện lại với nhau. Ví dụ như trong file excel e đính kèm.

- Trong file đính kèm thêm hàm JoinText. Hàm này dùng để nối các chuối lại với nhau, như ví dụ ở cột A, B, C, E. A,B,C là các cột chứa các words cột E là cột kết quả khi dùng hàm JoinText. Cột "Note-Công thức" là hướng dẫn cách chạy hàm JoinText. Tham số truyền của JoinText(delimiter,TRUE, vùng_chứa_các_words_cần_ghép)

- Cột I, J, K mô tả vấn đề của em. STT và word là 2 cột input

Nếu STT giống nhau thì ghép các giá trị trong cột "Word" lại với nhau.

-Cột result là output mà e muốn ra.

Thanks mọi người.

Function JoinText(ByVal sep As String, ByVal IgnoreBlanks As Boolean, ParamArray sArray()) As String
Dim tmpArr, SubArr, arr(), Item, n As Long, tmp As String
On Error Resume Next
For Each SubArr In sArray
tmpArr = SubArr
If TypeName(tmpArr) <> "Variant()" Then
tmp = IIf(TypeName(tmpArr) = "Error", "", Trim(CStr(tmpArr)))
If IgnoreBlanks = False Or Len(tmp) Then
n = n + 1
ReDim Preserve arr(1 To n)
arr(n) = tmp
End If
Else
For Each Item In tmpArr
tmp = IIf(TypeName(Item) = "Error", "", Trim(CStr(Item)))
If IgnoreBlanks = False Or Len(tmp) Then
n = n + 1
ReDim Preserve arr(1 To n)
arr(n) = tmp
End If
Next
End If
Next
If n Then JoinText = Join(arr, sep)
JoinText = Replace(JoinText, "; ", ";")
JoinText = Replace(JoinText, " ;", ";")
JoinText = Replace(JoinText, ",", ";")
JoinText = Trim(JoinText)
End Function
 

File đính kèm

Chào mọi người.
Nhờ mọi người giúp em 1 hàm để group những lines có cùng điều kiện lại với nhau. Ví dụ như trong file excel e đính kèm.

Hỏi lại: Giả định rằng word1 = "Microsoft", word2 = "Excel"word3 = "Thực hành" thì kết quả sẽ là cái giống gì?
 
Upvote 0
ah, cột word1, word2, word3 chỉ là em đưa ra ví dụ cho hàm JoinText thôi ạ.
Còn cái em muốn giúp là dữ liệu nằm ở cột I, J.

Nếu cột I có cùng giá trị thì sẽ group giá trị bên cột J lại.
Theo như ví dụ trong file excel:
cột I là cột "STT" có giá trị là 1. Nhưng cột J là cột "word" đang có 3 giá trị là: "
Microsoft","Excel", "2010". Em muốn kết quả group lại như kết quả ở cột result. Sử dụng hàm JoinText mà em đính kèm để nối các giá trị lại với nhau.

Cái này tương tự như câu select string_agg(A,' ') from abc group by B trong sql (e sử dụng dụng postgresql :D)
 
Upvote 0
ah, cột word1, word2, word3 chỉ là em đưa ra ví dụ cho hàm JoinText thôi ạ.
Còn cái em muốn giúp là dữ liệu nằm ở cột I, J.

Nếu cột I có cùng giá trị thì sẽ group giá trị bên cột J lại.
Theo như ví dụ trong file excel:
cột I là cột "STT" có giá trị là 1. Nhưng cột J là cột "word" đang có 3 giá trị là: "
Microsoft","Excel", "2010". Em muốn kết quả group lại như kết quả ở cột result. Sử dụng hàm JoinText mà em đính kèm để nối các giá trị lại với nhau.

Cái này tương tự như câu select string_agg(A,' ') from abc group by B trong sql (e sử dụng dụng postgresql :D)
Thử dùng hàm tự tạo GPE() này xem.
Cái này tương tự như câu select string_agg(A,' ') from abc group by B trong sql (e sử dụng dụng postgresql :D)
Cái đó cao siêu quá hổng biết
 

File đính kèm

Upvote 0
ah, cột word1, word2, word3 chỉ là em đưa ra ví dụ cho hàm JoinText thôi ạ.
Còn cái em muốn giúp là dữ liệu nằm ở cột I, J.

Nếu cột I có cùng giá trị thì sẽ group giá trị bên cột J lại.
Theo như ví dụ trong file excel:
cột I là cột "STT" có giá trị là 1. Nhưng cột J là cột "word" đang có 3 giá trị là: "
Microsoft","Excel", "2010". Em muốn kết quả group lại như kết quả ở cột result. Sử dụng hàm JoinText mà em đính kèm để nối các giá trị lại với nhau.

Cái này tương tự như câu select string_agg(A,' ') from abc group by B trong sql (e sử dụng dụng postgresql :D)

Vậy thì cứ dùng JoinText bình thường thôi:
Mã:
=JoinText(" ",IF($I$2:$I$10=I2,$J$2:$J$10,NA()))
------------------
Ghi chú: Hàm JoinText mói nhất có code thế này:

Mã:
Function JoinText(ByVal Delimiter As String, ParamArray Arrays()) As String
  Dim aTmp, Arr(), Item, tmp As String
  Dim i As Long, n As Long
  'On Error Resume Next
  For i = LBound(Arrays) To UBound(Arrays)
    aTmp = Arrays(i)
    If Not IsArray(aTmp) Then aTmp = Array(aTmp)
    For Each Item In aTmp
      If TypeName(Item) <> "Error" Then
        tmp = CStr(Item)
        n = n + 1
        ReDim Preserve Arr(1 To n)
        Arr(n) = tmp
      End If
    Next
  Next
  If n Then JoinText = Join(Arr, Delimiter)
End Function
 

File đính kèm

Upvote 0
Chào Bác Ba Tê cho em hỏi ở cột D14:D22 (trong File ở #6 của Bác í) nếu thay chữ số bằng chữ cái thi có dùng đc không ah, Bác giúp em với nhé
 
Upvote 0
Chào Bác Ba Tê cho em hỏi ở cột D14:D22 (trong File ở #6 của Bác í) nếu thay chữ số bằng chữ cái thi có dùng đc không ah, Bác giúp em với nhé

Thay cái Function cũ trong Module thanhf cái này xem:
PHP:
Public Function GPE(STT As Variant, Rng As Range, Col As Long) As String
Dim Cll As Range
For Each Cll In Rng
    If Cll.Value = STT Then
        GPE = GPE & " " & Cll.Offset(, Col)
    End If
Next Cll
GPE = Trim(GPE)
End Function
HÍC! Mới nhìn tưởng concogia (Đại ca Con cò già) ai dè nhìn kỹ lại là coconga
 
Lần chỉnh sửa cuối:
Upvote 0
Thay cái Function cũ trong Module thanhf cái này xem:
PHP:
Public Function GPE(STT As Variant, Rng As Range, Col As Long) As String
Dim Cll As Range
For Each Cll In Rng
    If Cll.Value = STT Then
        GPE = GPE & " " & Cll.Offset(, Col)
    End If
Next Cll
GPE = Trim(GPE)
End Function
HÍC! Mới nhìn tưởng concogia ai dè nhìn kỹ lại là coconga
chắc em phải thay Name quá, chứ các sư phụ hiểu nhầm thế này ngại quá/
Mà sao công thức ko tự cập nhật khi dữ liệu có thay đổi Bác Ba Tê nhỉ
Cảm ơn Bác nhiều
 
Upvote 0
Upvote 0
chắc em phải thay Name quá, chứ các sư phụ hiểu nhầm thế này ngại quá/
Mà sao công thức ko tự cập nhật khi dữ liệu có thay đổi Bác Ba Tê nhỉ
Cảm ơn Bác nhiều
Gắn thêm cái đầu mèo nữa mới giống. Mình thì lại phiên âm là cóc óng ả đấy chứ, thỉnh thoảng lại nghĩ chắc là có con gà
 
Upvote 0
Gắn thêm cái đầu mèo nữa mới giống. Mình thì lại phiên âm là cóc óng ả đấy chứ, thỉnh thoảng lại nghĩ chắc là có con gà
Em cũng nghĩ vậy: Không biết ai có nich name 3 sị đế chưa? Gặp vị có con gà này kết làm huynh đệ he he he he he ...
 
Upvote 0
Việc name này kia có sao đâu mà các bác cứ cổ súy rầm lên cho hỏng cái ... đi, việc giống và gần giống cũng bình thường thôi; Sau khi được giúp #15 ở trên; Tôi chính thức xin xóa name CÔ CÔ NGA = COCONGA ........hehe+-+-+-+ nhức óc
 
Upvote 0
Em có đưa file lên đây ah
"Chời đất"!
Công thức ô G4 phải là
PHP:
=GPE(F4;B$4:B$12;1)
Việc name này kia có sao đâu mà các bác cứ cổ súy rầm lên cho hỏng cái ... đi, việc giống và gần giống cũng bình thường thôi; Sau khi được giúp #15 ở trên; Tôi chính thức xin xóa name CÔ CÔ NGA = COCONGA ........hehe+-+-+-+ nhức óc
Nhiều lúc các TV GPE cũng "Spam xả stress" chứ không có ý gì đâu.
Nếu có gì thì các MOD, SMOD hay ADMIN đã góp ý với bạn rồi
 
Lần chỉnh sửa cuối:
Upvote 0
Vâng em nhầm
nhưng vấn đề vẫn là khi thây đổi dữ liệu cột C thì cột G lại ko tự thay đổi theo, mà phải clik vào G entor nó mới chạy đấy ah
cảm ơn Bác nhiều
Hay là thêm thử dòng code này sau câu code đầu tiên xem thế nào
Application.Volatile
 
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom