Ghép 2 chuỗi ký tự với nhau

  • Thread starter Hồng Phương
  • Ngày gửi
Trạng thái
Không mở trả lời sau này.
H

Hồng Phương

Guest
Em nhờ anh chị viết giúp hàm như trong file đính kèm
(Ghép lần lượt các ký tự của dãy 1 với dãy 2)
Em cảm ơn anh chị
dãy 1
h,b,m,2
dãy 2
u,ơ,3,a
Kết quả
hu,hơ,h3,ha,bu,bơ,b3,ba,mu,mơ,m3,ma,2u,2ơ,23,2a
tuhocvba update: (Chú ý: Lần sau cố gắng suy nghĩ diễn đạt một vấn đề làm sao để dễ hiểu, không gây phiền hà cho người khác phải tự phán đoán hoặc tự mò mẫm mất thời gian).
Input1:
s1 = "h,b,m,2"
Input2:
s2 = "u,ơ,3,a"
Output1:
s = "hu,hơ,h3,ha,bu,bơ,b3,ba,mu,mơ,m3,ma,2u,2ơ,23,2a"
Diễn giải: Từng ký tự của s1 ghép với từng ký tự của s2
Output2:
s = "hu,hơ,h3,ha,bu,bơ,b3,ba,mu,mơ,m3,ma,2u,2ơ,23,2a,uh,ub,um,u2,ơh,ơb,ơm,ơ2,3h,3b,3m,32,ah,ab,am,a2"
Diễn giải: Từng ký tự của s1 ghép với từng ký tự của s2 và ngược lại.

Chú ý: Nếu một chuỗi ký tự là rỗng, giá trị trả về của hàm là "No"
 

tuhocvba

Administrator
Thành viên BQT
Chào bạn. Trước hết xin lỗi về sự phiền hà gây ra cho bạn.
1. Diễn đàn khuyến khích bạn upload file lên host free như mediafire.com, bạn xem thêm hỗ trợ post bài ở đây:
2. Tài nguyên là hữu hạn, diễn đàn ủng hộ bạn upload ảnh lên diễn đàn còn với file, diễn đàn không khuyến khích. Mong bạn lý giải và hợp tác.
 
S

Snow24

Guest
@Hồng Phương Bạn xem code này được không.
Mã:
Function ghepchuoi(ByVal s1 As String, ByVal s2 As String, Optional ByVal phancach As String = ",") As String
         Dim T1, T2, s As String
         For Each T1 In Split(s1, phancach)
             For Each T2 In Split(s2, phancach)
                 s = s & phancach & T1 & T2
             Next
         Next
         ghepchuoi = Right(s, Len(s) - Len(phancach))
End Function
=ghepchuoi(B4,C4)
 

giaiphapvba

Administrator
Thành viên BQT
Chương trình của @Snow24 vẫn có chỗ để cải thiện:
1. Lỗi nếu một chuỗi là rỗng.
Bạn cần đăng nhập để thấy đính kèm


2. Khắc phục:
Mã:
Function ghepchuoi(ByVal s1 As String, ByVal s2 As String, Optional ByVal phancach As String = ",") As String
         Dim T1, T2, s As String
         If s1 = "" Then
            ghepchuoi = s2
            Exit Function
         ElseIf s2 = "" Then
            ghepchuoi = s1
            Exit Function
         End If
         For Each T1 In Split(s1, phancach)
             For Each T2 In Split(s2, phancach)
                 s = s & phancach & T1 & T2
             Next
         Next
         ghepchuoi = Right(s, Len(s) - Len(phancach))
End Function
Kết quả 1:
Bạn cần đăng nhập để thấy đính kèm


Kết quả 2:
Bạn cần đăng nhập để thấy đính kèm


3. Kiến thức cần biết:
Hàm Split:
Cấu trúc: Split(string1,kí_tự_phân_cách) sẽ trả về là mảng.
ví dụ:
Bạn cần đăng nhập để thấy đính kèm
 
H

Hồng Phương

Guest
@Hồng Phương Bạn xem code này được không.
Mã:
Function ghepchuoi(ByVal s1 As String, ByVal s2 As String, Optional ByVal phancach As String = ",") As String
         Dim T1, T2, s As String
         For Each T1 In Split(s1, phancach)
             For Each T2 In Split(s2, phancach)
                 s = s & phancach & T1 & T2
             Next
         Next
         ghepchuoi = Right(s, Len(s) - Len(phancach))
End Function
=ghepchuoi(B4,C4)
Em cảm ơn anh @Snow24 làm quá nhanhhàm rất chuẩn rồi anh ơi
Anh ơi anh viết giúp em bước nữa là bước 1 dãy số 1 lần lượt ghép với dãy số 2
và sau đó lại lấy lần lượt dãy số 2 ghép với dãy số 1
em cảm ơn anh nhé
Kết quả:
Dãy 1:
h,b,m,2

dãy 2
u,ơ,3,a


hu,hơ,h3,ha,bu,bơ,b3,ba,mu,mơ,m3,ma,2u,2ơ,23,2a,uh,ub,um,u2,ơh,ơb,ơm,ơ2,3h,3b,3m,32,ah,ab,am,a2
 
H

Hồng Phương

Guest
Chương trình của @Snow24 vẫn có chỗ để cải thiện:
1. Lỗi nếu một chuỗi là rỗng.
Bạn cần đăng nhập để thấy đính kèm


