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

Liên hệ QC

hiennv.tsc

Thành viên mới
Tham gia
13/4/19
Bài viết
48
Được thích
16
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: 33
Cảm ơn bạn @batman1 !
Phương án như này thì tương đối tàm tạm.
Nhưng khi gọi hàm thì lại khó khăn
Mình muốn nó cố định như này cũng được.
nhưng khi gọi hàm thì chỉ cần gõ "=thaythe(ab; thì cái hàm bên dưới của bạn sẽ suất hiện và chỉ cần chọn ô tham chiếu
Vậy kính mong bạn giúp đỡ
=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"})
 
Upvote 0
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!
Theo tôi dùng cách nào cũng được miễn không ghi cứng trong code. Code lấy D3:AZ3, rồi cứ tìm thấy là dịch xuống 1, 2, 3 dòng tức là lấy D4:AZ4, ..., D6:AZ6 là code có ghi cứng vùng dữ liệu rồi.
Bài đã được tự động gộp:

Cảm ơn bạn @batman1 !
Phương án như này thì tương đối tàm tạm.
Nhưng khi gọi hàm thì lại khó khăn
Mình muốn nó cố định như này cũng được.
nhưng khi gọi hàm thì chỉ cần gõ "=thaythe(ab; thì cái hàm bên dưới của bạn sẽ suất hiện và chỉ cần chọn ô tham chiếu
Vậy kính mong bạn giúp đỡ
=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"})
Với hàm của tôi thì tôi đã ghi hết các cách gọi.

Tôi không hiểu ý của bạn.

Tôi không hiểu lý do bạn không muốn nhập vùng dữ liệu.

Nếu vùng dữ liệu LUÔN LUÔN cố định thì như bài #14 thôi. Hoặc sửa chút bài của tôi. Nhưng bạn "bĩu môi" với bài #14 nên tôi chả hiểu được ý muốn của bạn.

Tôi đã viết hết ý. Tôi dừng ở đây.
 
Lần chỉnh sửa cuối:
Upvote 0
Theo tôi dùng cách nào cũng được miễn không ghi cứng trong code. Code lấy D3:AZ3, rồi cứ tìm thấy là dịch xuống 1, 2, 3 dòng tức là lấy D4:AZ4, ..., D6:AZ6 là code có ghi cứng vùng dữ liệu rồi.
Bài đã được tự động gộp:


Với hàm của tôi thì tôi đã ghi hết các cách gọi.

Tôi không hiểu ý của bạn.

Tôi không hiểu lý do bạn không muốn nhập vùng dữ liệu.

Nếu vùng dữ liệu LUÔN LUÔN cố định thì như bài #14 thôi. Hoặc sửa chút bài của tôi. Nhưng bạn "bĩu môi" với bài #14 nên tôi chả hiểu được ý muốn của bạn.

Tôi đã viết hết ý. Tôi dừng ở đây.
Rất cảm ơn bạn @batman1 đã quan tâm giúp đỡ.
Mặc dù hàm vẫn chưa được kết quả như mong muốn.
 
