Nối chuỗi dùng VBA mới nhanh.Chào Anh Chị
hiện tại em đang cần chạy hàm để kết nối dữ liệu của các huyện theo cùng tỉnh từ nhiều ô thành 1 ô, kính nhờ Anh Chị giúp đỡ.
Vd: Cùng tỉnh Cần Thơ thì sẽ tự động ghép các ô Ô Môn, Ninh Kiều, Bình Thủy lại thành 1 ô.
Em cám ơn nhiều
Chào Anh Chị
hiện tại em đang cần chạy hàm để kết nối dữ liệu của các huyện theo cùng tỉnh từ nhiều ô thành 1 ô, kính nhờ Anh Chị giúp đỡ.
Vd: Cùng tỉnh Cần Thơ thì sẽ tự động ghép các ô Ô Môn, Ninh Kiều, Bình Thủy lại thành 1 ô.
Em cám ơn nhiều


Chào Anh Chị
hiện tại em đang cần chạy hàm để kết nối dữ liệu của các huyện theo cùng tỉnh từ nhiều ô thành 1 ô, kính nhờ Anh Chị giúp đỡ.
Vd: Cùng tỉnh Cần Thơ thì sẽ tự động ghép các ô Ô Môn, Ninh Kiều, Bình Thủy lại thành 1 ô.
Em cám ơn nhiều
Function NoiChuoi(ByVal rng As Range, ByVal Province As String)
Application.Volatile
Dim arr(), darr()
Dim i As Integer, k As Integer
arr = rng
ReDim darr(1 To UBound(arr), 1 To 1)
For i = 1 To UBound(arr)
If Province = arr(i, 1) Then
k = 1
If darr(k, 1) = "" Then
darr(k, 1) = arr(i, 2)
Else
darr(k, 1) = darr(k, 1) & "," & arr(i, 2)
End If
End If
Next i
NoiChuoi = darr()
End Function
1 cách để bạn tham khảoChào Anh Chị
hiện tại em đang cần chạy hàm để kết nối dữ liệu của các huyện theo cùng tỉnh từ nhiều ô thành 1 ô, kính nhờ Anh Chị giúp đỡ.
Vd: Cùng tỉnh Cần Thơ thì sẽ tự động ghép các ô Ô Môn, Ninh Kiều, Bình Thủy lại thành 1 ô.
Em cám ơn nhiều
Bạn xem thử 1 cách khác:Chào Anh Chị
hiện tại em đang cần chạy hàm để kết nối dữ liệu của các huyện theo cùng tỉnh từ nhiều ô thành 1 ô, kính nhờ Anh Chị giúp đỡ.
Vd: Cùng tỉnh Cần Thơ thì sẽ tự động ghép các ô Ô Môn, Ninh Kiều, Bình Thủy lại thành 1 ô.
Em cám ơn nhiều
Nhờ Anh chị giải thích giúp mình công thức này nha.Bạn xem thử 1 cách khác:
Giải thích như sau:Nhờ Anh chị giải thích giúp mình công thức này nha.
IF($A$1=1,INDEX($B$3:$B$10,MIN(Vung)),B13&IF($A$1>COUNT(Vung),"",IF(ISERROR(", "&INDEX($B$3:$B$10,SMALL(Vung,$A$1))),"",", "&INDEX($B$3:$B$10,SMALL(Vung,$A$1)))))
trong đó Vùng là IF(Sheet1!$A$3:$A$10=Sheet1!A13,ROW(Sheet1!$A$1:$A$8))
Mình xem mà không hiểu.. hic hic
à đây là toán vòng lặp giải được cũng hay lắm hahaNhờ Anh chị giải thích giúp mình công thức này nha.
IF($A$1=1,INDEX($B$3:$B$10,MIN(Vung)),B13&IF($A$1>COUNT(Vung),"",IF(ISERROR(", "&INDEX($B$3:$B$10,SMALL(Vung,$A$1))),"",", "&INDEX($B$3:$B$10,SMALL(Vung,$A$1)))))
trong đó Vùng là IF(Sheet1!$A$3:$A$10=Sheet1!A13,ROW(Sheet1!$A$1:$A$8))
Mình xem mà không hiểu.. hic hic
Có nhiều vấn đề mình cần tìm hiểu nhờ Anh Chị giải thích giúp:Giải thích như sau:
IF(Sheet1!$A$3:$A$10=Sheet1!A13,ROW(Sheet1!$A$1:$A$8))
Bạn xem nhé: nếu từ A3:A10 =A13, thì 3 cái đầu tiên là Cần Thơ nên thỏa điều kiện tạo 1 mảng liên tiếp {1;2;3;FALSE;FALSE;FALSE;FALSE;FALSE} các đối số sau không thỏa điều kiện nên là FALSE.
Giải thích thêm, hàm Row là hàm dò vị trí dòng của 1 ô ta lấy Row(A1:A8) thì sẽ được vị trí từ dòng 1 đến dòng 8 là {1;2;3;4;5;6;7;8}
đây là toán Hồi Quy nghe nói thế tức là tự lặp lại chính mình:Có nhiều vấn đề mình cần tìm hiểu nhờ Anh Chị giải thích giúp:
- Sao ô A1 lại là 100 khi MOD(A1,100)+1, trong khi mình bấm F9 chỉ là 1
- Trong hàm Vùng IF(Sheet1!$A$3:$A$10=Sheet1!A13,ROW(Sheet1!$A$1:$A$8)) thì vùng tham chiếu ROW lại là từ A1-A8 mà không là A3-A10?
- Anh Chị giải thích kỹ hơn về công thức này: IF($A$1=1,INDEX($B$3:$B$10,MIN(Vung)),B13&IF($A$1>COUNT(Vung),"",IF(ISERROR(", "&INDEX($B$3:$B$10,SMALL(Vung,$A$1))),"",", "&INDEX($B$3:$B$10,SMALL(Vung,$A$1))))) vì mình thấy đây là công thức hay, mà mình phải sử dụng nhiều, nên muốn tìm hiểu thật kỹ.
Cám ơn Anh Chị nhiều.
đây là toán Hồi Quy nghe nói thế tức là tự lặp lại chính mình:
tại sao không row từ A3:A11 vì từ A3:A11 sẽ ra 1 dãy số liên tiếp: {3;4;5;6;7;8;9;10;11} mà ở đây ta cần là 1 dãy liên tục từ 1 đến 8, để làm gì bạn xem hàm index chứ nó lấy từ B3:B11. INDEX($B$3:$B$10,SMALL(Vung,$A$1))).
Bạn đã hiểu hàm index chưa Index(vùng lấy dữ liệu, số dòng) nếu lấy số dòng theo số liên tiếp từ 3 trở đi sẽ sai đúng không.
A1 là Mod(A1,100)+1 thì mình cũng chịu nhưng nó sẽ tạo ra 1 số vòng lặp liên tục từ 1 đến 100 nhưng ta không thấy được
đã nói là tạo 1 số liên tục từ 1 đến 100 nên công thức sẽ thành thế này:
Nếu A1=1 thì lấy vùng dữ liệu từ B3:B10, Min là lấy số nhỏ nhất trong mảng thỏa điều kiện là {1;2;3;FALSE;FALSE;FALSE;FALSE;FALSE} tương đương số 1 nên ta ra Ninh Kiều tiếp đến lấy chính nó là B13 ghép (&) với 1 điều kiện tiếp theo nếu A1 lớn hơn vùng (đếm được là 3) thì ngưng, còn không sẽ tiếp tục lặp lại ở đây A1 đã chuyển sang là 2 và hàm lấy số nhỏ thứ 2 small(vùng,A1(tức là 2) rồi cứ liên tiếp đến khi đếm số giá trị lớn hơn A1 thì ngừng lại, đôi khi có lỗi nên dúng if(iserror()) để bẫy lỗi, nếu là excel 2007 trở lên chỉ cần iferror(công thức,"') là xong.
đây là công thức ngắn nếu là excel 2007 trở lên:
=IF($A$1=1,INDEX($B$3:$B$10,MIN(Vung)),B13&IF($A$1>COUNT(Vung),"",IFERROR(", "&INDEX($B$3:$B$10,SMALL(Vung,$A$1)),"")))


Dạo này anh lên tay ghê quá!!đây là toán Hồi Quy nghe nói thế tức là tự lặp lại chính mình:
tại sao không row từ A3:A11 vì từ A3:A11 sẽ ra 1 dãy số liên tiếp: {3;4;5;6;7;8;9;10;11} mà ở đây ta cần là 1 dãy liên tục từ 1 đến 8, để làm gì bạn xem hàm index chứ nó lấy từ B3:B11. INDEX($B$3:$B$10,SMALL(Vung,$A$1))).
Bạn đã hiểu hàm index chưa Index(vùng lấy dữ liệu, số dòng) nếu lấy số dòng theo số liên tiếp từ 3 trở đi sẽ sai đúng không.
A1 là Mod(A1,100)+1 thì mình cũng chịu nhưng nó sẽ tạo ra 1 số vòng lặp liên tục từ 1 đến 100 nhưng ta không thấy được
đã nói là tạo 1 số liên tục từ 1 đến 100 nên công thức sẽ thành thế này:
Nếu A1=1 thì lấy vùng dữ liệu từ B3:B10, Min là lấy số nhỏ nhất trong mảng thỏa điều kiện là {1;2;3;FALSE;FALSE;FALSE;FALSE;FALSE} tương đương số 1 nên ta ra Ninh Kiều tiếp đến lấy chính nó là B13 ghép (&) với 1 điều kiện tiếp theo nếu A1 lớn hơn vùng (đếm được là 3) thì ngưng, còn không sẽ tiếp tục lặp lại ở đây A1 đã chuyển sang là 2 và hàm lấy số nhỏ thứ 2 small(vùng,A1(tức là 2) rồi cứ liên tiếp đến khi đếm số giá trị lớn hơn A1 thì ngừng lại, đôi khi có lỗi nên dúng if(iserror()) để bẫy lỗi, nếu là excel 2007 trở lên chỉ cần iferror(công thức,"') là xong.
đây là công thức ngắn nếu là excel 2007 trở lên:
=IF($A$1=1,INDEX($B$3:$B$10,MIN(Vung)),B13&IF($A$1>COUNT(Vung),"",IFERROR(", "&INDEX($B$3:$B$10,SMALL(Vung,$A$1)),"")))
Qùy lên mới sợ bài này hôm bữa anh QuocGiaCan đăng lên học lóm, bữa giờ có thay đổi công thức đâu vẫn y xỳ hãi..Dạo này anh lên tay ghê quá!!!!!


Có thể dùng công thức này ngắn hơn:Bạn xem thử 1 cách khác:
B13=IF($A$1=1,"",B13&IFERROR(INDEX($B$3:$B$10,SMALL(IF($A$3:$A$10=A13,ROW($A$1:$A$8)),$A$1-1))&";",""))
cào cào @@, dư cái ";" ở cuối @@Có thể dùng công thức này ngắn hơn:
Ctrl+Shift+Enter, fill xuống!!!Mã:B13=IF($A$1=1,"",B13&IFERROR(INDEX($B$3:$B$10,SMALL(IF($A$3:$A$10=A13,ROW($A$1:$A$8)),$A$1-1))&";",""))
ngắn hơn ăn theo ekeEm gửi đến A/C triệu like
cám ơn thật nhiều


Thêm cái SUBSTITUTE là được chứ gì!!!cào cào @@, dư cái ";" ở cuối @@
mình cũng nghĩ tới rồi =_= thế để 1 cái min cho đẹp khà khà, mà cũng có thể đổi thành dấu . HahaThêm cái SUBSTITUTE là được chứ gì!!!
=SUBSTITUTE(IF($A$1=1,"",B13&IFERROR(INDEX($B$3:$B$10,SMALL(IF($A$3:$A$10=A13,ROW($A$1:$A$8)),$A$1-1))&",","")),",","",COUNTIF($A$3:$A$10,A13))
Sao cách này không được nhỉ??Thêm cái SUBSTITUTE là được chứ gì!!!
=SUBSTITUTE(IF($A$1=1,"",B13&IFERROR(INDEX($B$3:$B$10,SMALL(IF($A$3:$A$10=A13,ROW($A$1:$A$8)),$A$1-1))&",","")),",","",COUNTIF($A$3:$A$10,A13))
=MID(IF($A$1=1,"",B13&IFERROR(" ,"&INDEX($B$3:$B$10,SMALL(IF($A$3:$A$10=A13,ROW($A$1:$A$8)),$A$1-1)),"")),3,255)
Nghĩ ra cách mới haha:Thêm cái SUBSTITUTE là được chứ gì!!!
=SUBSTITUTE(IF($A$1=1,"",B13&IFERROR(INDEX($B$3:$B$10,SMALL(IF($A$3:$A$10=A13,ROW($A$1:$A$8)),$A$1-1))&",","")),",","",COUNTIF($A$3:$A$10,A13))