Note: The other languages of the website are Google-translated. Back to English

Làm cách nào để tạo hoặc liệt kê tất cả các hoán vị có thể có trong Excel?

Ví dụ: tôi có ba ký tự XYZ, bây giờ, tôi muốn liệt kê tất cả các hoán vị có thể dựa trên ba ký tự này để nhận được sáu kết quả khác nhau như sau: XYZ, XZY, YXZ, YZX, ZXY và ZYX. Trong Excel, làm cách nào bạn có thể nhanh chóng tạo hoặc liệt kê tất cả các hoán vị dựa trên số ký tự khác nhau?

Tạo hoặc liệt kê tất cả các hoán vị có thể dựa trên các ký tự có mã VBA


mũi tên màu xanh bong bóng bên phải Tạo hoặc liệt kê tất cả các hoán vị có thể dựa trên các ký tự có mã VBA

Mã VBA sau có thể giúp bạn liệt kê tất cả các hoán vị dựa trên số lượng chữ cái cụ thể của bạn, vui lòng thực hiện như sau:

1. Giữ ALT + F11 phím để mở Microsoft Visual Basic cho các ứng dụng cửa sổ.

2. Nhấp chuột Chèn > Mô-đunvà dán mã sau vào Mô-đun Cửa sổ.

Mã VBA: Liệt kê tất cả các hoán vị có thể có trong excel

Sub GetString()
'Updateby Extendoffice
    Dim xStr As String
    Dim FRow As Long
    Dim xScreen As Boolean
    xScreen = Application.ScreenUpdating
    Application.ScreenUpdating = False
    xStr = Application.InputBox("Enter text to permute:", "Kutools for Excel", , , , , , 2)
    If Len(xStr) < 2 Then Exit Sub
    If Len(xStr) >= 8 Then
        MsgBox "Too many permutations!", vbInformation, "Kutools for Excel"
        Exit Sub
    Else
        ActiveSheet.Columns(1).Clear
        FRow = 1
        Call GetPermutation("", xStr, FRow)
    End If
    Application.ScreenUpdating = xScreen
End Sub
Sub GetPermutation(Str1 As String, Str2 As String, ByRef xRow As Long)
    Dim i As Integer, xLen As Integer
    xLen = Len(Str2)
    If xLen < 2 Then
        Range("A" & xRow) = Str1 & Str2
        xRow = xRow + 1
    Else
        For i = 1 To xLen
            Call GetPermutation(Str1 + Mid(Str2, i, 1), Left(Str2, i - 1) + Right(Str2, xLen - i), xRow)
        Next
    End If
End Sub

3. Sau đó nhấn F5 để chạy mã này và một hộp nhắc xuất hiện để nhắc bạn nhập các ký tự mà bạn muốn liệt kê tất cả các hoán vị, xem ảnh chụp màn hình:

hoán vị danh sách doc 1

4. Sau khi nhập các ký tự, rồi bấm OK , tất cả các hoán vị có thể được hiển thị trong cột A của trang tính đang hoạt động. Xem ảnh chụp màn hình:

hoán vị danh sách doc 2

Chú thích: Nếu độ dài ký tự đã nhập bằng hoặc lớn hơn 8 ký tự, đoạn mã này sẽ không hoạt động vì có quá nhiều hoán vị.

hoán vị danh sách doc 3


Liệt kê hoặc tạo tất cả các kết hợp có thể có từ nhiều cột

Nếu bạn cần tạo tất cả các kết hợp có thể dựa trên dữ liệu nhiều cột, có thể, không có cách nào tốt để giải quyết nhiệm vụ. Nhưng, Kutools cho Excel's Liệt kê tất cả các kết hợp tiện ích có thể giúp bạn liệt kê tất cả các kết hợp có thể một cách nhanh chóng và dễ dàng. Nhấp để tải xuống Kutools cho Excel!

doc danh sách tất cả các kết hợp

Kutools cho Excel: với hơn 300 bổ trợ Excel tiện dụng, dùng thử miễn phí không giới hạn trong 30 ngày. Tải xuống và dùng thử miễn phí ngay!


Các công cụ năng suất văn phòng tốt nhất

