我应该通过声明我有使用Excel的任何高级功能的经验来解释这个问题,现在我需要使用它们,我不知道我在做什么。
我需要使用以下列生成一个excel表:每列中的ID,名字,姓氏,密码和电话。我需要每列中有N个条目,其中ID,名字和姓氏只是随机字符,最多X个字符,密码是随机大写字母,小写字母和字母数字字符,最多Y个字符,电话是随机的10个数字INT。我可以很容易地生成随机字符串,检查以确保内容对于表中已有的任何其他内容是唯一的,并添加我不知道的内容。我在Mac上,所以这也可以在bash中创建,创建一个csv文件,另一个我知之甚少的领域,但我认为因为它是Excel特定的,我将需要类似的技能,我应该开始学习VBA。
答案 0 :(得分:2)
如果我理解正确,您会担心ID,比如说,您在行N上生成的ID与您为2到N-1范围内的行之一生成的ID相同。
我不知道VBA函数会报告值是否匹配或无法匹配范围中的任何值。我在使用PC时正在使用MAC,但我怀疑这会有所不同。
你寻求一个五列表。 Max说,你必须考虑许多行。您希望第1行保持标题行。您说您知道如何为每列生成随机值。
我知道MAC和PC VBA之间存在细微差别,但我认为以下情况很常见。
我会在数组中生成表格,这比访问工作表单元格要快得多。
Dim Rng as Range
Dim WkshtValue as Variant
With Worksheets("xxxx")
Set Rng = range of interest
WkshtValue = .Rng.Value
End With
上面将WkshtValue转换为所需大小的数组,并将感兴趣范围内的所有值复制到其中。因为WkshtValue是Variant,所以数组中的条目将是字符串,整数,日期或它们在工作表中的任何内容。
无论工作表中的范围位置如何,此数组都将基于此数组,因此如果范围是基于此范围,则会减少对我的大脑的伤害。
WkshtValue的第一个维度将用于行,第二个维度用于列。这不是正常惯例,但这意味着WkshtValue(Row, Col)
匹配.Cells(Row, Col).Value
。
执行相反的操作稍微有点困难,但您可以定义一个数组,用值填充它,然后写入工作表:
Dim Rng as Range
Dim WkshtValue() as Variant
ReDim WkshtValue(1 To Max + 1, 1 To 5)
' Fill row 1 - WkshtValue(1, 1) to WkshtValue(1, 5) - with the header row values.
' Fill rows 2 to Max+1 with appropriate randon values.
With Worksheets("xxxx")
Set Rng = .Range(.Cells(1, 1), .Cells(Max + 1, 5))
End With
Rng.Value = WkshtValue
我会编写一个函数RanVal(ColCrnt) As String
,它返回一个适合列ColCrnt
的随机值。
我会有类似的东西:
For RowCrnt = 2 to Max + 1
For ColCrnt = 1 To 5
Do While True
ValPoss = RanVal(ColCrnt)
MatchFound = False
For RowTemp = 2 to RowCrnt - 1
If WkshtValue(RowTemp, ColCrnt) = ValPoss Then
MatchFound = True
Exit For
End If
Next
If Not MatchFound Then
Exit Do
End If
Loop
WkshtValue(RowCrnt, ColCrnt) = ValPoss
Next
Next
以上代码直接输入答案,未经过测试。我看不到任何语法错误但没有承诺。如果我犯了一个你无法纠正的错误,请回来。
希望这会给你一些想法。