hiennv.tsc
Thành viên chính thức
- Tham gia
- 13/4/19
- Bài viết
- 51
- Được thích
- 16
Cảm ơn bạn đã quan tâm và giúp đỡ.Đây bạn, phải đọc tin tức coi còn phong toả theo nghị định 16 không đã
Thân
Trong file tôi gởi lên bạn muốn kết quả như thế nào thì nhập vào, chắc mình hông hiểu đề bài, bạn giải thích rõ hơn xem sao, từ hồi có Cô Vy đầu óc nó sao ý. Xem đá banh đã, lúc nào rảnh ...làm tiếpCảm ơn bạn đã quan tâm và giúp đỡ.
Bạn ơi ý của mình không phải là lấy dữ liệu trên range()
Mà các dữ liệu trên là mặc định (cố định)
Mình xin giải thích như sau:Trong file tôi gởi lên bạn muốn kết quả như thế nào thì nhập vào, chắc mình hông hiểu đề bài, bạn giải thích rõ hơn xem sao, từ hồi có Cô Vy đầu óc nó sao ý. Xem đá banh đã, lúc nào rảnh ...làm tiếp
Thân
Cảm ơn bạn @batman1 đã thức khuya giúp đỡ.Tham số cuối cùng có thể nhập RANGE hoặc mảng có 4 dòng (Dòng điều kiện, Dòng cần thay thế 1, Dòng cần thay thế 2, Dòng cần thay thế 3Đ
Cảm ơn bạn @SA_DQCó nghĩa là bạn muốn có 1 hàm tự tạo theo kiểu:
=UDF(MaSo As String, Optional Dong = 1 As Byte) As String
Ví dụ: =UDF ( "12,01,22") => "a6,b6,c6_a1,b1,c1_a10,b10,c10"
& =UDF("03,12,13,33",3) => "a3,b3,c3_a6,b6,c6_a7,b7,c7_a15,b15,c15"
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(J23;01;a1,b1,c1);02;a2,b2,c2);03;a3,b3,c3);10;a4,b4,c4);11;a5,b5,c5);12;a6,b6,c6);13;a7,b7,c7);20;a8,b8,c8);21;a9,b9,c9);22;a10,b10,c10);23;a11,b11,c11);30;a12,b12,c12);31;a13,b13,c13);32;a14,b14,c14);33;a15,b15,c15) |
Vâng đúng rồi bạn!Mình tin là mình đã hiểu đúng ý của bạn, có nghĩa là
Ví dụ: =UDF ( "12,01,22") sẽ trả về dòng đầu tiên: "a6,b6,c6_a1,b1,c1_a10,b10,c10"
& =UDF("03,12,13,33",3) sẽ trả về dòng thứ 3: "a3,b3,c3_a6,b6,c6_a7,b7,c7_a15,b15,c15"
Function UDF(ChuoiTim As String, Optional DongTim As Byte = 1) As String
Dim Rng As Range, sRng As Range
Dim VTr As Byte
ChuoiTim = ChuoiTim & ","
Set Rng = Range([D3], [Az3].End(xlToLeft))
Do
VTr = InStr(ChuoiTim, ","): If VTr < 1 Then Exit Do
Set sRng = Rng.Find(Left(ChuoiTim, VTr - 1), , xlFormulas, xlWhole)
If sRng Is Nothing Then
MsgBox "Nothing!"
Else
UDF = UDF & sRng.Offset(1 + DongTim).Value & "; "
ChuoiTim = Mid(ChuoiTim, 1 + VTr, Len(ChuoiTim))
End If
Loop
End Function
hihi...... bạn @SA_DQ ơi mình nghĩ chắc là vẫn chưa đúng ý của mình rồi.Thử kiểm xem nha:
PHP:Function UDF(ChuoiTim As String, Optional DongTim As Byte = 1) As String Dim Rng As Range, sRng As Range Dim VTr As Byte ChuoiTim = ChuoiTim & "," Set Rng = Range([D3], [Az3].End(xlToLeft)) Do VTr = InStr(ChuoiTim, ","): If VTr < 1 Then Exit Do Set sRng = Rng.Find(Left(ChuoiTim, VTr - 1), , xlFormulas, xlWhole) If sRng Is Nothing Then MsgBox "Nothing!" Else UDF = UDF & sRng.Offset(1 + DongTim).Value & "; " ChuoiTim = Mid(ChuoiTim, 1 + VTr, Len(ChuoiTim)) End If Loop End Function
Function UDF(ChuoiTim As String, Optional DongTim As Byte = 1) As String
Dim Rng As Range, sRng As Range
Dim VTr As Byte
Dòng c?n thay th? 1
01=a1,b1,c1
02=a2,b2,c2
03=a3,b3,c3
10=a4,b4,c4
11=a5,b5,c5
12=a6,b6,c6
13=a7,b7,c7
20=a8,b8,c8
21=a9,b9,c9
22=a10,b10,c10
23=a11,b11,c11
30=a12,b12,c12
31=a13,b13,c13
32=a14,b14,c14
33=a15,b15,c15
Dòng c?n thay th? 2
01=d1,e1,f1
02=d2,e2,f2
03=d3,e3,f3
10=d4,e4,f4
11=d5,e5,f5
12=d6,e6,f6
13=d7,e7,f7
20=d8,e8,f8
21=d9,e9,f9
22=d10,e10,f10
23=d11,e11,f11
30=d12,e12,f12
31=d13,e13,f13
32=d14,e14,f14
33=d15,e15,f15
Dòng c?n thay th? 3
01=g1,i1,k1
02=g2,i2,k2
03=g3,i3,k3
10=g4,i4,k4
11=g5,i5,k5
12=g6,i6,k6
13=g7,i7,k7
20=g8,i8,k8
21=g9,i9,k9
22=g10,i10,k10
23=g11,i11,k11
30=g12,i12,k12
31=g13,i13,k13
32=g14,i14,k14
33=g15,i15,k15
ChuoiTim = ChuoiTim & ","
Set Rng = Range([D3], [Az3].End(xlToLeft))
Do
VTr = InStr(ChuoiTim, ","): If VTr < 1 Then Exit Do
Set sRng = Rng.Find(Left(ChuoiTim, VTr - 1), , xlFormulas, xlWhole)
If sRng Is Nothing Then
MsgBox "Nothing!"
Else
UDF = UDF & sRng.Offset(1 + DongTim).Value & "; "
ChuoiTim = Mid(ChuoiTim, 1 + VTr, Len(ChuoiTim))
End If
Loop
End Function
Nói thật sự với bạn @SA_DQ là mình mù tịt về VBATham khảo từ #12 hay #13 bạn tự sửa đi & mình tin là bạn sẽ sửa được
Nếu như bạn muốn là đưa vô hàm luôn (để bạn khỏi nhập bằng tay tham số đầu của hàm) thì cú pháp chỉ còn là
=UDF(Optional DongDo As Byte= 1)
& đó là 1 hàm thông minh mà mình mới thấy lần đầu trong đời!
Viết thế mà vẫn kêu. Bó tay.=UDF ( "ô chưa")=>"a6,b6,c6_a1,b1,c1_a10,b10,c10"
Ô chưa ="12,01,22"
Nếu là công thức của excel là như ví dụ bên dưới (nhưng không chưa chính xác)
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(J23;01;a1,b1,c1);02;a2,b2,c2);03;a3,b3,c3);10;a4,b4,c4);11;a5,b5,c5);12;a6,b6,c6);13;a7,b7,c7);20;a8,b8,c8);21;a9,b9,c9);22;a10,b10,c10);23;a11,b11,c11);30;a12,b12,c12);31;a13,b13,c13);32;a14,b14,c14);33;a15,b15,c15)
Bạn @batman1 @SA_DQ tức là cho các mã này vào luôn trong UDF
=thaythe("ab";D11;F3:T6)
=thaythe("ab";D11;{"01"\"02"\"03"\"10"\"11"\"12"\"13"\"20"\"21"\"22"\"23"\"30"\"31"\"32"\"33";"a1,b1,c1"\"a2,b2,c2"\"a3,b3,c3"\"a4,b4,c4"\"a5,b5,c5"\"a6,b6,c6"\"a7,b7,c7"\"a8,b8,c8"\"a9,b9,c9"\"a10,b10,c10"\"a11,b11,c11"\"a12,b12,c12"\"a13,b13,c13"\"a14,b14,c14"\"a15,b15,c15";"d1,e1,f1"\"d2,e2,f2"\"d3,e3,f3"\"d4,e4,f4"\"d5,e5,f5"\"d6,e6,f6"\"d7,e7,f7"\"d8,e8,f8"\"d9,e9,f9"\"d10,e10,f10"\"d11,e11,f11"\"d12,e12,f12"\"d13,e13,f13"\"d14,e14,f14"\"d15,e15,f15";"g1,i1,k1"\"g2,i2,k2"\"g3,i3,k3"\"g4,i4,k4"\"g5,i5,k5"\"g6,i6,k6"\"g7,i7,k7"\"g8,i8,k8"\"g9,i9,k9"\"g10,i10,k10"\"g11,i11,k11"\"g12,i12,k12"\"g13,i13,k13"\"g14,i14,k14"\"g15,i15,k15"})
=thaythe("ab";"12,01,22";{"01"\"02"\"03"\"10"\"11"\"12"\"13"\"20"\"21"\"22"\"23"\"30"\"31"\"32"\"33";"a1,b1,c1"\"a2,b2,c2"\"a3,b3,c3"\"a4,b4,c4"\"a5,b5,c5"\"a6,b6,c6"\"a7,b7,c7"\"a8,b8,c8"\"a9,b9,c9"\"a10,b10,c10"\"a11,b11,c11"\"a12,b12,c12"\"a13,b13,c13"\"a14,b14,c14"\"a15,b15,c15";"d1,e1,f1"\"d2,e2,f2"\"d3,e3,f3"\"d4,e4,f4"\"d5,e5,f5"\"d6,e6,f6"\"d7,e7,f7"\"d8,e8,f8"\"d9,e9,f9"\"d10,e10,f10"\"d11,e11,f11"\"d12,e12,f12"\"d13,e13,f13"\"d14,e14,f14"\"d15,e15,f15";"g1,i1,k1"\"g2,i2,k2"\"g3,i3,k3"\"g4,i4,k4"\"g5,i5,k5"\"g6,i6,k6"\"g7,i7,k7"\"g8,i8,k8"\"g9,i9,k9"\"g10,i10,k10"\"g11,i11,k11"\"g12,i12,k12"\"g13,i13,k13"\"g14,i14,k14"\"g15,i15,k15"})
Có cách khác là vùng dữ liệu này được gán 1 cái tên cúng cơm & như vậy trong code ta réo tên cúng cơm nó ra mà mần, Vậy có được không các bạn?. . . . Vùng dữ liệu có thể truyền khi gọi UDF hoặc nhập cứng trong code như bài #14. Nhập cứng thì khi cần thay đổi vùng dứ liệu thì phải sửa trong code. . . . .