Kutools cho Excel giải quyết hầu hết các vấn đề của bạn và tăng 80% năng suất của bạn

  • Tái sử dụng: Chèn nhanh công thức phức tạp, biểu đồ và bất cứ thứ gì bạn đã sử dụng trước đây; Mã hóa ô với mật khẩu; Tạo danh sách gửi thư và gửi email ...
  • Thanh siêu công thức (dễ dàng chỉnh sửa nhiều dòng văn bản và công thức); Bố cục đọc (dễ dàng đọc và chỉnh sửa số lượng ô lớn); Dán vào Dải ô đã Lọchữu ích. Cảm ơn !
  • Hợp nhất các ô / hàng / cột mà không làm mất dữ liệu; Nội dung phân chia ô; Kết hợp các hàng / cột trùng lặp... Ngăn chặn các ô trùng lặp; So sánh các dãyhữu ích. Cảm ơn !
  • Chọn trùng lặp hoặc duy nhất Hàng; Chọn hàng trống (tất cả các ô đều trống); Tìm siêu và Tìm mờ trong Nhiều Sổ làm việc; Chọn ngẫu nhiên ...
  • Bản sao chính xác Nhiều ô mà không thay đổi tham chiếu công thức; Tự động tạo tài liệu tham khảo sang Nhiều Trang tính; Chèn Bullets, Hộp kiểm và hơn thế nữa ...
  • Trích xuất văn bản, Thêm Văn bản, Xóa theo Vị trí, Xóa không gian; Tạo và In Tổng số phân trang; Chuyển đổi giữa nội dung ô và nhận xéthữu ích. Cảm ơn !
  • Siêu lọc (lưu và áp dụng các lược đồ lọc cho các trang tính khác); Sắp xếp nâng cao theo tháng / tuần / ngày, tần suất và hơn thế nữa; Bộ lọc đặc biệt bằng cách in đậm, in nghiêng ...
  • Kết hợp Workbook và WorkSheets; Hợp nhất các bảng dựa trên các cột chính; Chia dữ liệu thành nhiều trang tính; Chuyển đổi hàng loạt xls, xlsx và PDFhữu ích. Cảm ơn !
  • Hơn 300 tính năng mạnh mẽ. Hỗ trợ Office / Excel 2007-2021 và 365. Hỗ trợ tất cả các ngôn ngữ. Dễ dàng triển khai trong doanh nghiệp hoặc tổ chức của bạn. Đầy đủ tính năng Dùng thử miễn phí 30 ngày. Bảo đảm hoàn lại tiền trong 60 ngày.
tab kte 201905

Tab Office mang lại giao diện Tab cho Office và giúp công việc của bạn trở nên dễ dàng hơn nhiều

  • Cho phép chỉnh sửa và đọc theo thẻ trong Word, Excel, PowerPoint, Publisher, Access, Visio và Project.
  • Mở và tạo nhiều tài liệu trong các tab mới của cùng một cửa sổ, thay vì trong các cửa sổ mới.
  • Tăng 50% năng suất của bạn và giảm hàng trăm cú nhấp chuột cho bạn mỗi ngày!
officetab dưới cùng
Nhận xét (13)
Chưa có xếp hạng. Hãy là người đầu tiên xếp hạng!
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Xin chào, Tôi đang thực hiện một dự án nhỏ sử dụng quy tắc hoán vị và kết hợp. Tôi cần sự hỗ trợ của bạn về điều này xin vui lòng. Tình huống: Tôi có dữ liệu số chữ cái gồm 13 chữ số (00SHGO8BJIDG0) Tôi muốn mã hóa để chuyển S thành 5, I thành 1 và O thành 0 và ngược lại. Dự án là nếu tôi có dữ liệu 13 chữ số chính xác, tôi sẽ nhận được một mã vượt qua 3 chữ số. (ví dụ) 00SHG08BJ1DG0 - 500 là mã vượt qua nhưng do lỗi chính tả mà thay vì 1 nó là I và 0 nó là O, có một thông tin sai. Bạn có thể giúp tôi không.
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Chào bạn,

Tôi đang cố gắng lấy một hoán vị cho 82 ký tự, mã được cung cấp hoạt động, nhưng vì các cột chỉ có 1048576, tôi muốn chuyển đầu ra tiếp theo sang B, C, D ..... Có ai trong số các bạn có thể giúp tôi về điều này không về
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
@Supraja ...

trong ô con đầu tiên xóa tất cả các ô ... không chỉ hàng đầu tiên
--Cells.Clear

Sub GetPermutation (Str1 As String, Str2 As String, ByRef xRow As Long)
Dim i dưới dạng số nguyên, xLen dưới dạng số nguyên
xLen = Len (Str2)
Nếu xLen <2 Thì
'chuyển sang cột tiếp theo khi bạn lên đến 100
Cells (((xRow - 1) Mod 100) + 1, 1 + Int (xRow / 100)) = Str1 & Str2
xRow = xRow + 1
Khác
Đối với i = 1 Đến xLen
Gọi GetPermutation (Str1 + Mid (Str2, i, 1), Left (Str2, i - 1) + Right (Str2, xLen - i), xRow)
Sau
Cuối Nếu
End Sub
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Có bao nhiêu trình tự của 3 thứ có thể được hình thành từ 7 sự thay thế khác nhau và thứ tự có quan trọng không?
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
3 theo sức mạnh của 7: 2187
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Chào mọi người. Tôi cần giúp đỡ về điều này. Tôi có hai bảng chữ cái được hoán vị trong 20 hàng. Nhưng tôi không hiểu đúng. Bất cứ ai có thể giúp tôi nên gửi hoán vị đến email của tôi. pauladah69@gmail.com.


1.abba
2.aabb
3.aabb
4.aabb
5.aabb
6.aabb
7.aabb
8.aabb
9.aabb
10.aabb
11.aabb
12.aabb
13.aabb
14.aabb
15.aabb
16.aabb
17.aabb
18.aabb
19.aabb
20.aabb
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
mã này sẽ không hoạt động vì có nhiều hoán vị


