Giúp em hàm tìm dữ liệu để thay thế sang dữ liệu khác (1 người xem)

  • Thread starter Thread starter lala_qn
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

lala_qn

Thành viên tiêu biểu
Tham gia
2/5/09
Bài viết
598
Được thích
17
Nghề nghiệp
chưa ổn định
chào a/c , e có sửa lại bài cho hoàn chỉnh hơn và up lại file vd8-b để a/c dễ hiểu nội dung e cần hơn ạ
trong file đính kèm cột A3 là dữ liệu cho sẵn
cột B2,C2,D2,E2,F2,G2,H2 là các list kí tự cho sẵn dùng để thay thế vào A3
cột B3,C3,D3,E3,F3,G3,H3 là kết quả e cần ạ, e có ghi nội dung cần làm ở đầu mỗi cột này,
nội dung của bài này là tìm dữ liệu này thay thế bằng dữ liệu cho sẵn khác, thực hiện ngẫu nhiên, gần giống với việc Find and Relace
e rất cần hàm này, nhờ a/c viết dùm e hàm gọn gàng và dễ hiểu với ạ
e cảm ơn a/c rất nhiều ạ !
 
Lần chỉnh sửa cuối:
Sắp đến tết e biết a/c nào cũng rất bận rộn công việc, e thật sự rất cần a/c giúp dùm e hàm này với ạ, e cảm ơn nhiều ạ!
 
Gửi file excel lên coi...
 
