hongphuong1997
Thành viên tiêu biểu
- Tham gia
- 12/11/17
- Bài viết
- 717
- Được thích
- 288
- Giới tính
- Nữ
em dán code này vào chạy thử xem thế nào nhéEm xin giải thích vắn tắt của bài như sau
Nhờ các thầy và anh chị giúp đỡ
Sub ketqua()
Dim a, b, c, d, i, j As Long
Dim dk, dks As String
Dim arr, arr1, arr2
arr1 = Sheet1.Range("b3:c11").Value
arr2 = Sheet1.Range("f15:h24").Value
ReDim arr(1 To UBound(arr1, 1), 1 To 1)
For i = 1 To UBound(arr1, 1)
a = a + 1
For j = 1 To UBound(arr2, 1)
dk = arr1(i, 1) & arr1(i, 2)
dks = arr2(j, 1) & arr2(j, 2)
If dk = dks Then
If arr(a, 1) = Empty Then
arr(a, 1) = arr2(j, 3)
Else
arr(a, 1) = arr(a, 1) & "," & arr2(j, 3)
End If
End If
Next j
Next i
Sheet1.Range("d3").Resize(a, 1).Value = arr
End Sub
Em xin giải thích vắn tắt của bài như sau
Nhờ các thầy và anh chị giúp đỡ
[B10]=8, [C10]=9 ==> a8 ==> không lấy_ tức là phải từ 2 trở lên mới nối ???Em xin giải thích vắn tắt của bài như sau
Nhờ các thầy và anh chị giúp đỡ
Em cảm ơn anhem dán code này vào chạy thử xem thế nào nhé
Mã:Sub ketqua() Dim a, b, c, d, i, j As Long Dim dk, dks As String Dim arr, arr1, arr2 arr1 = Sheet1.Range("b3:c11").Value arr2 = Sheet1.Range("f15:h24").Value ReDim arr(1 To UBound(arr1, 1), 1 To 1) For i = 1 To UBound(arr1, 1) a = a + 1 For j = 1 To UBound(arr2, 1) dk = arr1(i, 1) & arr1(i, 2) dks = arr2(j, 1) & arr2(j, 2) If dk = dks Then If arr(a, 1) = Empty Then arr(a, 1) = arr2(j, 3) Else arr(a, 1) = arr(a, 1) & "," & arr2(j, 3) End If End If Next j Next i Sheet1.Range("d3").Resize(a, 1).Value = arr End Sub
Bác ơi chỗ đó là cháu không nhìn thấy bác à[B10]=8, [C10]=9 ==> a8 ==> không lấy_ tức là phải từ 2 trở lên mới nối ???
Vậy thì "zì":Em cảm ơn anh
rất đúng anh ơi
Anh có thể viết thành fun() để em vận dụng cho linh hoạt được không anh?
Bài đã được tự động gộp:
Bác ơi chỗ đó là cháu không nhìn thấy bác à
Có lấy bác ơi
Public Function Gom(Vung, Dk, Cd) As String
Dim Tam, I, Kq
Tam = Dk & "@" & Cd
For I = 1 To Vung.Rows.Count
If Vung(I, 1) & "@" & Vung(I, 2) = Tam Then Kq = Kq & Vung(I, 3) & " "
Next I
Gom = Replace(Trim(Kq), " ", "; ")
End Function
=gom($F$15:$H$24,B3,C3)
- Không cần thêm biến a, lấy theo biến i luôn.For i = 1 To UBound(arr1, 1)
a = a + 1
For j = 1 To UBound(arr2, 1)
dk = arr1(i, 1) & arr1(i, 2)
Cháu cảm ơn bácVậy thì "zì":
Cell lấy kết quả:Mã:Public Function Gom(Vung, Dk, Cd) As String Dim Tam, I, Kq Tam = Dk & "@" & Cd For I = 1 To Vung.Rows.Count If Vung(I, 1) & "@" & Vung(I, 2) = Tam Then Kq = Kq & Vung(I, 3) & " " Next I Gom = Replace(Trim(Kq), " ", "; ") End Function
ThânMã:=gom($F$15:$H$24,B3,C3)
Tại dữ liệu bạn đưa như thế.Cháu cảm ơn bác
Công thức rất đúng bác ơi
Nhưng có mỗi nhược điểm là chưa thuận lợi cho lắm
Cháu muốn fun() này làm add in (Vì cháu phải dùng công thức này thường xuyên)
Trong công thức bác để vùng lấy kết quả là cột thứ 3 (Cố định)
Vì vậy mỗi khi vùng có số cột khác nhau thì lại phải sửa trong code
bác có thể sửa lại cho cháu chút xíu được không hở bác?
bác ơi, bác sửa cho cháu vớiTại dữ liệu bạn đưa như thế.
"Bi giờ", bạn tách thằng "Vung" ra làm 2:
1) "VungDk" (2 cột) dùng để dò thằng Dk & Cd,
2) "VungKq" (1 cột_cột thứ 3, muốn nằm đâu thì nằm) dùng để trả kết quả khi 2 cột của thằng "VungDk" = Dk & Cd
Đại khái là thế này:
=Gom(VungDk,VungKq,Dk,Cd)
Thân
Trơ..ơ...ờ...ibác ơi, bác sửa cho cháu với
cháu không biết sửa như nào bác ơi
Public Function Gom(VungDk, VungKq, Dk, Cd) As String
Dim Tam, I, Kq
Tam = Dk & "@" & Cd
For I = 1 To VungDk.Rows.Count
If VungDk(I, 1) & "@" & VungDk(I, 2) = Tam Then Kq = Kq & VungKq(I, 1) & " "
Next I
Gom = Replace(Trim(Kq), " ", "; ")
End Function
=gom($F$15:$G$24,$H$15:$H$24,B3,C3)
Cháu cảm ơn bác rất nhiềuTrơ..ơ...ờ...i
công thứcMã:Public Function Gom(VungDk, VungKq, Dk, Cd) As String Dim Tam, I, Kq Tam = Dk & "@" & Cd For I = 1 To VungDk.Rows.Count If VungDk(I, 1) & "@" & VungDk(I, 2) = Tam Then Kq = Kq & VungKq(I, 1) & " " Next I Gom = Replace(Trim(Kq), " ", "; ") End Function
H15:H24 là cột thứ 3, muốn ở đâu thì khai báo ở đóMã:=gom($F$15:$G$24,$H$15:$H$24,B3,C3)
Thân
DIỄN ĐÀN GIẢI PHÁP EXCEL