Nhờ anh chị giúp cách xếp danh sách tên theo dấu huyền sắc hỏi ngã nặng

Liên hệ QC

tuansinh86

Thành viên mới
Tham gia
12/2/22
Bài viết
4
Được thích
0
Chào các anh chị và các cao thủ, mình có vấn đề này mong được các bác trợ giúp :
Trong 1 cột gồm tập hợp nhiều ô, mỗi ô là 1 từ đơn như : Hiếu, Nghĩa, Ánh, Cường, Hoà, Vũ, Trí, Tình ....v...v
Giờ cần sắp xếp lại theo đặc điểm : cùng thanh dấu. Trật tự mong muốn là Hiếu, Ánh, Trí, ...... Nghĩa, Vũ,.... Cường, Hoà, Tình

Hiện mình đang bó tay. Mong được các cao nhân vẽ đường chỉ lối. Xin đa tạ.
 
Chào các anh chị và các cao thủ, mình có vấn đề này mong được các bác trợ giúp :
Trong 1 cột gồm tập hợp nhiều ô, mỗi ô là 1 từ đơn như : Hiếu, Nghĩa, Ánh, Cường, Hoà, Vũ, Trí, Tình ....v...v
Giờ cần sắp xếp lại theo đặc điểm : cùng thanh dấu. Trật tự mong muốn là Hiếu, Ánh, Trí, ...... Nghĩa, Vũ,.... Cường, Hoà, Tình

Hiện mình đang bó tay. Mong được các cao nhân vẽ đường chỉ lối. Xin đa tạ.
"Trật tự mong muốn là Hiếu, Ánh, Trí, ...... Nghĩa, Vũ,.... Cường, Hoà, Tình" theo trình tự dấu thanh như thế nào?
Gởi file với ví dụ và kết quả mong muốn đầy đủ các trường hợp
 
"Trật tự mong muốn là Hiếu, Ánh, Trí, ...... Nghĩa, Vũ,.... Cường, Hoà, Tình" theo trình tự dấu thanh như thế nào?
Gởi file với ví dụ và kết quả mong muốn đầy đủ các trường hợp

Gửi bạn 1 file cụ thể. Rất mong được bạn chỉ bảo.

Nếu chỉ có 1,2 trăm từ thì mình nhặt thủ công cũng được. Nhưng nhiều quá, gần 1000 từ nên cần tham khảo cao kiến của mọi người để sắp xếp nhanh chóng hơn.
Cảm ơn bạn đã quan tâm
 

File đính kèm

  • Sắp Xếp tên.xlsx
    14.3 KB · Đọc: 8
Bài này, nếu có hàm trả về số thứ tự nhóm: không dấu, huyền, sắc, hỏi, ngã, nặng1,2,3,4,5,6

thì có thể dùng cột phụ để sắp xếp nó.
 
Nhóm là một chuyện nhưng tôi không hiểu theo tiêu chí nào mà có thứ tự (cùng nhóm Sắc): Khoát, Thức, Phúc. Hoặc (cùng nhóm Ngã): Vĩnh, Nghĩa. Dạo này đầu óc mình có vẻ ngu ngơ thế nào ấy.
 
Chào các anh chị và các cao thủ, mình có vấn đề này mong được các bác trợ giúp :
Trong 1 cột gồm tập hợp nhiều ô, mỗi ô là 1 từ đơn như : Hiếu, Nghĩa, Ánh, Cường, Hoà, Vũ, Trí, Tình ....v...v
Giờ cần sắp xếp lại theo đặc điểm : cùng thanh dấu. Trật tự mong muốn là Hiếu, Ánh, Trí, ...... Nghĩa, Vũ,.... Cường, Hoà, Tình