Upvote 0
& đây là nổ lực cuối cùng của mình với chủ bài đăng:
PHP:
Function UDF(ChuoiTim As String, Optional DongTim As Byte = 1) As String
 Dim VTr As Byte
 Dim GPE As String
 Const D1 As String = "a1,b1,c1":       Const E1 As String = "d1,e1,f1":    Const F1 As String = "g1,i1,k1"     '01 '
 Const D2 As String = "a2,b2,c2":       Const E2 As String = "d2,e2,f2":    Const F2 As String = "g2,i2,k2"     '02 '
 Const D3 As String = "a3,b3,c3":       Const E3 As String = "d3,e3,f3":    Const F3 As String = "g3,i3,k3"     '03 '
 Const DA As String = "a4,b4,c4":       Const EA As String = "d4,e4,f4":    Const FA As String = "g4,i4,k4"     '10 '
 Const DB As String = "a5,b5,c5":       Const EB As String = "d5,e5,f5":    Const FB As String = "g5,i5,k5"     '11 '
 Const DC As String = "a6,b6,c6":       Const EC As String = "d6,e6,f6":    Const FC As String = "g6,i6,k6"     '12 '
 Const DD As String = "a7,b7,c7":       Const ED As String = "d7,e7,f7":    Const FD As String = "g7,i7,k7"     '13 '
 Const DE As String = "a8,b8,c8":       Const EE As String = "d8,e8,f8":    Const FE As String = "g8,i8,k8"     '20 '
 Const DF As String = "a9,b9,c9":       Const EF As String = "d9,e9,f9":    Const FF As String = "g9,i9,k9"     '21 '
 Const DG As String = "a10,b10,c10":    Const EG As String = "d10,e10,f10": Const FG As String = "g10,i10,k10"  '22 '
 Const DH As String = "a11,b11,c11":    Const EH As String = "d11,e11,f11": Const FH As String = "g11,i11,k11"  '23 '
 Const DI As String = "a12,b12,c12":    Const EI As String = "d12,e12,f12": Const FI As String = "g12,i12,k12"  '30 '
 Const DJ As String = "a13,b13,c13":    Const EJ As String = "d13,e13,f13": Const FJ As String = "g13,i13,k13"  '31 '
 Const DK As String = "a14,b14,c14":    Const EK As String = "d14,e14,f14": Const FK As String = "g14,i14,k14"  '32 '
 Const DL As String = "a15,b15,c15":    Const EL As String = "d15,e15,f15": Const FL As String = "g15,i15,k15"  '33 '
 
 ChuoiTim = ChuoiTim & ","
 Do
    VTr = InStr(ChuoiTim, ",")
    If VTr < 1 Then
        Exit Do
    Else
        GPE = Left(ChuoiTim, VTr - 1)
        Select Case DongTim
        Case 1
            UDF = UDF & "; " & Switch(GPE = "01", D1, GPE = "02", D2, GPE = "03", D3, GPE = "10", DA, GPE = "11", DB _
                , GPE = "12", DC, GPE = "13", DD, GPE = "20", DE, GPE = "21", DF, GPE = "22", DG, GPE = "23", DH _
                    , GPE = "30", DI, GPE = "31", DJ, GPE = "32", DK, GPE = "33", DL)
        Case 2
            UDF = UDF & "; " & Switch(GPE = "01", E1, GPE = "02", E2, GPE = "03", E3, GPE = "10", EA, GPE = "11", EB _
                , GPE = "12", EC, GPE = "13", ED, GPE = "20", EE, GPE = "21", EF, GPE = "22", EG, GPE = "23", EH _
                    , GPE = "30", EI, GPE = "31", EJ, GPE = "32", EK, GPE = "33", EL)
        Case 3
            UDF = UDF & "; " & Switch(GPE = "01", F1, GPE = "02", F2, GPE = "03", F3, GPE = "10", FA, GPE = "11", FB _
                , GPE = "12", FC, GPE = "13", FD, GPE = "20", FE, GPE = "21", FF, GPE = "22", FG, GPE = "23", FH _
                    , GPE = "30", FI, GPE = "31", FJ, GPE = "32", FK, GPE = "33", FL)
        Case Else
            UDF = "Quá Ngu & Cút Ngay!":                                    Exit Function
        End Select
        ChuoiTim = Mid(ChuoiTim, VTr + 1, Len(ChuoiTim))
    End If
 Loop
 UDF = Mid$(UDF, 3, Len(UDF))
End Function
 
