Gary có hai danh sách trong một trang tính. Một trong số chúng, trong cột A, chứa danh sách các mặt hàng thừa trong công ty của chúng tôi và một trong số đó, trong cột G, chứa danh sách tên. Không có gì trong các cột B: F. Gary muốn chỉ định tên, một cách ngẫu nhiên, cho danh sách các mục. Mỗi tên từ cột G chỉ nên được gán một lần. Nếu có nhiều tên hơn các mục, thì một số tên sẽ không được sử dụng. Nếu có ít tên hơn các mục, thì một số mục sẽ không có tên được liên kết.

Có một số cách có thể được thực hiện. Tuy nhiên, có lẽ dễ nhất là chỉ định một số ngẫu nhiên cho mỗi mục trong cột A.

Giả sử rằng mục đầu tiên nằm trong ô A1, hãy đặt mục sau vào ô B1:

=RAND()

Bấm đúp vào ô điều khiển điền vào ô B1 và ​​bạn sẽ kết thúc bằng một số ngẫu nhiên (từ 0 đến 1) ở bên phải của mỗi mục trong cột A.

Bây giờ, chọn tất cả các ô trong cột B và nhấn Ctrl + C để sao chép chúng vào Clipboard. Sử dụng Paste Special để dán lại các giá trị vào các ô đó trong cột B. (Thao tác này chuyển đổi các ô từ công thức thành giá trị tĩnh thực tế.)

Sắp xếp các cột A và B theo thứ tự tăng dần dựa trên các giá trị trong cột B.

Nếu bạn nhìn qua các hàng, bây giờ bạn sẽ có các mục (cột A) được liên kết ngẫu nhiên với một tên (cột G).

Mặc dù không cần thiết, bạn cũng có thể làm theo các bước tương tự sau để thêm một số ngẫu nhiên vào bên phải của mỗi tên và sau đó sắp xếp các tên. (Tôi nói điều đó là không cần thiết vì ngẫu nhiên các mục sẽ đủ để đảm bảo rằng có các mục ngẫu nhiên được liên kết với mỗi tên.)

Kỹ thuật được thảo luận cho đến nay hoạt động tốt nếu bạn chỉ phải thực hiện ghép nối ngẫu nhiên một lần trong một thời gian. Nếu bạn cần làm điều đó khá thường xuyên, thì macro có thể là một cách tiếp cận tốt hơn. Tất nhiên, có nhiều cách tiếp cận dựa trên vĩ mô khác nhau mà bạn có thể sử dụng. Cách tiếp cận sau đây giả định danh sách mục nằm trong cột A và danh sách tên trong cột G. Nó cũng giả định rằng có các ô tiêu đề trong hàng 1 cho mỗi cột.

Sub AssignNames()

Set srItems = Range("A2").CurrentRegion     Set srNames = Range("G2").CurrentRegion     NameCount = srItems.Rows.Count - 1     ItemCount = srNames.Rows.Count - 1

'Randomize Names     ReDim tempArray(NameCount, 2)

For x = 0 To NameCount - 1         tempArray(x, 0) = Range("G2").Offset(x, 0)

tempArray(x, 1) = Rnd()

Next x

'Bubble Sort     For i = 0 To NameCount - 2         For j = i To NameCount - 1             If tempArray(i, 1) > tempArray(j, 1) Then                 tempItem = tempArray(j, 0)

tempName = tempArray(j, 1)

tempArray(j, 0) = tempArray(i, 0)

tempArray(j, 1) = tempArray(i, 1)

tempArray(i, 0) = tempItem                 tempArray(i, 1) = tempName             End If         Next j     Next i

'AssignNames     Range("B2") = "Assigned"

AssignCount = NameCount     If NameCount > ItemCount Then AssignCount = ItemCount         For x = 0 To AssignCount         Range("B2").Offset(x, 0) = tempArray(x, 0)

Next x End Sub

Nếu có nhiều tên hơn các mục, macro sẽ gán tên cho các mục một cách ngẫu nhiên. Nếu có nhiều mục hơn tên nó sẽ gán ngẫu nhiên một số mục vào tên và ngẫu nhiên để lại “lỗ” (các mục không có tên). Nó lưu trữ chúng trong cột B, ghi đè lên bất cứ thứ gì ở đó.

_Lưu ý: _

Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.

ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.

Mẹo này (5682) áp dụng cho Microsoft Excel 2007, 2010, 2013, 2016, 2019 và Excel trong Office 365.