Hiện mình đang bó tay. Mong được các cao nhân vẽ đường chỉ lối. Xin đa tạ.
Tại sao Hiếu lại đứng trước Ánh, và Trí đứng cuối cùng, có cần trật tự gì trong này không.
Mình làm theo kiểu củ chuối như sau:
Liệt kê tất cả các nguyên âm ra (12 nguyên âm : a, ă, â, e, ê, i, o, ô, ơ, u, ư, y)
32 nguyên âm đôi, còn gọi là trùng nhị âm (AI, AO, AU, ÂU, AY, ÂY, EO, ÊU, IA, IÊ/YÊ, IU, OA, OĂ, OE, OI, ÔI, ƠI, OO, ÔÔ, UA, UĂ, UÂ, ƯA, UÊ, UI, ƯI,UO, UÔ, UƠ, ƯƠ, ƯU, UY) và 13 nguyên âm ba hay trùng tam âm (IÊU/YÊU, OAI, OAO, OAY, OEO, UAO, UÂY, UÔI, ƯƠI, ƯƠU, UYA, UYÊ, UYU).
Rồi phân dấu hết cho nó, cứ không dấu là 0, rồi huyền sắc hỏi ngã nặng là 123456 thành cột phụ, xếp lần lượt từ trên xuống.
Nếu VBA thì vòng lặp chạy hết dùng Instr kiểm tra rồi đánh dấu vào tên, ưu tiên duyệt nguyên âm ba, nguyên âm đôi, rồi nguyên âm đơn.
Xong sắp xếp. Dùng hàm excel thì nhờ các anh khác :(
 
Tại sao Hiếu lại đứng trước Ánh, và Trí đứng cuối cùng, có cần trật tự gì trong này không.
Mình làm theo kiểu củ chuối như sau:
Liệt kê tất cả các nguyên âm ra (12 nguyên âm : a, ă, â, e, ê, i, o, ô, ơ, u, ư, y)
32 nguyên âm đôi, còn gọi là trùng nhị âm (AI, AO, AU, ÂU, AY, ÂY, EO, ÊU, IA, IÊ/YÊ, IU, OA, OĂ, OE, OI, ÔI, ƠI, OO, ÔÔ, UA, UĂ, UÂ, ƯA, UÊ, UI, ƯI,UO, UÔ, UƠ, ƯƠ, ƯU, UY) và 13 nguyên âm ba hay trùng tam âm (IÊU/YÊU, OAI, OAO, OAY, OEO, UAO, UÂY, UÔI, ƯƠI, ƯƠU, UYA, UYÊ, UYU).
Rồi phân dấu hết cho nó, cứ không dấu là 0, rồi huyền sắc hỏi ngã nặng là 123456 thành cột phụ, xếp lần lượt từ trên xuống.
Nếu VBA thì vòng lặp chạy hết dùng Instr kiểm tra rồi đánh dấu vào tên, ưu tiên duyệt nguyên âm ba, nguyên âm đôi, rồi nguyên âm đơn.
Xong sắp xếp. Dùng hàm excel thì nhờ các anh khác :(
Mình chỉ cần nhóm lại theo dấu thôi bác ơi. Còn muốn theo trình tự abc thì mình dùng thêm chức năng A->Z.

Bác xem liệu có cách nào làm được theo kiểu : dò tìm thấy ký tự ả, á, ó, ú, ự, ộ trong ô tham chiếu .... thì trả về 1 giá trị là số kiểu 1,2,3,4,5,6. Không dấu sẽ không nhân được giá trị nào hoặc báo n/a
Bài đã được tự động gộp:

Nhóm là một chuyện nhưng tôi không hiểu theo tiêu chí nào mà có thứ tự (cùng nhóm Sắc): Khoát, Thức, Phúc. Hoặc (cùng nhóm Ngã): Vĩnh, Nghĩa. Dạo này đầu óc mình có vẻ ngu ngơ thế nào ấy.
nghĩa là chỉ cần nhóm theo dấu bác ơi, còn xếp luôn được theo thứ tự ABC thì càng tốt, không thì mình dùng thêm cái A->Z sau
 
Gửi bạn 1 file cụ thể. Rất mong được bạn chỉ bảo.

Nếu chỉ có 1,2 trăm từ thì mình nhặt thủ công cũng được. Nhưng nhiều quá, gần 1000 từ nên cần tham khảo cao kiến của mọi người để sắp xếp nhanh chóng hơn.
Cảm ơn bạn đã quan tâm
Dùng hàm tự tạo SortThanhAm, có thể gọi trong công thức Excel hoặc chạy sub lấy kết quả
Code chỉ sort các chuỗi có 1 chữ
Mã:
Function SortThanhAm(ByVal sArr, Optional bASC As Boolean = True)
'sArr: mang 2 chieu
'bASC mac dinh = True: sort a -> z, = False: Sort z -> a
  Dim aTh, arr(), res(), t$, tmp$, sRow&, i&, j&, k&, Q&, n&
 
  sArr = SortRow(sArr, bASC)
  sRow = UBound(sArr)
  ReDim arr(0 To sRow)
  aTh = Array(arr, arr, arr, arr, arr, arr)
  t = ThanhAm
 
  For i = 1 To sRow
    tmp = sArr(i, 1)
    Q = Len(tmp)
    For j = 1 To Q
      n = InStr(1, t, Mid(tmp, j, 1))
      If n > 0 Then
        n = Int((n + 23) / 24)
        Exit For
      End If
    Next j
    If bASC = False Then n = 5 - n
    aTh(n)(0) = aTh(n)(0) + 1
    aTh(n)(aTh(n)(0)) = tmp
  Next i
  ReDim res(1 To sRow, 1 To 1)
  For n = 0 To 5
    For i = 1 To aTh(n)(0)
      k = k + 1
      res(k, 1) = aTh(n)(i)
    Next i
  Next n
  SortThanhAm = res
End Function

Private Function ThanhAm() As String
  Dim aThanh, tmp$, i&
  aThanh = Array(224, 192, 7857, 7856, 7847, 7846, 232, 200, 7873, 7872, 236, 204, 242, 210, 7891, 7890, _
                7901, 7900, 249, 217, 7915, 7914, 7923, 7922, 225, 193, 7855, 7854, 7845, 7844, 233, 201, _
                7871, 7870, 237, 205, 243, 211, 7889, 7888, 7899, 7898, 250, 218, 7913, 7912, 253, 221, _
                7843, 7842, 7859, 7858, 7849, 7848, 7867, 7866, 7875, 7874, 7881, 7880, 7887, 7886, 7893, _
                7892, 7903, 7902, 7911, 7910, 7917, 7916, 7927, 7926, 227, 195, 7861, 7860, 7851, 7850, _
                7869, 7868, 7877, 7876, 297, 296, 245, 213, 7895, 7894, 7905, 7904, 361, 360, 7919, 7918, _
                7929, 7928, 7841, 7840, 7863, 7862, 7853, 7852, 7865, 7864, 7879, 7878, 7883, 7882, 7885, _
                7884, 7897, 7896, 7907, 7906, 7909, 7908, 7921, 7920, 7925, 7924)
  For i = 0 To UBound(aThanh)
    tmp = tmp & ChrW(aThanh(i))
  Next i
  ThanhAm = tmp
End Function

Private Function SortRow(sArr, bASC) As Variant
  Dim oList As Object, arr(), i&, tmp, fRow&, eRow&, td$, tdUp$
  td = ChrW(273):       tdUp = ChrW(272)
  Set oList = CreateObject("System.Collections.ArrayList")
  fRow = LBound(sArr):  eRow = UBound(sArr)
  For i = fRow To eRow
    tmp = sArr(i, 1)
    If tmp <> Empty Then
      If InStr(1, tmp, td, vbBinaryCompare) > 0 Then tmp = Replace(tmp, td, "dzz")
      If InStr(1, tmp, tdUp, vbBinaryCompare) > 0 Then tmp = Replace(tmp, tdUp, "Dzz")
      oList.Add tmp
    End If
  Next i
  oList.Sort
  If bASC = False Then oList.Reverse
  ReDim arr(1 To oList.Count, 1 To 1)
  For i = 1 To oList.Count
    tmp = oList.Item(i - 1)
    If InStr(1, tmp, "dzz", vbBinaryCompare) > 0 Then tmp = Replace(tmp, "dzz", td)
    If InStr(1, tmp, "Dzz", vbBinaryCompare) > 0 Then tmp = Replace(tmp, "Dzz", tdUp)
    arr(i, 1) = tmp
  Next i
  SortRow = arr
  Set oList = Nothing
End Function
Sub chạy gọi hàm SortThanhAm
Mã:
Sub Main()
  Dim sArr(), res
  sArr = Range("F2", Range("F" & Rows.Count).End(xlUp)).Value
  res = SortThanhAm(sArr) 'Sort a -> z
  Range("G2").Resize(UBound(res)) = res
  res = SortThanhAm(sArr, False) 'Sort z -> a
  Range("H2").Resize(UBound(res)) = res
End Sub
 

File đính kèm

  • Sắp Xếp tên.xlsb
    27.4 KB · Đọc: 6
Dùng hàm tự tạo SortThanhAm, có thể gọi trong công thức Excel hoặc chạy sub lấy kết quả
Code chỉ sort các chuỗi có 1 chữ
Mã:
Function SortThanhAm(ByVal sArr, Optional bASC As Boolean = True)
'sArr: mang 2 chieu
'bASC mac dinh = True: sort a -> z, = False: Sort z -> a
  Dim aTh, arr(), res(), t$, tmp$, sRow&, i&, j&, k&, Q&, n&
 
  sArr = SortRow(sArr, bASC)
  sRow = UBound(sArr)
  ReDim arr(0 To sRow)
  aTh = Array(arr, arr, arr, arr, arr, arr)
  t = ThanhAm
 
  For i = 1 To sRow
    tmp = sArr(i, 1)
    Q = Len(tmp)
    For j = 1 To Q
      n = InStr(1, t, Mid(tmp, j, 1))
      If n > 0 Then
        n = Int((n + 23) / 24)
        Exit For
      End If
    Next j
    If bASC = False Then n = 5 - n
    aTh(n)(0) = aTh(n)(0) + 1
    aTh(n)(aTh(n)(0)) = tmp
  Next i
  ReDim res(1 To sRow, 1 To 1)
  For n = 0 To 5
    For i = 1 To aTh(n)(0)
      k = k + 1
      res(k, 1) = aTh(n)(i)
    Next i
  Next n
  SortThanhAm = res
End Function

Private Function ThanhAm() As String
  Dim aThanh, tmp$, i&
  aThanh = Array(224, 192, 7857, 7856, 7847, 7846, 232, 200, 7873, 7872, 236, 204, 242, 210, 7891, 7890, _
                7901, 7900, 249, 217, 7915, 7914, 7923, 7922, 225, 193, 7855, 7854, 7845, 7844, 233, 201, _
                7871, 7870, 237, 205, 243, 211, 7889, 7888, 7899, 7898, 250, 218, 7913, 7912, 253, 221, _
                7843, 7842, 7859, 7858, 7849, 7848, 7867, 7866, 7875, 7874, 7881, 7880, 7887, 7886, 7893, _
                7892, 7903, 7902, 7911, 7910, 7917, 7916, 7927, 7926, 227, 195, 7861, 7860, 7851, 7850, _
                7869, 7868, 7877, 7876, 297, 296, 245, 213, 7895, 7894, 7905, 7904, 361, 360, 7919, 7918, _
                7929, 7928, 7841, 7840, 7863, 7862, 7853, 7852, 7865, 7864, 7879, 7878, 7883, 7882, 7885, _
                7884, 7897, 7896, 7907, 7906, 7909, 7908, 7921, 7920, 7925, 7924)
  For i = 0 To UBound(aThanh)
    tmp = tmp & ChrW(aThanh(i))
  Next i
  ThanhAm = tmp
End Function

Private Function SortRow(sArr, bASC) As Variant
  Dim oList As Object, arr(), i&, tmp, fRow&, eRow&, td$, tdUp$
  td = ChrW(273):       tdUp = ChrW(272)
  Set oList = CreateObject("System.Collections.ArrayList")
  fRow = LBound(sArr):  eRow = UBound(sArr)
  For i = fRow To eRow
    tmp = sArr(i, 1)
    If tmp <> Empty Then
      If InStr(1, tmp, td, vbBinaryCompare) > 0 Then tmp = Replace(tmp, td, "dzz")
      If InStr(1, tmp, tdUp, vbBinaryCompare) > 0 Then tmp = Replace(tmp, tdUp, "Dzz")
      oList.Add tmp
    End If
  Next i
  oList.Sort
  If bASC = False Then oList.Reverse
  ReDim arr(1 To oList.Count, 1 To 1)
  For i = 1 To oList.Count
    tmp = oList.Item(i - 1)
    If InStr(1, tmp, "dzz", vbBinaryCompare) > 0 Then tmp = Replace(tmp, "dzz", td)
    If InStr(1, tmp, "Dzz", vbBinaryCompare) > 0 Then tmp = Replace(tmp, "Dzz", tdUp)
    arr(i, 1) = tmp
  Next i
  SortRow = arr
  Set oList = Nothing
End Function
Sub chạy gọi hàm SortThanhAm
Mã:
Sub Main()
  Dim sArr(), res
  sArr = Range("F2", Range("F" & Rows.Count).End(xlUp)).Value
  res = SortThanhAm(sArr) 'Sort a -> z
  Range("G2").Resize(UBound(res)) = res
  res = SortThanhAm(sArr, False) 'Sort z -> a
  Range("H2").Resize(UBound(res)) = res
End Sub
Cảm ơn bạn nhiều lắm. Khâm phục và ngưỡng mộ!
Không ngờ cấu trúc để giải quyết lại phức tạp và đồ sộ như này.
Nhìn vào hoa hết cả mắt ...
 
Web KT

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

Back
Top Bottom