Lần chỉnh sửa cuối:
Upvote 0
& đây là nổ lực cuối cùng của mình với chủ bài đăng:
PHP:
Function UDF(ChuoiTim As String, Optional DongTim As Byte = 1) As String
 Dim VTr As Byte
 Dim GPE As String
 Const D1 As String = "a1,b1,c1":       Const E1 As String = "d1,e1,f1":    Const F1 As String = "g1,i1,k1"     '01 '
 Const D2 As String = "a2,b2,c2":       Const E2 As String = "d2,e2,f2":    Const F2 As String = "g2,i2,k2"     '02 '
 Const D3 As String = "a3,b3,c3":       Const E3 As String = "d3,e3,f3":    Const F3 As String = "g3,i3,k3"     '03 '
 Const DA As String = "a4,b4,c4":       Const EA As String = "d4,e4,f4":    Const FA As String = "g4,i4,k4"     '10 '
 Const DB As String = "a5,b5,c5":       Const EB As String = "d5,e5,f5":    Const FB As String = "g5,i5,k5"     '11 '
 Const DC As String = "a6,b6,c6":       Const EC As String = "d6,e6,f6":    Const FC As String = "g6,i6,k6"     '12 '
 Const DD As String = "a7,b7,c7":       Const ED As String = "d7,e7,f7":    Const FD As String = "g7,i7,k7"     '13 '
 Const DE As String = "a8,b8,c8":       Const EE As String = "d8,e8,f8":    Const FE As String = "g8,i8,k8"     '20 '
 Const DF As String = "a9,b9,c9":       Const EF As String = "d9,e9,f9":    Const FF As String = "g9,i9,k9"     '21 '
 Const DG As String = "a10,b10,c10":    Const EG As String = "d10,e10,f10": Const FG As String = "g10,i10,k10"  '22 '
 Const DH As String = "a11,b11,c11":    Const EH As String = "d11,e11,f11": Const FH As String = "g11,i11,k11"  '23 '
 Const DI As String = "a12,b12,c12":    Const EI As String = "d12,e12,f12": Const FI As String = "g12,i12,k12"  '30 '
 Const DJ As String = "a13,b13,c13":    Const EJ As String = "d13,e13,f13": Const FJ As String = "g13,i13,k13"  '31 '
 Const DK As String = "a14,b14,c14":    Const EK As String = "d14,e14,f14": Const FK As String = "g14,i14,k14"  '32 '
 Const DL As String = "a15,b15,c15":    Const EL As String = "d15,e15,f15": Const FL As String = "g15,i15,k15"  '33 '
 
 ChuoiTim = ChuoiTim & ","
 Do
    VTr = InStr(ChuoiTim, ",")
    If VTr < 1 Then
        Exit Do
    Else
        GPE = Left(ChuoiTim, VTr - 1)
        Select Case DongTim
        Case 1
            UDF = UDF & "; " & Switch(GPE = "01", D1, GPE = "02", D2, GPE = "03", D3, GPE = "10", DA, GPE = "11", DB _
                , GPE = "12", DC, GPE = "13", DD, GPE = "20", DE, GPE = "21", DF, GPE = "22", DG, GPE = "23", DH _
                    , GPE = "30", DI, GPE = "31", DJ, GPE = "32", DK, GPE = "33", DL)
        Case 2
            UDF = UDF & "; " & Switch(GPE = "01", E1, GPE = "02", E2, GPE = "03", E3, GPE = "10", EA, GPE = "11", EB _
                , GPE = "12", EC, GPE = "13", ED, GPE = "20", EE, GPE = "21", EF, GPE = "22", EG, GPE = "23", EH _
                    , GPE = "30", EI, GPE = "31", EJ, GPE = "32", EK, GPE = "33", EL)
        Case 3
            UDF = UDF & "; " & Switch(GPE = "01", F1, GPE = "02", F2, GPE = "03", F3, GPE = "10", FA, GPE = "11", FB _
                , GPE = "12", FC, GPE = "13", FD, GPE = "20", FE, GPE = "21", FF, GPE = "22", FG, GPE = "23", FH _
                    , GPE = "30", FI, GPE = "31", FJ, GPE = "32", FK, GPE = "33", FL)
        Case Else
            UDF = "Quá Ngu & Cút Ngay!":                                    Exit Function
        End Select
        ChuoiTim = Mid(ChuoiTim, VTr + 1, Len(ChuoiTim))
    End If
 Loop
 UDF = Mid$(UDF, 3, Len(UDF))
End Function
Cảm ơn sự nhiệt tình giúp đỡ của bạn @SA_DQ!
Chắc xem xong bóng đa bạn chưa ngủ giấc nào?
Mà thường ngày bạn cũng hay dậy sớm ghê, mình mở máy tầm 3-4h hôm nào cũng thấy bạn có mặt trên diễn đàn rồi.
Mình tin chắc lần này hàm sẽ thành công 100%
 
Upvote 0
Cảm ơn sự nhiệt tình giúp đỡ của bạn @SA_DQ!
.....
Mà thường ngày bạn cũng hay dậy sớm ghê, mình mở máy tầm 3-4h hôm nào cũng thấy bạn có mặt trên diễn đàn rồi.
''''''
Chưa chắc ai dậy sớm hơn ai. Bạn mở máy tầm 3- 4 giờ thì.....chắc cú giờ đó bạn....đã thức dậy, còn "hôm nào cũng thấy bạn có mặt trên diễn đàn rồi." thì chưa chắc, bác ý mở máy lúc sớm, xỉn rồi ngủ, quên tắt máy ==> bạn nghĩ lầm. Hihi
Cái vụ này hồi đó mình bị hoài, người ta hay gọi là " thấy vậy mà không phải vậy"
Thân
 