Gửi file excel lên coi...[/QUOTE
e định lấy ý tưởng dùng để áp dụng cho file khác, nên chưa có file cụ thể ạ

nội dung của bài này là tìm dữ liệu này thay thế dữ liệu khác, gần giống với việc "Find and Replace", nhưng "Find and Replace" ko thay thay thế đc đa dạng dữ liệu ngẫu nhiên mình cần ạ, thanks a !
 
Vậy khi nào có file thì tính
 
21.54.52.56=6 sao lại thành 21,54ˊ52.56-625

List kí tự 3: 0 , O gồm: số không và chữ cái O (trước chữ cái P trong bảng chữ cái) phải không?

Sao không nhập các điều kiện vào file excel?

List kí tự 2 có bao nhiêu ký tự thì sẽ có bấy nhiêu kết quả?

Giải thích quy luật: Tìm số 0 (trong dữ liệu cell 2) thay thế bằng “List kí tự 3” , thay thế theo chu kì tuần tự
 
21.54.52.56=6 sao lại thành 21,54ˊ52.56-625

List kí tự 3: 0 , O gồm: số không và chữ cái O (trước chữ cái P trong bảng chữ cái) phải không?

Sao không nhập các điều kiện vào file excel?

List kí tự 2 có bao nhiêu ký tự thì sẽ có bấy nhiêu kết quả?

Giải thích quy luật: Tìm số 0 (trong dữ liệu cell 2) thay thế bằng “List kí tự 3” , thay thế theo chu kì tuần tự
21.54.52.56=6 sao lại thành 21,54ˊ52.56-625, cái này e lập vd bằng tay nên sơ xuất sai a, đúng là 21.54.52.56=6 sao lại thành 21,54ˊ52.56-6 , e có sữa up lại file rùi a
List kí tự 3: 0 , O gồm: số không và chữ cái O (trước chữ cái P trong bảng chữ cái) phải không? , dạ đúng rùi a
Sao không nhập các điều kiện vào file excel? , e ko biết mô tả trong excel như thế nào nên mô tả các list kí tự lên trên này rùi đính kèm file vd8 lên a, a thông cảm cho e nhé
List kí tự 2 có bao nhiêu ký tự thì sẽ có bấy nhiêu kết quả? , dạ list 2 thay thế ngẫu nhiên ở từng cell nên ko cần chính xác có bao nhiêu kết quả a
Giải thích quy luật: Tìm số 0 (trong dữ liệu cell 2) thay thế bằng “List kí tự 3” , thay thế theo chu kì tuần tự, tức là theo thứ tự từ trái sang phải trong cell dữ liệu A2, thì chổ nào có số 0 nó sẽ thay thế theo quy luật là 0 O 0 O....... a ạ
thanks a !​



 
Sắp đến tết e biết a/c nào cũng rất bận rộn công việc, e thật sự rất cần a/c giúp dùm e hàm này với ạ, e cảm ơn nhiều ạ!
dùng công thức quá khó nên viết code hàm tự tạo
không tìm được mã của 4 ký tự đặc biệt, nên tạm bỏ qua các ký tự nầy
 

File đính kèm

dùng công thức quá khó nên viết code hàm tự tạo
không tìm được mã của 4 ký tự đặc biệt, nên tạm bỏ qua các ký tự nầy
a ơi, e dùng thử hàm =SUBSTITUTE(A2, ".", "‘") , thay thế thử lần lượt trong "List kí tự 1" e thấy các kí tự đều thực hiện dc a,

nếu khó, nhờ a viết dùm e 3 hàm chạy 3 cột, vì 3 phần tìm dữ liệu thay thế đều nội dung tìm khác nhau,

Lúc này cột B2 lấy thực hiện nhiệm vụ "List kí tự 1" , sau đó C2 lấy dữ liệu B2 thực hiện nhiệm vụ "List kí tự 2", cuối cùng cột D2 lấy C2 thực hiện nhiệm vụ "List kí tự 3"

nhờ a viết dùm e nội dung hàm như thế này cũng dc a, thanks a !

 
Lần chỉnh sửa cuối:

a ơi, e dùng thử hàm =SUBSTITUTE(A2, ".", "‘") , thay thế thử lần lượt trong "List kí tự 1" e thấy các kí tự đều thực hiện dc a,

nếu khó, nhờ a viết dùm e 3 hàm chạy 3 cột, vì 3 phần tìm dữ liệu thay thế đều nội dung tìm khác nhau,

Lúc này cột B2 lấy thực hiện nhiệm vụ "List kí tự 1" , sau đó C2 lấy dữ liệu B2 thực hiện nhiệm vụ "List kí tự 2", cuối cùng cột D2 lấy C2 thực hiện nhiệm vụ "List kí tự 3"

nhờ a viết dùm e nội dung hàm như thế này cũng dc a, thanks a !

chỉ làm cho 1 ô A2, nếu làm cho nhiều ô thì tạo thêm các cột tương tự
 

File đính kèm

chỉ làm cho 1 ô A2, nếu làm cho nhiều ô thì tạo thêm các cột tương tự
e cảm ơn a đã rất nhiệt tình giúp đỡ e ạ ! vì dữ liệu e cần tạo ra ngẫu nhiêu rất nhiều ạ, nên nhờ a viết dùm e theo file vd8-b e đính kèm dùm để e dễ chỉnh sữa và tạo file
Điều kiện cũ của List 1 là: Tìm dấu chấm (trong dữ liệu cell 2) thay thế bằng “List kí tự 1” , thay thế ngẫu nhiên ko lặp lại trong 1 chu kỳ của “List kí tự 1”
nếu khó thì nhờ a viêt hàm thay thế dữ liệu ngẫu nhiên ở list 1 ko cần fai giới hạn như ở điều kiện cũ ạ
cảm ơn a rất nhiều ạ !
 

File đính kèm

e cảm ơn a đã rất nhiệt tình giúp đỡ e ạ ! vì dữ liệu e cần tạo ra ngẫu nhiêu rất nhiều ạ, nên nhờ a viết dùm e theo file vd8-b e đính kèm dùm để e dễ chỉnh sữa và tạo file
Điều kiện cũ của List 1 là: Tìm dấu chấm (trong dữ liệu cell 2) thay thế bằng “List kí tự 1” , thay thế ngẫu nhiên ko lặp lại trong 1 chu kỳ của “List kí tự 1”
nếu khó thì nhờ a viêt hàm thay thế dữ liệu ngẫu nhiên ở list 1 ko cần fai giới hạn như ở điều kiện cũ ạ
cảm ơn a rất nhiều ạ !
kiểu nầy mình không làm được
 
nhập giá trị vào cột A, copy tất cả các cột có màu xuống, kết quả ở cột B
dạ cảm ơn a nhiều ạ, nhưng chưa ưng ý lắm, cố gắn giúp e hàm ngắn gọn nhẹ hơn với a nhé , e mới sữa lại nội dung bài và up vd8-b lên cụ thể hơn ạ !
 
không còn cách nào, đành dùng hạ sách!!!
e có chạy thử hàm của a, kết quả ok, nhưng tạo thử 20.000 dữ liệu mỗi cột thì nặng khủng khiếp a, lưu file sau khi mở lên cũng rất nặng, mở rất lâu a, nếu dùng VBA thì nhẹ hơn nhiều ko a nhỉ ?
 
e có chạy thử hàm của a, kết quả ok, nhưng tạo thử 20.000 dữ liệu mỗi cột thì nặng khủng khiếp a, lưu file sau khi mở lên cũng rất nặng, mở rất lâu a, nếu dùng VBA thì nhẹ hơn nhiều ko a nhỉ ?
bài nầy chỉ có VBA là tối ưu nhất, nhẹ file và đơn giản
bạn cần cột nào ghi rỏ mình sẹ viết lại đầy đủ ký tự đặc biệt hơn
 
bài nầy chỉ có VBA là tối ưu nhất, nhẹ file và đơn giản
bạn cần cột nào ghi rỏ mình sẹ viết lại đầy đủ ký tự đặc biệt hơn
gần tết công việc nhiều quá ko pm lại a kịp sory a nhé!
e gởi lại file đính kèm vd8-c có chút thay đổi nội dung để nhờ a viết dùm VBA cho tiện dùng hơn ạ,
Trong fiile e cần kết quả ở cột H , I , J , K với điều kiện sau ạ:
Kết quả 1:
+ tìm dấu chấm thay thế ngẫu nhiên bằng list kí tự 1 (cột B)
+ tìm số 0 thay thế ngẫu nhiên bằng list kí tự 2 (cột C)
+ tìm dấu "=" thay thế bằng list kí tự 4 (cột E), chọn ngẫu nhiên 1 kí tự ở list 4 rùi thay vào đồng loạt trong dữ liệu A2
Kết quả 2:
+ tìm dấu chấm thay thế ngẫu nhiên bằng list kí tự 1 (cột B)
+ tìm số 0 thay thế ngẫu nhiên bằng list kí tự 3 (cột D)
+ tìm dấu "=" thay thế bằng list kí tự 4 (cột E), chọn ngẫu nhiên 1 kí tự ở list 4 rùi thay vào đồng loạt trong dữ liệu A2
Kết quả 3:
+ tìm dấu chấm thay thế ngẫu nhiên bằng list kí tự 1 (cột B)
+ tìm số 0 thay thế ngẫu nhiên bằng list kí tự 3 (cột D)
+ tìm dấu "=" thay thế ngẫu nhiên bằng list kí tự 5 (cột F)
Kết quả 4:
+ tìm dấu chấm thay thế ngẫu nhiên bằng list kí tự 6 (cột G)
+ tìm số 0 thay thế ngẫu nhiên bằng list kí tự 3 (cột D)
+ tìm dấu "=" thay thế ngẫu nhiên bằng list kí tự 5 (cột F)
e cảm ơn a nhiều ạ !!!
 

File đính kèm

Lần chỉnh sửa cuối:
gần tết công việc nhiều quá ko pm lại a kịp sory a nhé!
e gởi lại file đính kèm vd8-c có chút thay đổi nội dung để nhờ a viết dùm VBA cho tiện dùng hơn ạ,
Trong fiile e cần kết quả ở cột H , I , J , K với điều kiện sau ạ:
Kết quả 1:
+ tìm dấu chấm thay thế ngẫu nhiên bằng list kí tự 1 (cột B)
+ tìm số 0 thay thế ngẫu nhiên bằng list kí tự 2 (cột C)
+ tìm dấu "=" thay thế bằng list kí tự 4 (cột E), chọn ngẫu nhiên 1 kí tự ở list 4 rùi thay vào đồng loạt trong dữ liệu A2
Kết quả 2:
+ tìm dấu chấm thay thế ngẫu nhiên bằng list kí tự 1 (cột B)
+ tìm số 0 thay thế ngẫu nhiên bằng list kí tự 3 (cột D)
+ tìm dấu "=" thay thế bằng list kí tự 4 (cột E), chọn ngẫu nhiên 1 kí tự ở list 4 rùi thay vào đồng loạt trong dữ liệu A2
Kết quả 3:
+ tìm dấu chấm thay thế ngẫu nhiên bằng list kí tự 1 (cột B)
+ tìm số 0 thay thế ngẫu nhiên bằng list kí tự 3 (cột D)
+ tìm dấu "=" thay thế ngẫu nhiên bằng list kí tự 5 (cột F)
Kết quả 4:
+ tìm dấu chấm thay thế ngẫu nhiên bằng list kí tự 6 (cột G)
+ tìm số 0 thay thế ngẫu nhiên bằng list kí tự 3 (cột D)
+ tìm dấu "=" thay thế ngẫu nhiên bằng list kí tự 5 (cột F)
e cảm ơn a nhiều ạ !!!
bấm ngôi sao chạy code
 

File đính kèm

a ơi lúc sáng e tưởng a chưa xem vd e up, nên e có chỉnh sửa lại vd8-c , nhờ a xem viết thêm hàm dùm e trong vd8-c dùm e với ạ, cảm ơn a nhiều ạ !
chạy code
Mã:
Sub ThayKT()
Dim Rng As Range, Arr(), i As Long, k As Integer, T1 As String, T2 As String, T3
Dim L11 As String, L12 As String, L21 As String, L22 As String, L31 As String, L32 As String
If Range("A65500").End(xlUp).Row < 2 Then Exit Sub
Set Rng = Range("A2:A" & Range("A65500").End(xlUp).Row)
ReDim Arr(1 To Rng.Rows.Count, 1 To 4)
L11 = Range("B2").Value:      L12 = Range("G2").Value
L21 = Range("C2").Value:      L22 = Range("D2").Value
L31 = Range("E2").Value:      L32 = Range("f2").Value
L32 = Replace(Replace(Replace(Replace(L32, ", ", ","), " ,", ""), Chr(148), ""), Chr(147), "")
L12 = Replace(Replace(Replace(Replace(L12, ",", "a", 1, 1), ",", "b", 1, 1), ",", "a", 1, 1), "b", ",", 1, 1)
L12 = Replace(Replace(Replace(Replace(L12, ", ", ","), " ,", ""), Chr(148), ""), Chr(147), "")
L12 = Replace(Replace(L12, ",", ";"), "a", ",")
T3 = Split(L32, ",")
T4 = Split(L12, ";")
For i = 1 To UBound(Arr)
  Arr(i, 1) = Rng(i, 1):    Arr(i, 2) = Rng(i, 1)
  Arr(i, 3) = Rng(i, 1):    Arr(i, 4) = Rng(i, 1)
  T1 = Mid(L31, Int(Len(L31) * Rnd() + 1), 1)
  T2 = Mid(L31, Int(Len(L31) * Rnd() + 1), 1)
  For k = 1 To Len(Arr(i, 1))
    If Mid(Rng(i, 1), k, 1) = "." Then
      Mid(Arr(i, 1), k, 1) = Mid(L11, Int(Len(L11) * Rnd() + 1), 1)
      Mid(Arr(i, 2), k, 1) = Mid(L11, Int(Len(L11) * Rnd() + 1), 1)
      Mid(Arr(i, 3), k, 1) = Mid(L11, Int(Len(L11) * Rnd() + 1), 1)
    ElseIf Mid(Rng(i, 1), k, 1) = "0" Then
      Mid(Arr(i, 1), k, 1) = Mid(L21, Int(Len(L21) * Rnd() + 1), 1)
      Mid(Arr(i, 2), k, 1) = Mid(L22, Int(Len(L22) * Rnd() + 1), 1)
      Mid(Arr(i, 3), k, 1) = Mid(L22, Int(Len(L22) * Rnd() + 1), 1)
      Mid(Arr(i, 4), k, 1) = Mid(L22, Int(Len(L22) * Rnd() + 1), 1)
    ElseIf Mid(Rng(i, 1), k, 1) = "=" Then
      Mid(Arr(i, 1), k, 1) = T1
      Mid(Arr(i, 2), k, 1) = T2
    End If
  Next k
  For k = 1 To Len(Arr(i, 3))
    If Mid(Arr(i, 3), k, 1) = "=" Then
      Arr(i, 3) = Replace(Arr(i, 3), "=", T3(Int((UBound(T3) + 1) * Rnd())), 1, 1)
    End If
  Next k
  For k = 1 To Len(Arr(i, 4))
    If Mid(Arr(i, 4), k, 1) = "=" Then
      Arr(i, 4) = Replace(Arr(i, 4), "=", T3(Int((UBound(T3) + 1) * Rnd())), 1, 1)
    End If
  Next k
  For k = 1 To Len(Arr(i, 4))
    If Mid(Arr(i, 4), k, 1) = "." Then
      Arr(i, 4) = Replace(Arr(i, 4), ".", T4(Int((UBound(T4) + 1) * Rnd())), 1, 1)
    End If
  Next k
Next i
Range("H2").Resize(UBound(Arr), 4) = Arr
Erase Arr: Set Rng = Nothing
End Sub
 
chạy code
Mã:
Sub ThayKT()
Dim Rng As Range, Arr(), i As Long, k As Integer, T1 As String, T2 As String, T3
Dim L11 As String, L12 As String, L21 As String, L22 As String, L31 As String, L32 As String
If Range("A65500").End(xlUp).Row < 2 Then Exit Sub
Set Rng = Range("A2:A" & Range("A65500").End(xlUp).Row)
ReDim Arr(1 To Rng.Rows.Count, 1 To 4)
L11 = Range("B2").Value:      L12 = Range("G2").Value
L21 = Range("C2").Value:      L22 = Range("D2").Value
L31 = Range("E2").Value:      L32 = Range("f2").Value
L32 = Replace(Replace(Replace(Replace(L32, ", ", ","), " ,", ""), Chr(148), ""), Chr(147), "")
L12 = Replace(Replace(Replace(Replace(L12, ",", "a", 1, 1), ",", "b", 1, 1), ",", "a", 1, 1), "b", ",", 1, 1)
L12 = Replace(Replace(Replace(Replace(L12, ", ", ","), " ,", ""), Chr(148), ""), Chr(147), "")
L12 = Replace(Replace(L12, ",", ";"), "a", ",")
T3 = Split(L32, ",")
T4 = Split(L12, ";")
For i = 1 To UBound(Arr)
  Arr(i, 1) = Rng(i, 1):    Arr(i, 2) = Rng(i, 1)
  Arr(i, 3) = Rng(i, 1):    Arr(i, 4) = Rng(i, 1)
  T1 = Mid(L31, Int(Len(L31) * Rnd() + 1), 1)
  T2 = Mid(L31, Int(Len(L31) * Rnd() + 1), 1)
  For k = 1 To Len(Arr(i, 1))
    If Mid(Rng(i, 1), k, 1) = "." Then
      Mid(Arr(i, 1), k, 1) = Mid(L11, Int(Len(L11) * Rnd() + 1), 1)
      Mid(Arr(i, 2), k, 1) = Mid(L11, Int(Len(L11) * Rnd() + 1), 1)
      Mid(Arr(i, 3), k, 1) = Mid(L11, Int(Len(L11) * Rnd() + 1), 1)
    ElseIf Mid(Rng(i, 1), k, 1) = "0" Then
      Mid(Arr(i, 1), k, 1) = Mid(L21, Int(Len(L21) * Rnd() + 1), 1)
      Mid(Arr(i, 2), k, 1) = Mid(L22, Int(Len(L22) * Rnd() + 1), 1)
      Mid(Arr(i, 3), k, 1) = Mid(L22, Int(Len(L22) * Rnd() + 1), 1)
      Mid(Arr(i, 4), k, 1) = Mid(L22, Int(Len(L22) * Rnd() + 1), 1)
    ElseIf Mid(Rng(i, 1), k, 1) = "=" Then
      Mid(Arr(i, 1), k, 1) = T1
      Mid(Arr(i, 2), k, 1) = T2
    End If
  Next k
  For k = 1 To Len(Arr(i, 3))
    If Mid(Arr(i, 3), k, 1) = "=" Then
      Arr(i, 3) = Replace(Arr(i, 3), "=", T3(Int((UBound(T3) + 1) * Rnd())), 1, 1)
    End If
  Next k
  For k = 1 To Len(Arr(i, 4))
    If Mid(Arr(i, 4), k, 1) = "=" Then
      Arr(i, 4) = Replace(Arr(i, 4), "=", T3(Int((UBound(T3) + 1) * Rnd())), 1, 1)
    End If
  Next k
  For k = 1 To Len(Arr(i, 4))
    If Mid(Arr(i, 4), k, 1) = "." Then
      Arr(i, 4) = Replace(Arr(i, 4), ".", T4(Int((UBound(T4) + 1) * Rnd())), 1, 1)
    End If
  Next k
Next i
Range("H2").Resize(UBound(Arr), 4) = Arr
Erase Arr: Set Rng = Nothing
End Sub
dạ e thấy có 1 lỗi ở kết quả 4 a, lỗi phần điền kiện dùng List kít tự 6 thay vào để có Kết quả 4, e thấy dữ liệu thay vào có cái bị như thế này a
vd: 135.056.645=100 , ra kết quả 4: 135O56, 645-1ΘΘ
lúc này kết quả bị dính liền mất dấu thay thế a, ko biết bị lỗi gì a nhỉ ?
với lại trong List kí tự 5 chỉ có ”_”, ” _”, ”_ ” , e thấy kết quả có thêm ” _ ”
a xem sửa lại giúp e với ạ, thanks a ạ!
 
Lần chỉnh sửa cuối:
dạ e thấy có 1 lỗi ở kết quả 4 a, lỗi phần điền kiện dùng List kít tự 6 thay vào để có Kết quả 4, e thấy dữ liệu thay vào có cái bị như thế này a
vd: 135.056.645=100 , ra kết quả 4: 135O56, 645-1ΘΘ
lúc này kết quả bị dính liền mất dấu thay thế a, ko biết bị lỗi gì a nhỉ ?
với lại trong List kí tự 5 chỉ có ”_”, ” _”, ”_ ” , e thấy kết quả có thêm ” _ ”
a xem sửa lại giúp e với ạ, thanks a ạ!
file của mình không bị như lổi trên
bạn bấm ngôi sao để chạy code và kiểm tra lại, trong file mình dùng hàm Find để kiểm tra ký tự lạ
 

File đính kèm

file của mình không bị như lổi trên
bạn bấm ngôi sao để chạy code và kiểm tra lại, trong file mình dùng hàm Find để kiểm tra ký tự lạ
đầu năm mới e xin chúc a HieuCD cùng toàn thể anh chị GPEC mạnh khoẻ an khang thịnh vượng - vạn sự như ý - may mắn - thành công trong công việc ạ !
e mới chạy thử lại thì thấy có mấy kết quả hơi khác ở kết quả 4 (bên cột kết quả 3 e thấy cũng có bị tương tự, các ảnh chụp ở dưới e chụp ở cột kết quả 4 a nhé)
ảnh 1 " — " (bên list kí tự 5 ko có)
ảnh 2 " / " (bên list kí tự 5 ko có)
ảnh 3 "763ˊ45ˊ 64´ 82~ 9" (bên list kí tự 6 ko có)
nhờ a xem lại giúp với ạ,
cảm ơn a nhiều nhé !
 
Lần chỉnh sửa cuối:
file của mình không bị như lổi trên
bạn bấm ngôi sao để chạy code và kiểm tra lại, trong file mình dùng hàm Find để kiểm tra ký tự lạ
a ơi, e thấy dùng VBA chạy dữ liệu nhiều e thấy cũng nặng, với lại e vào nhìn code ko biết đường sữa để tiện dùng
nên e nghĩ chuyển sang dùng hàm tiện hơn, e có tạo lại file dựa trên hàm a tạo cho e gần xong, còn 2 hàm ở cột G3 và H3
Nhờ a tạo dùm e 2 cột này với ạ, e cảm ơn a nhiều nhé !!!
 

File đính kèm

a ơi, e thấy dùng VBA chạy dữ liệu nhiều e thấy cũng nặng, với lại e vào nhìn code ko biết đường sữa để tiện dùng
nên e nghĩ chuyển sang dùng hàm tiện hơn, e có tạo lại file dựa trên hàm a tạo cho e gần xong, còn 2 hàm ở cột G3 và H3
Nhờ a tạo dùm e 2 cột này với ạ, e cảm ơn a nhiều nhé !!!

Cái đỏ đỏ này chắc phải liên hệ với ... Vinamilk của Việt Nam, nếu không thì phải liên hệ các công ty nước ngoài a e... năm 2017.
 
Lần chỉnh sửa cuối:
Cái đỏ đỏ này chắc phải liên hệ với ... Vinamilk của Việt Nam, nếu không thì phải liên hệ các công ty nước ngoài a e... năm 2017.
vinamiik ko bán loại đường sữa này nên e mới khổ thế này a, giúp e với a nhé , hic
 
Xin hỏi chủ bài đăng, rằng có khi nào bạn cần fép thay thế ngược lại không?

Mường tượng như bạn đang iêu cầu mã hóa 1 đoạn văn bản;

Vậy sẽ fải giải mã đoạn văn bản đã mã hóa không?
 
a ơi, e thấy dùng VBA chạy dữ liệu nhiều e thấy cũng nặng, với lại e vào nhìn code ko biết đường sữa để tiện dùng
nên e nghĩ chuyển sang dùng hàm tiện hơn, e có tạo lại file dựa trên hàm a tạo cho e gần xong, còn 2 hàm ở cột G3 và H3
Nhờ a tạo dùm e 2 cột này với ạ, e cảm ơn a nhiều nhé !!!
dùng hàm Excel không đơn giản như bạn nghĩ, chỉ có khả năng dùng code VBA
 
đầu năm mới e xin chúc a HieuCD cùng toàn thể anh chị GPEC mạnh khoẻ an khang thịnh vượng - vạn sự như ý - may mắn - thành công trong công việc ạ !
e mới chạy thử lại thì thấy có mấy kết quả hơi khác ở kết quả 4 (bên cột kết quả 3 e thấy cũng có bị tương tự, các ảnh chụp ở dưới e chụp ở cột kết quả 4 a nhé)
ảnh 1 " — " (bên list kí tự 5 ko có)
ảnh 2 " / " (bên list kí tự 5 ko có)
ảnh 3 "763ˊ45ˊ 64´ 82~ 9" (bên list kí tự 6 ko có)
nhờ a xem lại giúp với ạ,
cảm ơn a nhiều nhé !
bạn dùng code mới trên tập vd8-c(1).xlsb
Mã:
Sub ThayKT()
Dim Rng As Range, Arr(), i As Long, k As Integer, T1 As String, T2 As String, T3, T4, Tmp1 As String, Tmp2 As String, Tmp3 As String, Tmp4 As String
Dim L11 As String, L12 As String, L21 As String, L22 As String, L31 As String, L32 As String
If Range("A65500").End(xlUp).Row < 2 Then Exit Sub
Set Rng = Range("A2:A" & Range("A65500").End(xlUp).Row)
ReDim Arr(1 To Rng.Rows.Count, 1 To 4)
L11 = Range("B2").Value:      L12 = Range("G2").Value
L21 = Range("C2").Value:      L22 = Range("D2").Value
L31 = Range("E2").Value:      L32 = Range("f2").Value
L32 = Replace(Replace(Replace(Replace(Replace(L32, " , ", ","), ", ", ","), " ,", ""), Chr(148), ""), Chr(147), "")
L12 = Replace(Replace(Replace(Replace(L12, ",", "a", 1, 1), ",", "b", 1, 1), ",", "a", 1, 1), "b", ",", 1, 1)
L12 = Replace(Replace(Replace(Replace(Replace(L12, " , ", ","), ", ", ","), " ,", ""), Chr(148), ""), Chr(147), "")
L12 = Replace(Replace(L12, ",", ";"), "a", ",")
T3 = Split(L32, ",")
T4 = Split(L12, ";")
Randomize
For i = 1 To UBound(Arr)
  T1 = Mid(L31, Int(Len(L31) * Rnd() + 1), 1)
  T2 = Mid(L31, Int(Len(L31) * Rnd() + 1), 1)
  Tmp1 = "":  Tmp2 = "":  Tmp3 = "":  Tmp4 = ""
  For k = 1 To Len(Rng(i, 1))
    If Mid(Rng(i, 1), k, 1) = "." Then
      Tmp1 = Tmp1 & Mid(L11, Int(Len(L11) * Rnd() + 1), 1)
      Tmp2 = Tmp2 & Mid(L11, Int(Len(L11) * Rnd() + 1), 1)
      Tmp3 = Tmp3 & Mid(L11, Int(Len(L11) * Rnd() + 1), 1)
      Tmp4 = Tmp4 & T4(Int((UBound(T4) + 1) * Rnd()))
    ElseIf Mid(Rng(i, 1), k, 1) = "0" Then
      Tmp1 = Tmp1 & Mid(L21, Int(Len(L21) * Rnd() + 1), 1)
      Tmp2 = Tmp2 & Mid(L22, Int(Len(L22) * Rnd() + 1), 1)
      Tmp3 = Tmp3 & Mid(L22, Int(Len(L22) * Rnd() + 1), 1)
      Tmp4 = Tmp4 & Mid(L22, Int(Len(L22) * Rnd() + 1), 1)
    ElseIf Mid(Rng(i, 1), k, 1) = "=" Then
      Tmp1 = Tmp1 & T1
      Tmp2 = Tmp2 & T2
      Tmp3 = Tmp3 & T3(Int((UBound(T3) + 1) * Rnd()))
      Tmp4 = Tmp4 & T3(Int((UBound(T3) + 1) * Rnd()))
    Else
      Tmp1 = Tmp1 & Mid(Rng(i, 1), k, 1)
      Tmp2 = Tmp2 & Mid(Rng(i, 1), k, 1)
      Tmp3 = Tmp3 & Mid(Rng(i, 1), k, 1)
      Tmp4 = Tmp4 & Mid(Rng(i, 1), k, 1)
    End If
  Next k
  Arr(i, 1) = Tmp1: Arr(i, 2) = Tmp2
  Arr(i, 3) = Tmp3: Arr(i, 4) = Tmp4
Next i
Range("H2").Resize(UBound(Arr), 4) = Arr
Erase Arr: Set Rng = Nothing
End Sub
 
bạn dùng code mới trên tập vd8-c(1).xlsb
Mã:
Sub ThayKT()
Dim Rng As Range, Arr(), i As Long, k As Integer, T1 As String, T2 As String, T3, T4, Tmp1 As String, Tmp2 As String, Tmp3 As String, Tmp4 As String
Dim L11 As String, L12 As String, L21 As String, L22 As String, L31 As String, L32 As String
If Range("A65500").End(xlUp).Row < 2 Then Exit Sub
Set Rng = Range("A2:A" & Range("A65500").End(xlUp).Row)
ReDim Arr(1 To Rng.Rows.Count, 1 To 4)
L11 = Range("B2").Value:      L12 = Range("G2").Value
L21 = Range("C2").Value:      L22 = Range("D2").Value
L31 = Range("E2").Value:      L32 = Range("f2").Value
L32 = Replace(Replace(Replace(Replace(Replace(L32, " , ", ","), ", ", ","), " ,", ""), Chr(148), ""), Chr(147), "")
L12 = Replace(Replace(Replace(Replace(L12, ",", "a", 1, 1), ",", "b", 1, 1), ",", "a", 1, 1), "b", ",", 1, 1)
L12 = Replace(Replace(Replace(Replace(Replace(L12, " , ", ","), ", ", ","), " ,", ""), Chr(148), ""), Chr(147), "")
L12 = Replace(Replace(L12, ",", ";"), "a", ",")
T3 = Split(L32, ",")
T4 = Split(L12, ";")
Randomize
For i = 1 To UBound(Arr)
  T1 = Mid(L31, Int(Len(L31) * Rnd() + 1), 1)
  T2 = Mid(L31, Int(Len(L31) * Rnd() + 1), 1)
  Tmp1 = "":  Tmp2 = "":  Tmp3 = "":  Tmp4 = ""
  For k = 1 To Len(Rng(i, 1))
    If Mid(Rng(i, 1), k, 1) = "." Then
      Tmp1 = Tmp1 & Mid(L11, Int(Len(L11) * Rnd() + 1), 1)
      Tmp2 = Tmp2 & Mid(L11, Int(Len(L11) * Rnd() + 1), 1)
      Tmp3 = Tmp3 & Mid(L11, Int(Len(L11) * Rnd() + 1), 1)
      Tmp4 = Tmp4 & T4(Int((UBound(T4) + 1) * Rnd()))
    ElseIf Mid(Rng(i, 1), k, 1) = "0" Then
      Tmp1 = Tmp1 & Mid(L21, Int(Len(L21) * Rnd() + 1), 1)
      Tmp2 = Tmp2 & Mid(L22, Int(Len(L22) * Rnd() + 1), 1)
      Tmp3 = Tmp3 & Mid(L22, Int(Len(L22) * Rnd() + 1), 1)
      Tmp4 = Tmp4 & Mid(L22, Int(Len(L22) * Rnd() + 1), 1)
    ElseIf Mid(Rng(i, 1), k, 1) = "=" Then
      Tmp1 = Tmp1 & T1
      Tmp2 = Tmp2 & T2
      Tmp3 = Tmp3 & T3(Int((UBound(T3) + 1) * Rnd()))
      Tmp4 = Tmp4 & T3(Int((UBound(T3) + 1) * Rnd()))
    Else
      Tmp1 = Tmp1 & Mid(Rng(i, 1), k, 1)
      Tmp2 = Tmp2 & Mid(Rng(i, 1), k, 1)
      Tmp3 = Tmp3 & Mid(Rng(i, 1), k, 1)
      Tmp4 = Tmp4 & Mid(Rng(i, 1), k, 1)
    End If
  Next k
  Arr(i, 1) = Tmp1: Arr(i, 2) = Tmp2
  Arr(i, 3) = Tmp3: Arr(i, 4) = Tmp4
Next i
Range("H2").Resize(UBound(Arr), 4) = Arr
Erase Arr: Set Rng = Nothing
End Sub
Dạ e cảm ơn a nhé !!!
 
trước e có nhờ 1 anh viết dùm code cùng chủ đề này, nhưng gần đây e ko liên ko dc, e thì ko hiểu gì về VBA nên ko chỉnh dc code, trong file này còn mấy chổ cần chỉnh lại cho hoàn thiện bài
e nhờ a HieuCDxem code sữa dùm e để hoàn thiện hơn với ạ, e cảm ơn a ạ!
https://www.dropbox.com/s/jr5fnlm8uvt9q7h/file.ngau.nhien-GPE.xlsm?dl=0
trong file này có 2 sheet, sheet1 là file a ấy đã giúp, sheet2 là muốn hoàn thiện hơn ạ
ở sheet1 : e thấy cột C tìm số 0 thay thế 0OΘΟ , e F9 thì thấy có lúc bị mất hẳn kí tự cần thay thế, cột D,F,G,H,I cũng bị như C , cột J e test thử thì thấy tìm dc có 2 kí tự, chưa tìm dc 1 cụm từ để thay thế ạ
tại dữ liệu thay thế e hay đổi kiểu dữ liệu liên tục nên đặt ở ngoài cho tiện dùng, trong quá trình thay thế e muốn nhận diện kiểu kí tự chuẩn theo yêu cầu, nên e định đặt nó sẽ phân biệt các kiểu với nhau bằng dấu chấm phảy ; nên e đã làm sheet2 và sau này sẽ làm theo sheet2 hẳn, nhờ a sữa dùm sẽ phân biệt các kiểu dữ liệu thay thế là dấu ; hết a nhé (nội dung bài vẫn giống sheet1 hết nhé)
e cảm ơn a nhiều nhé !
 
Lần chỉnh sửa cuối:
trước e có nhờ 1 anh viết dùm code cùng chủ đề này, nhưng gần đây e ko liên ko dc, e thì ko hiểu gì về VBA nên ko chỉnh dc code, trong file này còn mấy chổ cần chỉnh lại cho hoàn thiện bài
e nhờ a HieuCDxem code sữa dùm e để hoàn thiện hơn với ạ, e cảm ơn a ạ!
https://www.dropbox.com/s/jr5fnlm8uvt9q7h/file.ngau.nhien-GPE.xlsm?dl=0
trong file này có 2 sheet, shee1 là file a ấy đã giúp, sheet2 là muốn hoàn thiện hơn ạ
ở sheet1 : e thấy cột C tìm số 0 thay thế 0OΘΟ , e F9 thì thấy có lúc bị mất hẳn kí tự cần thay thế, cột D,F,G,H,I cũng bị như C , cột J e test thử thì thấy tìm dc có 2 kí tự, chưa tìm dc 1 cụm từ để thay thế ạ
tại dữ liệu thay thế e hay đổi kiểu dữ liệu liên tục nên đặt ở ngoài cho tiện dùng, trong quá trình thay thế e muốn nhận diện kiểu kí tự chuẩn theo yêu cầu, nên e định đặt nó sẽ phân biệt các kiểu với nhau bằng dấu chấm phảy ; nên e đã làm sheet2 và sau này sẽ làm theo sheet2 hẳn, nhờ a sữa dùm sẽ phân biệt các kiểu dữ liệu thay thế là dấu ; hết a nhé (nội dung bài vẫn giống sheet1 hết nhé)
e cảm ơn a nhiều nhé !
bạn tìm 1 ký tự đặc biệt nào đó chắc chắn không trùng với ký tự thay thế để làm dấu ngăn cách như: @,$,a,b... gì đó và báo cho mình
 
bạn tìm 1 ký tự đặc biệt nào đó chắc chắn không trùng với ký tự thay thế để làm dấu ngăn cách như: @,$,a,b... gì đó và báo cho mình
dấu chấm phảy ; e hoàn toàn ko dùng đến a, sd dấu ; để ngăn cách a nhé , ở sheet2 e có soạn sẵn sd dấu ; để ngăn cách đó ạ, thanks a !
 
Lần chỉnh sửa cuối:
tạo cho bạn 4 hàm, xem file để tìm hiểu cách dùng từng hàm
 

File đính kèm

Lần chỉnh sửa cuối:
a HieuCD ơi e thấy trong này còn 1 lỗi nhỏ ạ,
https://www.dropbox.com/s/6hpgvnbq0odrscz/file.ngau.nhien-GPE.xlsm?dl=0
trong file này e thấy kí tự cuối cùng của cell nhập dữ liệu C4 và kí tự cuối cùng của kết quả cell J4 bị mất đi 1 kí tự,
a xem thử nó bị sao ạ, cảm ơn a !
bạn chỉnh lại code
Mã:
Function PlaceOrder(SourceText, SearchLetter, ReplaceOrderText, DeliText)
Dim i As Long, k As Long, LenSource As Long, ReplaceArr
Dim Result As String
LenSource = Len(SourceText)
ReplacArr = Split(ReplaceOrderText, DeliText)
For i = 1 To LenSource
    If Mid(SourceText, i, 1) = SearchLetter Then
        k = IIf(k <= R, k, 0)
        Result = Result & ReplacArr(k)
        k = k + 1
    Else
        Result = Result & Mid(SourceText, i, 1)
    End If
Next
PlaceOrder = Result
End Function


Function PlaceRandOne(SourceText, SearchLetter, ReplaceRandText, DeliText)
Dim i As Long, k As Long, LenSource As Long, ReplaceArr
Dim Result As String
Application.Volatile (True)
LenSource = Len(SourceText)
ReplacArr = Split(ReplaceRandText, DeliText)
Randomize
k = Rnd() * UBound(ReplacArr)
For i = 1 To LenSource
    If Mid(SourceText, i, 1) = SearchLetter Then
        Result = Result & ReplacArr(k)
    Else
        Result = Result & Mid(SourceText, i, 1)
    End If
Next
PlaceRandOne = Result
End Function


Function PlaceRandPart(SourceText, SearchLetter, ReplaceRandText, DeliText)
Dim i As Long, k As Long, LenSource As Long, R As Long, ReplaceArr
Dim Result As String
Application.Volatile (True)
LenSource = Len(SourceText)
ReplacArr = Split(ReplaceRandText, DeliText)
R = UBound(ReplacArr)
Randomize
k = Rnd() * R
For i = 1 To LenSource
    If Mid(SourceText, i, 1) = SearchLetter Then
        Result = Result & ReplacArr(k)
    Else
        Result = Result & Mid(SourceText, i, 1)
    End If
    If Mid(SourceText, i, 1) = Chr(10) Then k = Rnd() * R
Next
PlaceRandPart = Result
End Function


Function PlaceRand(SourceText, SearchLetter, ReplaceRandText, DeliText)
Dim i As Long, j As Byte, k As Long, LenSource As Long, LenSearch As Long, R As Long, ReplaceArr
Dim Result As String
Application.Volatile (True)
LenSource = Len(SourceText)
LenSearch = Len(SearchLetter)
ReplacArr = Split(ReplaceRandText, DeliText)
R = UBound(ReplacArr)
For i = 1 To LenSource - LenSearch + 1
    If Mid(SourceText, i, LenSearch) = SearchLetter Then
        Randomize
        k = Rnd() * R
        Result = Result & ReplacArr(k)
        i = i + LenSearch - 1
    Else
        Result = Result & Mid(SourceText, i, 1)
        If i = LenSource - LenSearch + 1 Then
          For j = i + 1 To LenSource
            Result = Result & Mid(SourceText, j, 1)
          Next j
        End If
    End If
Next
PlaceRand = Result
End Function
 
e vào up lại code nó cứ bảo "out of memory" ko làm dc gì , là bị gì a nhỉ ?
 
HieuCD
user-offline.png
e up dc code rùi, kiểm tra thấy ok hết rùi, cảm ơn nhiều nhé !
 
e hỏi thêm tí a, ở mỗi cell dữ liệu có chia nhiều dòng , vậy ta có đảo ngẫu nhiêu các dòng dữ liệu ở tron các cell đó ko a ?
nếu đc nhờ a đưa ra cột K và có thể tùy chỉnh đảo 5,6,7.... số dòng cần thiết, cảm ơn a !
https://www.dropbox.com/s/xm4hd702dxr3x4x/file.ngau.nhien-GPE.xlsm?dl=0
 
e hỏi thêm tí a, ở mỗi cell dữ liệu có chia nhiều dòng , vậy ta có đảo ngẫu nhiêu các dòng dữ liệu ở tron các cell đó ko a ?
nếu đc nhờ a đưa ra cột K và có thể tùy chỉnh đảo 5,6,7.... số dòng cần thiết, cảm ơn a !
https://www.dropbox.com/s/xm4hd702dxr3x4x/file.ngau.nhien-GPE.xlsm?dl=0
bạn dùng Functuon
Mã:
Function RandRow(SourceText)
Dim Dic As Object, Arr(), Val As Variant, Tmp As Byte, k As Byte, R As Byte
Dim Result As String
Set Dic = CreateObject("scripting.dictionary")
Application.Volatile (True)
Val = Split(SourceText, Chr(10))
R = UBound(Val) + 1
If R = 1 Then Exit Function
ReDim Arr(1 To R)
Randomize
Do
  Tmp = Int(Rnd() * R)
  If Not Dic.exists(Tmp) Then
    k = k + 1
    Dic.Add Tmp, ""
    Arr(k) = Val(Tmp)
  End If
Loop Until k = R
RandRow = Join(Arr, Chr(10))
End Function
chỉnh lại dòng màu đỏ
Mã:
Function PlaceOrder(SourceText, SearchLetter, ReplaceOrderText, DeliText)
Dim i As Long, k As Long, LenSource As Long, ReplaceArr
Dim Result As String
LenSource = Len(SourceText)
ReplacArr = Split(ReplaceOrderText, DeliText)
For i = 1 To LenSource
    If Mid(SourceText, i, 1) = SearchLetter Then
[COLOR=#ff0000]        k = IIf(k <= UBound(ReplacArr), k, 0)[/COLOR]
        Result = Result & ReplacArr(k)
        k = k + 1
    Else
        Result = Result & Mid(SourceText, i, 1)
    End If
Next
PlaceOrder = Result
End Function
 
a HieuCD
user-online.png
cái này ko fai lúc nào e cũng cần đảo các dòng, nên có thể viết code rùi hàm đưa ra đảo 1 cột riêng nào đó ko a nhỉ, và trong hàm có thể tùy chỉnh đổi bao nhiêu dòng cũng dc
như vậy dc ko a nhỉ ?
 
a HieuCD
user-online.png
cái này ko fai lúc nào e cũng cần đảo các dòng, nên có thể viết code rùi hàm đưa ra đảo 1 cột riêng nào đó ko a nhỉ, và trong hàm có thể tùy chỉnh đổi bao nhiêu dòng cũng dc
như vậy dc ko a nhỉ ?
là Function nên rất linh hoạt, bạn đặt ở đâu hoặc đảo ô nào cũng được
đổi với số dòng bất kỳ qui định trước chưa tìm được cách
 
tức là thêm đoạn code này vào
Function RandRow(SourceText)Dim Dic As Object, Arr(), Val As Variant, Tmp As Byte, k As Byte, R As Byte
Dim Result As String
Set Dic = CreateObject("scripting.dictionary")
Application.Volatile (True)
Val = Split(SourceText, Chr(10))
R = UBound(Val) + 1
If R = 1 Then Exit Function
ReDim Arr(1 To R)
Randomize
Do
Tmp = Int(Rnd() * R)
If Not Dic.exists(Tmp) Then
k = k + 1
Dic.Add Tmp, ""
Arr(k) = Val(Tmp)
End If
Loop Until k = R
RandRow = Join(Arr, Chr(10)) End Function

rùi tìm dòng màu đỏ chỉnh code lại ak a
Function PlaceOrder(SourceText, SearchLetter, ReplaceOrderText, DeliText)Dim i As Long, k As Long, LenSource As Long, ReplaceArr
Dim Result As String
LenSource = Len(SourceText)
ReplacArr = Split(ReplaceOrderText, DeliText)
For i = 1 To LenSource
If Mid(SourceText, i, 1) = SearchLetter Then
k = IIf(k <= UBound(ReplacArr), k, 0)
Result = Result & ReplacArr(k)
k = k + 1
Else
Result = Result & Mid(SourceText, i, 1)
End If
Next
PlaceOrder = Result End Function
 
HieuCD dạ e thấy đảo ok đó a, tại ko để đảo tùy chọn số dòng mình cần nên e muốn hỏi thêm mình có thể viết cho nó đảo ngẩu nhiên tất cả các dòng giữ lại vị trí dòng đầu hoặc dòng cuối ko a ? thanks a !
 
Lần chỉnh sửa cuối:
HieuCD dạ e thấy đảo ok đó a, tại ko để đảo tùy chọn số dòng mình cần nên e muốn hỏi thêm mình có thể viết cho nó đảo ngẩu nhiên tất cả các dòng giữ lại vị trí dòng đầu hoặc dòng cuối ko a ? thanks a !
bạn liệt kê tất cả khả năng của yêu cầu đảo dòng như thế nào? lúc đó mới hình dung được cấu trúc nhập liệu các tham số của hàm trong công thức
 
bạn liệt kê tất cả khả năng của yêu cầu đảo dòng như thế nào? lúc đó mới hình dung được cấu trúc nhập liệu các tham số của hàm trong công thức
dạ e thấy đảo ngẫu nhiên các dòng như a viết là ok rùi ạ,
e nhờ a bổ sung vào trong hàm có thể tủy chỉnh dc 3 trường hợp như thế này ạ
1. Giữ dòng đầu còn lại đảo ngẩu nhiên tất cả các dòng
2. Giữ dòng cuối còn lại đảo ngẫu nhiên tất cả các dòng
3. Đảo ngẫu nhiên tất cả các dòng , thank a ạ!
 
dạ e thấy đảo ngẫu nhiên các dòng như a viết là ok rùi ạ,
e nhờ a bổ sung vào trong hàm có thể tủy chỉnh dc 3 trường hợp như thế này ạ
1. Giữ dòng đầu còn lại đảo ngẩu nhiên tất cả các dòng
2. Giữ dòng cuối còn lại đảo ngẫu nhiên tất cả các dòng
3. Đảo ngẫu nhiên tất cả các dòng , thank a ạ!
dùng code mới
Mã:
Function RandRow(SourceText, Optional Cot As Byte = 0)
Dim Dic As Object, Arr(), Val As Variant, Tmp As Byte, k As Byte, R As Byte, D As Byte
Dim Result As String
Set Dic = CreateObject("scripting.dictionary")
Application.Volatile (True)
Val = Split(SourceText, Chr(10))
R = UBound(Val) + 1
If R = 1 Then Exit Function
ReDim Arr(1 To R)
Randomize
If Cot > 0 Then
  If Cot = 1 Then
    k = 1:  Arr(k) = Val(Tmp):  D = 1
  Else
    Arr(R) = Val(R - 1)
    R = R - 1
  End If
End If
Do
  Tmp = Int(Rnd() * (R - D) + D)
  If Not Dic.exists(Tmp) Then
    k = k + 1
    Dic.Add Tmp, ""
    Arr(k) = Val(Tmp)
  End If
Loop Until k = R
RandRow = Join(Arr, Chr(10))
End Function
nhập công thức theo dạng
đảo tất cả dòng
=RandRow(A4,0)
=RandRow(A4)
đảo từ dòng 2 trở di
=RandRow(A4,1)
đảo từ dòng 1 tới dòng gần cuối
=RandRow(A4,2)
 
dùng code mới
Mã:
Function RandRow(SourceText, Optional Cot As Byte = 0)
Dim Dic As Object, Arr(), Val As Variant, Tmp As Byte, k As Byte, R As Byte, D As Byte
Dim Result As String
Set Dic = CreateObject("scripting.dictionary")
Application.Volatile (True)
Val = Split(SourceText, Chr(10))
R = UBound(Val) + 1
If R = 1 Then Exit Function
ReDim Arr(1 To R)
Randomize
If Cot > 0 Then
  If Cot = 1 Then
    k = 1:  Arr(k) = Val(Tmp):  D = 1
  Else
    Arr(R) = Val(R - 1)
    R = R - 1
  End If
End If
Do
  Tmp = Int(Rnd() * (R - D) + D)
  If Not Dic.exists(Tmp) Then
    k = k + 1
    Dic.Add Tmp, ""
    Arr(k) = Val(Tmp)
  End If
Loop Until k = R
RandRow = Join(Arr, Chr(10))
End Function
nhập công thức theo dạng
đảo tất cả dòng
=RandRow(A4,0)
=RandRow(A4)
đảo từ dòng 2 trở di
=RandRow(A4,1)
đảo từ dòng 1 tới dòng gần cuối
=RandRow(A4,2)
dạ ok hết rùi, làm phiền a quá, cảm ơn a rất nhiều ạ !
 
a HieuCD ơi , e có thêm ý tưởng nhờ a giúp thêm với ạ (cũng trong bộ code cũ)
cũng là chủ đề đảo ngẫu nhiên, e muốn gộp 2 ý này vào 1 hàm với ạ
1. Đảo ngẫu nhiên các dòng trong mỗi cell dữ liệu
1a. Giữ dòng đầu còn lại đảo ngẩu nhiên tất cả các dòng
1b. Giữ dòng cuối còn lại đảo ngẫu nhiên tất cả các dòng
1c. Đảo ngẫu nhiên tất cả các dòng
2. Lấy 3 dữ liệu ngẫu nhiên ở hàng K2 (hoặc ko lấy, hoặc 1, hoặc 2,3,4,5, .... đưa vào hàm để có thể chỉnh nhanh cho cả cột) thay thế ngẫu nhiên vào cột K4

e có vd ở cột K , nhờ a xem giúp e với a, cảm ơn a nhiều !
https://www.dropbox.com/s/oe3yzasot58ivgv/file.ngau.nhien-GPE.xlsm?dl=0
 
Lần chỉnh sửa cuối:
a HieuCD ơi , e có thêm ý tưởng nhờ a giúp thêm với ạ (cũng trong bộ code cũ)
cũng là chủ đề đảo ngẫu nhiên, e muốn gộp 2 ý này vào 1 hàm với ạ
1. Đảo ngẫu nhiên các dòng trong mỗi cell dữ liệu
1a. Giữ dòng đầu còn lại đảo ngẩu nhiên tất cả các dòng
1b. Giữ dòng cuối còn lại đảo ngẫu nhiên tất cả các dòng
1c. Đảo ngẫu nhiên tất cả các dòng
2. Lấy 3 dữ liệu ngẫu nhiên ở hàng K2 (hoặc ko lấy, hoặc 1, hoặc 2,3,4,5, .... đưa vào hàm để có thể chỉnh nhanh cho cả cột) thay thế ngẫu nhiên vào cột K4
e có vd ở cột K , nhờ a xem giúp e với a, cảm ơn a nhiều !
https://www.dropbox.com/s/oe3yzasot58ivgv/file.ngau.nhien-GPE.xlsm?dl=0
bạn xem công thức trong file để hiểu cách dùng, code nằm trong Module1
 

File đính kèm

Bài viết mới nhất

Back
Top Bottom