nên là:

mã này sẽ không hoạt động vì có quá nhiều hoán vị


HTH
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Xin chào, MC,
Cảm ơn bạn đã nhắc nhở nồng nhiệt của bạn, đó là sai lầm của tôi. Tôi đã sửa lại.
Cảm ơn rất nhiều!
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
peki bunu listeleyecek bir program uygulama yok mu? basit sıradan bir hesaplamadan daha fazlasına ihtiyacı olan ne yapacak?
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
ai có thể gửi cho tôi danh sách 10 mục khác nhau được hoán vị bởi 2 kết quả. mã này doe

không làm việc này
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Xin chào, nếu chuỗi đầu vào chứa các ký tự trùng lặp, thì chuỗi con sẽ tạo ra các hoán vị trùng lặp.
Điều này không xảy ra nếu bạn thực hiện sửa đổi sau đây thành vòng lặp:

'==========================
Đối với i = 1 Đến xLen
Nếu hướng dẫn (Left (Str2, i - 1), Mid (Str2, i, 1)) = 0 thì
Gọi GetPermutation (Str1 + Mid (Str2, i, 1), Left (Str2, i - 1) + Right (Str2, xLen - i), xRow)
Cuối nếu
Sau
'==========================

Việc tạo các biến cục bộ tạm thời cho Mid (Str2, i, 1) và Left (Str2, i - 1) và tránh kiểm tra i = 1 làm cho nó chạy nhanh hơn:


'==========================
Sub GetPermutation (Str1 As String, Str2 As String, ByRef xRow As Long)
Dim i dưới dạng số nguyên, xLen dưới dạng số nguyên, Str2left dưới dạng chuỗi, c dưới dạng chuỗi
xLen = Len (Str2)
Nếu xLen <2 Thì
Phạm vi ("A" & xRow) = Str1 & Str2
xRow = xRow + 1
Khác
Gọi GetPermutation (Str1 + Mid (Str2, 1, 1), Right (Str2, xLen - 1), xRow)
Đối với i = 2 Đến xLen
c = Giữa (Str2, i, 1)
Str2left = Left (Str2, i - 1)
Nếu hướng dẫn (Str2left, c) = 0 thì
Gọi GetPermutation (Str1 + c, Str2left + Right (Str2, xLen - i), xRow)
Cuối Nếu
Sau
Cuối Nếu
End Sub
'==========================

Chúc mừng,
dvdm
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Chào !

Como surfaceo para gerar pelo menos 10 pemutações?
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Xin chào, Mateus,
Để giải quyết vấn đề của bạn, vui lòng áp dụng mã dưới đây: (Lưu ý: nếu có nhiều hơn 8 ký tự, mã sẽ thực thi chậm.)
Sub GetString()
'Updateby Extendoffice
    Dim xStr As String
    Dim FRow As Long
    Dim FC As Integer
    Dim xScreen As Boolean
    Dim xNumber As Long
    xNumber = 10 ' This is the max length of the characters you can change it to 11, 12, 13...as you need
    xScreen = Application.ScreenUpdating
    Application.ScreenUpdating = False
    xStr = Application.InputBox("Enter text to permute:", "Kutools for Excel", , , , , , 2)
    If Len(xStr) < 2 Then Exit Sub
    If Len(xStr) > xNumber Then
        MsgBox "Too many permutations!", vbInformation, "Kutools for Excel"
        Exit Sub
    Else
        ActiveSheet.Columns(1).Clear
        FRow = 1
        FC = 1
        Call GetPermutation("", xStr, FRow, FC)
    End If
    Application.ScreenUpdating = xScreen
End Sub
Sub GetPermutation(Str1 As String, Str2 As String, ByRef xRow As Long, ByRef xc As Integer)
    Dim i As Integer, xLen As Integer
    xLen = Len(Str2)
    If xLen < 2 Then
        If xRow > 1000000 Then
            xc = xc + 1
            xRow = 1
        End If
       ActiveSheet.Cells(xRow, xc) = Str1 & Str2
        xRow = xRow + 1
    Else
        For i = 1 To xLen
            Call GetPermutation(Str1 + Mid(Str2, i, 1), Left(Str2, i - 1) + Right(Str2, xLen - i), xRow, xc)
        Next
    End If
End Sub


Xin vui lòng có một thử, hy vọng nó có thể giúp bạn!
Không có bình luận nào được đăng ở đây
Để lại ý kiến ​​của bạn
Đăng với tư cách khách
×
Đánh giá bài viết này:
0   Nhân vật
Các vị trí được đề xuất

Kết nối với chúng tôi

Bản quyền © 2009 - www.extendoffice.com. | Đã đăng ký Bản quyền. cung cấp bởi ExtendOffice. | BẢN ĐỒ CHI NHÁNH
Microsoft và logo Office là các nhãn hiệu hoặc nhãn hiệu đã đăng ký của Microsoft Corporation tại Hoa Kỳ và / hoặc các quốc gia khác.
Được bảo vệ bởi Sectigo SSL