Upvote 0
Mình xin giải thích như sau:
Bạn xem lại và giúp đỡ
Cảm ơn bạn!
Thử hàm ABC
Mã:
Function ABC(ByVal iStr$, Optional iLoai& = 1) As String
  Dim aDK, aLoai, S, Res(), j&, c&, k&
  aDK = ",,,01,02,03,10,11,12,13,20,21,22,23,30,31,32,33,"
  aLoai = Array("", "a1,b1,c1", "d1,e1,f1", "g1,i1,k1")
  S = Split("," & iStr, ",")
  For j = 1 To UBound(S)
    c = Int(InStr(1, aDK, "," & S(j) & ",") / 3)
    If c > 0 Then
      k = k + 1
      ReDim Preserve Res(1 To k)
      Res(k) = Replace(aLoai(iLoai), "1", c)
    End If
  Next j
  ABC = Join(Res, "; ")
End Function
 
Upvote 0
Thử hàm ABC
Mã:
Function ABC(ByVal iStr$, Optional iLoai& = 1) As String
  Dim aDK, aLoai, S, Res(), j&, c&, k&
  aDK = ",,,01,02,03,10,11,12,13,20,21,22,23,30,31,32,33,"
  aLoai = Array("", "a1,b1,c1", "d1,e1,f1", "g1,i1,k1")
  S = Split("," & iStr, ",")
  For j = 1 To UBound(S)
    c = Int(InStr(1, aDK, "," & S(j) & ",") / 3)
    If c > 0 Then
      k = k + 1
      ReDim Preserve Res(1 To k)
      Res(k) = Replace(aLoai(iLoai), "1", c)
    End If
  Next j
  ABC = Join(Res, "; ")
End Function
Cảm ơn bạn @HieuCD đã quan tâm giúp đỡ.
Cảm ơn bạn rất nhiều!
fnc của bạn súc tích quá, mình đã test và kết quả rất rất đúng:
Nhưng code của bạn viết khó hiểu quá.
1-Mình thấy bạn đưa vào rất ít dữ liệu aLoai = Array("", "a1,b1,c1", "d1,e1,f1", "g1,i1,k1")
Thế sao kết quả lại ra đúng được nhể?
2-Phải chăng bạn đã lấy quy luật của các dữ liệu trên? (Dữ liệu là mình chỉ lấy ví dụ đơn giản cho dễ hiểu mà thôi, thực tế khi mã hóa thì sẽ không có quy luật nào cả.)
Bạn có thể giải thích giúp mình các câu lệnh trong code để mình vận dụng nhé.
Trân thành cảm ơn bạn!
Bài đã được tự động gộp:

& đây là nổ lực cuối cùng của mình với chủ bài đăng:
PHP:
Function UDF(ChuoiTim As String, Optional DongTim As Byte = 1) As String
 Dim VTr As Byte
 Dim GPE As String
 Const D1 As String = "a1,b1,c1":       Const E1 As String = "d1,e1,f1":    Const F1 As String = "g1,i1,k1"     '01 '
 Const D2 As String = "a2,b2,c2":       Const E2 As String = "d2,e2,f2":    Const F2 As String = "g2,i2,k2"     '02 '
 Const D3 As String = "a3,b3,c3":       Const E3 As String = "d3,e3,f3":    Const F3 As String = "g3,i3,k3"     '03 '
 Const DA As String = "a4,b4,c4":       Const EA As String = "d4,e4,f4":    Const FA As String = "g4,i4,k4"     '10 '
 Const DB As String = "a5,b5,c5":       Const EB As String = "d5,e5,f5":    Const FB As String = "g5,i5,k5"     '11 '
 Const DC As String = "a6,b6,c6":       Const EC As String = "d6,e6,f6":    Const FC As String = "g6,i6,k6"     '12 '
 Const DD As String = "a7,b7,c7":       Const ED As String = "d7,e7,f7":    Const FD As String = "g7,i7,k7"     '13 '
 Const DE As String = "a8,b8,c8":       Const EE As String = "d8,e8,f8":    Const FE As String = "g8,i8,k8"     '20 '
 Const DF As String = "a9,b9,c9":       Const EF As String = "d9,e9,f9":    Const FF As String = "g9,i9,k9"     '21 '
 Const DG As String = "a10,b10,c10":    Const EG As String = "d10,e10,f10": Const FG As String = "g10,i10,k10"  '22 '
 Const DH As String = "a11,b11,c11":    Const EH As String = "d11,e11,f11": Const FH As String = "g11,i11,k11"  '23 '
 Const DI As String = "a12,b12,c12":    Const EI As String = "d12,e12,f12": Const FI As String = "g12,i12,k12"  '30 '
 Const DJ As String = "a13,b13,c13":    Const EJ As String = "d13,e13,f13": Const FJ As String = "g13,i13,k13"  '31 '
 Const DK As String = "a14,b14,c14":    Const EK As String = "d14,e14,f14": Const FK As String = "g14,i14,k14"  '32 '
 Const DL As String = "a15,b15,c15":    Const EL As String = "d15,e15,f15": Const FL As String = "g15,i15,k15"  '33 '
 
 ChuoiTim = ChuoiTim & ","
 Do
    VTr = InStr(ChuoiTim, ",")
    If VTr < 1 Then
        Exit Do
    Else
        GPE = Left(ChuoiTim, VTr - 1)
        Select Case DongTim
        Case 1
            UDF = UDF & "; " & Switch(GPE = "01", D1, GPE = "02", D2, GPE = "03", D3, GPE = "10", DA, GPE = "11", DB _
                , GPE = "12", DC, GPE = "13", DD, GPE = "20", DE, GPE = "21", DF, GPE = "22", DG, GPE = "23", DH _
                    , GPE = "30", DI, GPE = "31", DJ, GPE = "32", DK, GPE = "33", DL)
        Case 2
            UDF = UDF & "; " & Switch(GPE = "01", E1, GPE = "02", E2, GPE = "03", E3, GPE = "10", EA, GPE = "11", EB _
                , GPE = "12", EC, GPE = "13", ED, GPE = "20", EE, GPE = "21", EF, GPE = "22", EG, GPE = "23", EH _
                    , GPE = "30", EI, GPE = "31", EJ, GPE = "32", EK, GPE = "33", EL)
        Case 3
            UDF = UDF & "; " & Switch(GPE = "01", F1, GPE = "02", F2, GPE = "03", F3, GPE = "10", FA, GPE = "11", FB _
                , GPE = "12", FC, GPE = "13", FD, GPE = "20", FE, GPE = "21", FF, GPE = "22", FG, GPE = "23", FH _
                    , GPE = "30", FI, GPE = "31", FJ, GPE = "32", FK, GPE = "33", FL)
        Case Else
            UDF = "Quá Ngu & Cút Ngay!":                                    Exit Function
        End Select
        ChuoiTim = Mid(ChuoiTim, VTr + 1, Len(ChuoiTim))
    End If
 Loop
 UDF = Mid$(UDF, 3, Len(UDF))
End Function
Một lần nữa cảm ơn bạn @SA_DQ nhé!
Sau một hồi chọc ngoáy linh tinh, mình đã rút gọn được code của bạn xuống 1/2 mà kết quả vẫn đúng (Còn về nguyên lý và lý thuyết hoạt động có bị sai hay không mình mù tịt). Bởi vì mình không hiểu rõ các câu lệnh.
Bạn giải thích giúp mình câu này với nhé.

