使用macros在Excel中生成数据?

我需要创build一个具有以下结构的表格:

Applicant | Test 1 | Test 2 | Test 3 | Test 4 | Test 5 | Test 6 | 1 | A | C | D | E | F | B | 2 | C | B | A | E | D | F | 3 | C | A | F | E | B | D | .... | | | | | | | 

基本上,testing1 – 6可以是A和F之间的任何字母。我想要一个macros(或其他方法),我可以通过它来生成这个表,200个申请人,其中testing是完全随机的。 有人知道怎么做吗?

你不需要一个macros。 一个公式可以做到这一点: =CHAR(RANDBETWEEN(65, 70))

有720个排列的6个字符。

虽然你可以通过select一个产生一个随机的排列,然后从剩下的一个集合中产生另一个排列,但是我认为你最好把所有的720都放到一个工作表中,然后从工作表中select200个随机的行。

有代码示例来生成这里的排列: http : //j-walk.com/ss/excel/tips/tip46.htm

那么你可以使用randbetween()来从中select一行。

既然你说你不想单独生成排列,这里有一些VBA代码可以为你生成随机的烫发。 不过这有点暴躁。

 Option Explicit Function candidateAlreadyInUse(r As Integer, cand As String) As Boolean Dim col As Integer candidateAlreadyInUse = False For col = 1 To 6 If ActiveSheet.Cells(r, col) = cand Then candidateAlreadyInUse = True Exit Function End If Next col End Function Sub perm() Dim row As Integer Dim col As Integer Dim candidate As String For row = 1 To 10 For col = 1 To 6 candidate = Chr(65 + Int(Rnd() * 6)) While candidateAlreadyInUse(row, candidate) candidate = Chr(65 + Int(Rnd() * 6)) Wend ActiveSheet.Cells(row, col) = candidate Next col Next row End Sub 

为了踢球,我很快在VBA中实现了一个Shuffle,它将使用Fisher-Yates创build一个字母A,B,C,D,E,F的随机排列 – 将它传递给一个数组,然后它将洗牌:

 Public Sub Shuffle(ByRef items() As String) Dim i, j As Integer Dim temp As String For i = UBound(items) To i = 1 Step -1 j = Rnd * i temp = items(j) items(j) = items(i) items(i) = temp Next End Sub 

下面的代码创build一个数组A,B,C,D,E,F,产生200个随机排列,并将它们逐行写入活动表:

 Public Sub WriteTests() Dim tests(0 To 5) As String tests(0) = "A" tests(1) = "B" tests(2) = "C" tests(3) = "D" tests(4) = "E" tests(5) = "F" Dim row, col As Integer Dim mySheet As Worksheet Set mySheet = ActiveWorkbook.ActiveSheet For row = 1 To 200 Shuffle tests For col = 1 To 6 mySheet.Cells(row, col).Value2 = tests(col - 1) Next Next End Sub