Tìm kiếm và thay thế dạng mảng

Blue Softs Liên hệ QC

hiennv.tsc

Thành viên mới
Tham gia ngày
13 Tháng tư 2019
Bài viết
43
Được thích
15
Chúc các bạn cuối tuần vui vẻ nhé!
Nhờ các bạn viết giúp hàm như file mình đính kèm.
Xin trân thành cảm ơn các bạn.
 

File đính kèm

  • Tìm kiếm và thay thế(dạng mảng).xlsb
    17.8 KB · Đọc: 32

hiennv.tsc

Thành viên mới
Tham gia ngày
13 Tháng tư 2019
Bài viết
43
Được thích
15
Các bạn bớt chút thời gian giúp mình bài này với nhé!
 

concogia

Gội rồi mới Cạo
Tham gia ngày
17 Tháng chín 2009
Bài viết
3,311
Được thích
6,657
Cả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)
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
 

hiennv.tsc

Thành viên mới
Tham gia ngày
13 Tháng tư 2019
Bài viết
43
Được thích
15
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
Mình xin giải thích như sau:
Bạn xem lại và giúp đỡ
Cảm ơn bạn!
 

File đính kèm

  • Tìm kiếm và thay thế(dạng mảng).xlsb
    18.8 KB · Đọc: 7

batman1

Thành viên gạo cội
Tham gia ngày
8 Tháng chín 2014
Bài viết
4,360
Được thích
7,036
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Đ
 

File đính kèm

  • Tìm kiếm và thay thế(dạng mảng).xlsb
    18.8 KB · Đọc: 15

hiennv.tsc

Thành viên mới
Tham gia ngày
13 Tháng tư 2019
Bài viết
43
Được thích
15
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 @batman1 đã thức khuya giúp đỡ.
Lại không phải theo ý của mình rồi bạn ơi
ý của mình giải thích như file đính kèm ở bài #7
Tức là dữ liệu "thay thế" KHÔNG NẰM TRÊN range() của bảng tính mà nó nằm bên trong của code (Vì nó là mặc định)
Kính mong bạn viết lại giúp.
 

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia ngày
8 Tháng sáu 2006
Bài viết
12,433
Được thích
18,906
Có 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"
 

hiennv.tsc

Thành viên mới
Tham gia ngày
13 Tháng tư 2019
Bài viết
43
Được thích
15
Có 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"
Cảm ơn bạn @SA_DQ
Tức là như này bạn ơi
=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ài đã được tự động gộp:

Bạn @batman1 @SA_DQ tức là cho các mã này vào luôn trong UDF
1623709375374.png
 

File đính kèm

  • Tìm kiếm và thay thế(dạng mảng).xlsb
    18.8 KB · Đọc: 4
Lần chỉnh sửa cuối:

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia ngày
8 Tháng sáu 2006
Bài viết
12,433
Được thích
18,906
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"
 

hiennv.tsc

Thành viên mới
Tham gia ngày
13 Tháng tư 2019
Bài viết
43
Được thích
15
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"
Vâng đúng rồi bạn!
Mình rất hân hạnh có 3 lão làng trong diễn đàn GPE vào giúp đỡ.
 

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia ngày
8 Tháng sáu 2006
Bài viết
12,433
Được thích
18,906
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
 

hiennv.tsc

Thành viên mới
Tham gia ngày
13 Tháng tư 2019
Bài viết
43
Được thích
15
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
hihi...... bạn @SA_DQ ơi mình nghĩ chắc là vẫn chưa đúng ý của mình rồi.
Bởi vì mình chưa thấy bạn đưa các mã vào trong UDF
(Tức là các mã không lấy trực tiếp trên bảng tính)
Bạn nghiên cứu giúp mình với
Mã:
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
Bài đã được tự động gộp:

À bạn @SA_DQ ơi, viết giống dạng hàm (Đổi số thành tiền đó)
 

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia ngày
8 Tháng sáu 2006
Bài viết
12,433
Được thích
18,906
Tham 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!
 

hiennv.tsc

Thành viên mới
Tham gia ngày
13 Tháng tư 2019
Bài viết
43
Được thích
15
Tham 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!
Nói thật sự với bạn @SA_DQ là mình mù tịt về VBA
Có cái là vào diễn đàn đọc nhiều bài của các bạn
Nhưng thực sự không biết gì.
Bạn cố gắng giúp mình với nhé!
 

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia ngày
8 Tháng sáu 2006
Bài viết
12,433
Được thích
18,906
Trong file của bạn nè:

Ví dụ
Dòng 3712,01,22a6,b6,c6; a1,b1,c1; a10,b10,c10;. Cú pháp: =UDF(D37)
Dòng 3803,12,13,33g3,i3,k3; g6,i6,k6; g7,i7,k7; g15,i15,k15;. Cú pháp: =UDF(D38,3)


$$$$@
 

batman1

Thành viên gạo cội
Tham gia ngày
8 Tháng chín 2014
Bài viết
4,360
Được thích
7,036
=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
Viết thế mà vẫn kêu. Bó tay.

Công thức cho E11

Hoặc
Mã:
=thaythe("ab";D11;F3:T6)

hoặc

Mã:
=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"})

hoặc

Mã:
=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"})

Trên máy bạn có thể phải thay ";" bằng "," và thay "\" bằng ký tự khác.

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. Không ai làm kiểu đó. Vùng dữ liệu nếu có thể thay đổi thì phải là tham số truyền vào. Lúc đó khi cần thì gọi UDF với vùng mới. Không ai làm kiểu mỗi lần thay đổi vùng lại vào sửa trong code của UDF như bài #14.
 
Lần chỉnh sửa cuối:

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia ngày
8 Tháng sáu 2006
Bài viết
12,433
Được thích
18,906
. . . . 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. . . . .
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?
& nó hay hay dỡ như thế nào, xin nhờ các bạn phân tích tiếp; Rất cảm ơn & trân trọng!
 
Top Bottom