Quang86vn
Thành viên mới
- Tham gia
- 21/5/17
- Bài viết
- 18
- Được thích
- 0
- Giới tính
- Nam
bạn chọn lại vùng đi nhé mình nghĩ là chỗ này bạn đặt 1000 vào thử xem.Em nhờ các bác xem qua file dữ liệu và code chạy. Ghép chữ theo thứ tự với n (500-1000) hàng, cột thì tùy ý. Hiện tại code chỉ chạy đc với với 2 hàng và n cột
Xin cảm ơn các bác.
Sau đây là file và code.
Các thầy xem giúp em ạ. Cảm ơn các thầy!
Public Sub RoiTung()
Dim Vung, A(), B, I, J, K, Mg, iHang, iCot, idong, m
iCot = Range([A1], [A1].End(xlToRight)).Columns.Count
idong = Range("a" & Rows.Count).End(xlUp).Row
Vung = [A1].Resize(idong, iCot)
ReDim A(1 To idong, 1 To 1)
For I = 1 To UBound(Vung, 2)
For J = 1 To UBound(Vung, 1)
A(J, 1) = A(J, 1) & Vung(J, I)
Next J
Next I
For m = 1 To UBound(A, 1)
iHang = Application.WorksheetFunction.Combin(Len(A(m, 1)), 2)
ReDim Mg(1 To iHang * (m + 2), 1 To idong)
For I = 1 To Len(A(m, 1)) - 1
For J = I + 1 To Len(A(m, 1))
K = K + 1
Mg(K, 1) = Mid(A(m, 1), I, 1) & Mid(A(m, 1), J, 1): Mg(K + idong, 1) = Mid(A(m, 1), J, 1) & Mid(A(m, 1), I, 1)
Next J
Next I
Sheet1.Range("f1").Offset(0, m).Resize(K * (m + 1), 1).Value = Mg
K = 0
Next m
End Sub
em chạy thử và thấy nó sai và thiếu ký tự ghép nữa bác xem có phải đúng không. cảm ơn bácbạn xem có đúng ý bạn không nhéMã:Public Sub RoiTung() Dim Vung, A(), B, I, J, K, Mg, iHang, iCot, idong, m iCot = Range([A1], [A1].End(xlToRight)).Columns.Count idong = Range("a" & Rows.Count).End(xlUp).Row Vung = [A1].Resize(idong, iCot) ReDim A(1 To idong, 1 To 1) For I = 1 To UBound(Vung, 2) For J = 1 To UBound(Vung, 1) A(J, 1) = A(J, 1) & Vung(J, I) Next J Next I For m = 1 To UBound(A, 1) iHang = Application.WorksheetFunction.Combin(Len(A(m, 1)), 2) ReDim Mg(1 To iHang * (m + 2), 1 To idong) For I = 1 To Len(A(m, 1)) - 1 For J = I + 1 To Len(A(m, 1)) K = K + 1 Mg(K, 1) = Mid(A(m, 1), I, 1) & Mid(A(m, 1), J, 1): Mg(K + idong, 1) = Mid(A(m, 1), J, 1) & Mid(A(m, 1), I, 1) Next J Next I Sheet1.Range("f1").Offset(0, m).Resize(K * (m + 1), 1).Value = Mg K = 0 Next m End Sub
em chạy thử và thấy nó sai và thiếu ký tự ghép nữa bác xem có phải đúng không. cảm ơn bác
Public Sub RoiTung()
Dim Vung, A(), B, I, J, K, Mg, iHang, iCot, idong, m
iCot = Range([A1], [A1].End(xlToRight)).Columns.Count
idong = Range("a" & Rows.Count).End(xlUp).Row
Vung = [A1].Resize(idong, iCot)
ReDim A(1 To idong)
For I = 1 To UBound(Vung, 2)
For J = 1 To UBound(Vung, 1)
A(J) = A(J) & Vung(J, I)
Next J
Next I
For m = 1 To UBound(A, 1)
iHang = Application.WorksheetFunction.Combin(Len(A(m)), 2)
ReDim Mg(1 To iHang * 2, 1 To idong)
For I = 1 To Len(A(m)) - 1
For J = I + 1 To Len(A(m))
K = K + 1
Mg(K, 1) = Mid(A(m), I, 1) & Mid(A(m), J, 1): Mg(K + iHang, 1) = Mid(A(m), J, 1) & Mid(A(m), I, 1)
Next J
Next I
Sheet1.Range("f1").Offset(0, m).Resize(K * 2, 1).Value = Mg
K = 0
Next m
End Sub
Cảm ơn bác nhiều nhé. Chúc bác và gđ GPE cuối tuần vui vẻ!đây bạn xem nhéMã:Public Sub RoiTung() Dim Vung, A(), B, I, J, K, Mg, iHang, iCot, idong, m iCot = Range([A1], [A1].End(xlToRight)).Columns.Count idong = Range("a" & Rows.Count).End(xlUp).Row Vung = [A1].Resize(idong, iCot) ReDim A(1 To idong) For I = 1 To UBound(Vung, 2) For J = 1 To UBound(Vung, 1) A(J) = A(J) & Vung(J, I) Next J Next I For m = 1 To UBound(A, 1) iHang = Application.WorksheetFunction.Combin(Len(A(m)), 2) ReDim Mg(1 To iHang * 2, 1 To idong) For I = 1 To Len(A(m)) - 1 For J = I + 1 To Len(A(m)) K = K + 1 Mg(K, 1) = Mid(A(m), I, 1) & Mid(A(m), J, 1): Mg(K + iHang, 1) = Mid(A(m), J, 1) & Mid(A(m), I, 1) Next J Next I Sheet1.Range("f1").Offset(0, m).Resize(K * 2, 1).Value = Mg K = 0 Next m End Sub
Về code chạy đúng nhưng cho lên 600 hàng và 16 ký tự chạy chậm và đợi rất lâu. Các bác các thầy xem có cách nào cải thiện tốc độ xử lý không ạ? Em cảm ơn bác snow25 nhiều!
Public Sub RoiTung()
Dim Vung, A(), B, I, J, K, Mg, iHang, iCot, idong, m
iCot = Range([A1], [A1].End(xlToRight)).Columns.Count
idong = Range("a" & Rows.Count).End(xlUp).Row
Vung = [A1].Resize(idong, iCot)
ReDim A(1 To idong)
For I = 1 To UBound(Vung, 2)
For J = 1 To UBound(Vung, 1)
A(J) = A(J) & Vung(J, I)
Next J
Next I
iHang = Application.WorksheetFunction.Combin(Len(A(1)), 2)
ReDim Mg(1 To iHang * 2, 1 To idong)
For m = 1 To UBound(A, 1)
For I = 1 To Len(A(m)) - 1
For J = I + 1 To Len(A(m))
K = K + 1
Mg(K, m) = Mid(A(m), I, 1) & Mid(A(m), J, 1): Mg(K + iHang, m) = Mid(A(m), J, 1) & Mid(A(m), I, 1)
Next J
Next I
K = 0
Next m
Sheet1.Range("p1").Resize(UBound(Mg, 1), idong).Value = Mg
End Sub
về cơ bản đã ok. Nhưng chạy tối đa đc 220 dòng báo lỗi 09 bác à.bạn dùng code này nhé nhưng mà bắt buộc là số ký tự phải đều nhau.Mã:Public Sub RoiTung() Dim Vung, A(), B, I, J, K, Mg, iHang, iCot, idong, m iCot = Range([A1], [A1].End(xlToRight)).Columns.Count idong = Range("a" & Rows.Count).End(xlUp).Row Vung = [A1].Resize(idong, iCot) ReDim A(1 To idong) For I = 1 To UBound(Vung, 2) For J = 1 To UBound(Vung, 1) A(J) = A(J) & Vung(J, I) Next J Next I iHang = Application.WorksheetFunction.Combin(Len(A(1)), 2) ReDim Mg(1 To iHang * 2, 1 To idong) For m = 1 To UBound(A, 1) For I = 1 To Len(A(m)) - 1 For J = I + 1 To Len(A(m)) K = K + 1 Mg(K, m) = Mid(A(m), I, 1) & Mid(A(m), J, 1): Mg(K + iHang, m) = Mid(A(m), J, 1) & Mid(A(m), I, 1) Next J Next I K = 0 Next m Sheet1.Range("p1").Resize(UBound(Mg, 1), idong).Value = Mg End Sub
Vâng em xin rút kinh nghiệm chưa trích dẫn nguồn. Cảm ơn BQT ạ!
đây bạn xem nhévề cơ bản đã ok. Nhưng chạy tối đa đc 220 dòng báo lỗi 09 bác à.
Bài đã được tự động gộp:
Vâng em xin rút kinh nghiệm chưa trích dẫn nguồn. Cảm ơn BQT ạ!
Public Sub RoiTung1()
Dim Vung, A(), B, I, J, K, Mg, iHang, iCot, idong, m, max As Long
iCot = Range([A1], [A1].End(xlToRight)).Columns.Count
idong = Range("a" & Rows.Count).End(xlUp).Row
Vung = [A1].Resize(idong, iCot)
ReDim A(1 To idong)
For I = 1 To UBound(Vung, 1)
For J = 1 To UBound(Vung, 2)
A(I) = A(I) & Vung(I, J)
Next J
If max < Len(A(I)) Then max = Len(A(I))
Next I
iHang = Application.WorksheetFunction.Combin(max, 2)
ReDim Mg(1 To iHang * 2, 1 To idong)
For m = 1 To UBound(A, 1)
iHang = Application.WorksheetFunction.Combin(Len(A(m)), 2)
For I = 1 To Len(A(m)) - 1
For J = I + 1 To Len(A(m))
K = K + 1
Mg(K, m) = Mid(A(m), I, 1) & Mid(A(m), J, 1): Mg(K + iHang, m) = Mid(A(m), J, 1) & Mid(A(m), I, 1)
Next J
Next I
K = 0
Next m
Sheet1.Range("p1").Resize(UBound(Mg, 1), idong).Value = Mg
End Sub
Cảm ơn bác nhiều chạy đã ok.đây bạn xem nhé
Mã:Public Sub RoiTung1() Dim Vung, A(), B, I, J, K, Mg, iHang, iCot, idong, m, max As Long iCot = Range([A1], [A1].End(xlToRight)).Columns.Count idong = Range("a" & Rows.Count).End(xlUp).Row Vung = [A1].Resize(idong, iCot) ReDim A(1 To idong) For I = 1 To UBound(Vung, 1) For J = 1 To UBound(Vung, 2) A(I) = A(I) & Vung(I, J) Next J If max < Len(A(I)) Then max = Len(A(I)) Next I iHang = Application.WorksheetFunction.Combin(max, 2) ReDim Mg(1 To iHang * 2, 1 To idong) For m = 1 To UBound(A, 1) iHang = Application.WorksheetFunction.Combin(Len(A(m)), 2) For I = 1 To Len(A(m)) - 1 For J = I + 1 To Len(A(m)) K = K + 1 Mg(K, m) = Mid(A(m), I, 1) & Mid(A(m), J, 1): Mg(K + iHang, m) = Mid(A(m), J, 1) & Mid(A(m), I, 1) Next J Next I K = 0 Next m Sheet1.Range("p1").Resize(UBound(Mg, 1), idong).Value = Mg End Sub