Loop
UDF = Mid$(UDF, 3, Len(UDF)) (số 3 là như nào hả bạn? Liệu cho lên thành số 4,,,5..... được không?
End Function
Cảm ơn bạn nhé!
 
Lần chỉnh sửa cuối:
Upvote 0
2-Phải chăng bạn đã lấy quy luật của các dữ liệu trên? (Dữ liệu là mình chỉ lấy ví dụ đơn giản cho dễ hiểu mà thôi, thực tế khi mã hóa thì sẽ không có quy luật nào cả.
Chỉ cần test với dữ liệu thực thì biết thôi chứ cần gì phải hỏi.

Nếu có kinh nghiệm thì nhìn

Res(k) = Replace(aLoai(iLoai), "1", c)

cũng đủ hiểu.
 
Upvote 0
Sau một hồi chọc ngoáy linh tinh, mình đã rút gọn được code của bạn xuống 1/2 mà kết quả vẫn đúng(1) (Còn về nguyên lý và lý thuyết hoạt động có bị sai hay không mình mù tịt). Bởi vì mình không hiểu rõ các câu lệnh.
Bạn giải thích giúp mình câu này với nhé. (2)
UDF = Mid$(UDF, 3, Len(UDF)) (số 3 là như nào hả bạn? Liệu cho lên thành số 4,,,5..... được không?
(1) Thiết nghĩ bạn có thể đưa phần bạn đã rút gọn Code để mọi người & trong đó có mình được chiêm nghiệm được không & thay mặt cho những người đang quan tâm xin cảm ơn bạn trước

(2) Bạn có thể tự thử để hiểu mệnh đề đó mà, bằng nhiều cách chọc ngoái của bạn mà!
 
Upvote 0
Cảm ơn bạn @HieuCD đã quan tâm giúp đỡ.
Cảm ơn bạn rất nhiều!
fnc của bạn súc tích quá, mình đã test và kết quả rất rất đúng:
Nhưng code của bạn viết khó hiểu quá.
1-Mình thấy bạn đưa vào rất ít dữ liệu aLoai = Array("", "a1,b1,c1", "d1,e1,f1", "g1,i1,k1")
Thế sao kết quả lại ra đúng được nhể?
2-Phải chăng bạn đã lấy quy luật của các dữ liệu trên? (Dữ liệu là mình chỉ lấy ví dụ đơn giản cho dễ hiểu mà thôi, thực tế khi mã hóa thì sẽ không có quy luật nào cả.)
Bạn có thể giải thích giúp mình các câu lệnh trong code để mình vận dụng nhé.
Trân thành cảm ơn bạn!
Bài đã được tự động gộp:


Một lần nữa cảm ơn bạn @SA_DQ nhé!
Sau một hồi chọc ngoáy linh tinh, mình đã rút gọn được code của bạn xuống 1/2 mà kết quả vẫn đúng (Còn về nguyên lý và lý thuyết hoạt động có bị sai hay không mình mù tịt). Bởi vì mình không hiểu rõ các câu lệnh.
Bạn giải thích giúp mình câu này với nhé.

Loop
UDF = Mid$(UDF, 3, Len(UDF)) (số 3 là như nào hả bạn? Liệu cho lên thành số 4,,,5..... được không?
End Function
Cảm ơn bạn nhé!
Nếu không tìm được quy luật dữ liệu chịu khó nhập array L1, L2, L3
Mã:
Function DEF(ByVal iStr$, Optional iLoai& = 1) As String
  Dim aDK, aLoai, L1, L2, L3, S, Res(), j&
  aDK = ",,,01,02,03,10,11,12,13,20,21,22,23,30,31,32,33,"
  L1 = Array("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")
  L2 = Array("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")
  L3 = Array("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")
  aLoai = Array("", L1, L2, L3)
  S = Split("," & iStr, ",")
  For j = 1 To UBound(S)
    c = Int(InStr(1, aDK, "," & S(j) & ",") / 3)
    If c > 0 Then
      k = k + 1
      ReDim Preserve Res(1 To k)
      Res(k) = aLoai(iLoai)(c - 1)
    End If
  Next j
  DEF = Join(Res, "; ")
End Function
 
Upvote 0
Cảm ơn ban @batman1 @SA_DQ @HieuCD và tất cả các bạn trên diễn đàn
Chỉ cần test với dữ liệu thực thì biết thôi chứ cần gì phải hỏi.

Nếu có kinh nghiệm thì nhìn

Res(k) = Replace(aLoai(iLoai), "1", c)

cũng đủ hiểu.
Trời ạ, mình đã bảo là không hiểu code nên không biết đúng sai (Chỉ thấy kết quả đúng thì mình ngộ nhận là đúng thôi)
(1) Thiết nghĩ bạn có thể đưa phần bạn đã rút gọn Code để mọi người & trong đó có mình được chiêm nghiệm được không & thay mặt cho những người đang quan tâm xin cảm ơn bạn trước

(2) Bạn có thể tự thử để hiểu mệnh đề đó mà, bằng nhiều cách chọc ngoái của bạn mà!
Bạn @SA_DQ xem giúp mình rút gọn code như này có đúng lý thuyết không bạn nhé.
Liệu có rút gọn được bước nào nữa không?
 

File đính kèm

  • Thay thế dạng mảng.xlsb
    28.5 KB · Đọc: 7
Upvote 0
Trời ạ, mình đã bảo là không hiểu code nên không biết đúng sai (Chỉ thấy kết quả đúng thì mình ngộ nhận là đúng thôi)
Bạn nói dữ liệu của bạn không theo qui luật. Vậy thì chạy code với dữ liệu không theo qui luật thì sẽ có kết quả sai chứ làm sao kết quả đúng được. Người ta nói là chạy với dữ liệu thực và NHÌN kết quả. Đâu cần phải hiểu code để biết kết quả sai hay đúng?

Bài #24 liệt kê tất cả các dữ liệu, và bài #27 liệt kê chỉ cho 1 mã 01.

Bây giờ sửa dữ liệu trong bài #7 thành:
Dòng cần thay thế 1

...
02=hehe,hichic,blala


Với dữ liệu "THỰC" như thế để chạy code bài #24 phải sửa thành
Const D2 As String = "hehe,hichic,blala":

Bài #27 không sửa gì vì chỉ dữ liệu cho 01 được liệt kê. Bây giờ nhập 2 công thức

Mã:
=ABC("01,02";1)

=UDF("01,02";1)

Có kết quả nào đúng không? Có kết quả nào sai không? Để biết đúng sai có cần hiểu code không?
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn @SA_DQ xem giúp mình rút gọn code như này có đúng lý thuyết không bạn nhé.
Liệu có rút gọn được bước nào nữa không?
Bạn hầu như không có rút gọn bằng cách đó; vì những tham biến D1, D2, D3, DA,. . . . bạn chưa nhập trị cho chúng; Hay bạn định bắt chúng lấy trị trên trang tính hay thông qua các Name của trang??
 
Upvote 0
Bạn hầu như không có rút gọn bằng cách đó; vì những tham biến D1, D2, D3, DA,. . . . bạn chưa nhập trị cho chúng; Hay bạn định bắt chúng lấy trị trên trang tính??
Sao mình Test thử các kết quả đều đúng nhể? (Mình đã nói là mình không biết nguyên lý hoạt động của câu lệnh mà)
Mhưng kết quả cho ra rất đúng.
Bài đã được tự động gộp:

Bạn nói dữ liệu của bạn không theo qui luật. Vậy thì chạy code với dữ liệu không theo qui luật thì sẽ có kết quả sai chứ làm sao kết quả đúng được. Người ta nói là chạy với dữ liệu thực và NHÌN kết quả. Đâu cần phải hiểu code để biết kết quả sai hay đúng?

Bài #24 liệt kê tất cả các dữ liệu, và bài #27 liệt kê chỉ cho 1 mã 01.

Bây giờ sửa dữ liệu trong bài #7 thành:
Dòng cần thay thế 1

...
02=hehe,hichic,blala


Với dữ liệu "THỰC" như thế để chạy code bài #27 phải sửa thành
Const D2 As String = "hehe,hichic,blala":

Bài #27 không sửa gì vì chỉ dữ liệu cho 01 được liệt kê. Bây giờ nhập 2 công thức

Mã:
=ABC("01,02";1)

=UDF("01,02";1)

Có kết quả nào đúng không? Có kết quả nào sai không? Để biết đúng sai có cần hiểu code không?
hihi... cảm ơn bạn, à à thử bằng cách này
Để mình thử lại xem bạn @batman1 nhé.
 
Upvote 0
à,à, Vâng @batman1 bài 24 Của bạn @SA_DQ đúng nhưng bạn xem cái rút gọn lại code của mình có bị sai phạm cái gì không?
Tôi chỉ muốn ý thức cho bạn là code bài #31 chỉ đúng khi các mã 01, 02, ... có ĐÚNG 2 KÝ TỰ. Nếu các mã không có ĐÚNG 2 KÝ TỰ thì kết quả có thể sẽ sai. Cách kiểm tra:

- trong bài #24 và #31 những chỗ có 01, 02, 03 thì sửa thành 010, 020, 030 - tức mã bây giờ có 3 ký tự 010, 020, 030.
- chạy code
Mã:
=DEF("010,10";1)

=UDF("010,10";1)
của bài #24 và #31 thì chỉ kết quả bài #24 đúng.

Ý thức cho những người khác để nếu có trường hợp mã có <> 2 ký tự thì họ khỏi bị bất ngờ thôi. Còn tôi tin là bạn LUÔN LUÔN có mã 2 ký tự thôi.

Chuyện rút gọn bạn hỏi người khác cũng được mà. :D
 
Upvote 0
Web KT
Back
Top Bottom