2. Khắc phục:
Mã:
Function ghepchuoi(ByVal s1 As String, ByVal s2 As String, Optional ByVal phancach As String = ",") As String
         Dim T1, T2, s As String
         If s1 = "" Then
            ghepchuoi = s2
            Exit Function
         ElseIf s2 = "" Then
            ghepchuoi = s1
            Exit Function
         End If
         For Each T1 In Split(s1, phancach)
             For Each T2 In Split(s2, phancach)
                 s = s & phancach & T1 & T2
             Next
         Next
         ghepchuoi = Right(s, Len(s) - Len(phancach))
End Function
Kết quả 1:
Bạn cần đăng nhập để thấy đính kèm


Kết quả 2:
Bạn cần đăng nhập để thấy đính kèm


3. Kiến thức cần biết:
Hàm Split:
Cấu trúc: Split(string1,kí_tự_phân_cách) sẽ trả về là mảng.
ví dụ:
Bạn cần đăng nhập để thấy đính kèm
Em cảm ơn chị, nhưng chị ơi em muốn nếu như chuỗi rỗng thì nó sẽ trả về ="No"
Chị chỉnh sửa giúp em với nhé
 

Euler

Administrator
Thành viên BQT
1. Bạn chú ý không quote cả bài viết, nếu cần trích dẫn, hãy lược bỏ, giữ lại câu cần thiết.
2. Code:
Mã:
Function main_ghepchuoi(ByVal s1 As String, ByVal s2 As String, Optional ByVal phancach As String = ",") As String
    
    main_ghepchuoi = ghepchuoi(s1, s2, ",") & "," & ghepchuoi(s2, s1, ",")

End Function
Function ghepchuoi(ByVal s1 As String, ByVal s2 As String, Optional ByVal phancach As String = ",") As String
         Dim T1, T2, s As String
         If s1 = "" Then
            ghepchuoi = s2
            Exit Function
         ElseIf s2 = "" Then
            ghepchuoi = s1
            Exit Function
         End If
         For Each T1 In Split(s1, phancach)
             For Each T2 In Split(s2, phancach)
                 s = s & phancach & T1 & T2
             Next
         Next
         ghepchuoi = Right(s, Len(s) - Len(phancach))
End Function
Kết quả:
Bạn cần đăng nhập để thấy đính kèm
 
H

Hồng Phương

Guest
Em cảm ơn anh
Euler
Anh ơi, anh sửa giúp em là nếu như có 1 hoặc 2 dãy ký tự là :Rỗng" thì kết quả sẽ trả về là "No"
Diễn đàn toàn anh chị nhiệt huyết và giỏi quá.
 

vbano1

SMod
Thành viên BQT
em muốn nếu như chuỗi rỗng thì nó sẽ trả về ="No"
Thật sự là bạn có cố gắng hiểu code không, nếu mà không cố gắng đọc code, thì sẽ không hiểu được. Hãy thử đọc code một lần, không hiểu chỗ nào thì hỏi mọi người nhé.
Mã:
Function ghepchuoi(ByVal s1 As String, ByVal s2 As String, Optional ByVal phancach As String = ",") As String
         Dim T1, T2, s As String
         If s1 = "" Then
            ghepchuoi = "No"
            Exit Function
         ElseIf s2 = "" Then
            ghepchuoi = "No"
            Exit Function
         End If
         For Each T1 In Split(s1, phancach)
             For Each T2 In Split(s2, phancach)
                 s = s & phancach & T1 & T2
             Next
         Next
         ghepchuoi = Right(s, Len(s) - Len(phancach))
End Function
Bạn cần đăng nhập để thấy đính kèm


Bài toán 2 thì sửa lại hàm main:
Mã:
Function main_ghepchuoi(ByVal s1 As String, ByVal s2 As String, Optional ByVal phancach As String = ",") As String
    If ghepchuoi(s1, s2, phancach) = "No" Then
        main_ghepchuoi = "No"
        Exit Function 'thoat ham
    ElseIf ghepchuoi(s2, s1, phancach) = "No" Then
        main_ghepchuoi = "No"
        Exit Function 'thoat ham  
    End If  
  'Không có lỗi gì ghì ghép bình thường
    main_ghepchuoi = ghepchuoi(s1, s2, phancach) & "," & ghepchuoi(s2, s1, phancach)
End Function
 
H

Hồng Phương

Guest
Em cảm ơn chị
vbano1
Diễn đàn này sao nhiêu cao thủ quá
Chị oi, em vẫn chưa hiểu mấy về VBA
 

tuhocvba

Administrator
Thành viên BQT
Tôi hiểu rằng topic này đã được hỗ trợ xong. Hãy cho tôi close topic tại đây.
1. Bạn xem lại bài viết #1 của bạn, xem có dễ hiểu hơn không nhé, mình vừa sửa lại đấy.
2. "Chưa hiểu mấy" không phải là lý do. Nếu ở bài toán 1, thì mọi người hiểu được.
Ở bài toán 2, vấn đề tương tự, thì mọi người không hiểu, thực sự bạn đã hiểu vấn đề hay chưa. Nếu chỉ copy code và sử dụng thì không tiến bộ được.
Đừng nghĩ ngợi nhiều, mọi người chỉ mong bạn tiến bộ và tự lập được mà thôi. Điều mong mỏi nhất là bạn hiểu được code đó ý nghĩa như thế nào. Đó cũng là trách nhiệm của những người với tư cách là tiền bối hỗ trợ cho hậu bối. Không có ý nghĩa gì nếu bạn chỉ sử dụng code, còn lại hoàn toàn không hiểu ý nghĩa code.
Bạn có thể tham khảo video bài học ở đây, mong bạn thu hoạch được nhiều kiến thức ở diễn đàn.
 
Trạng thái
Không mở trả lời sau này.
Top