-1

我应该先说明我在使用 Excel 的任何高级功能方面的经验为 0,现在我需要使用它们,我不知道我在做什么。

我需要生成一个包含以下列的 excel 表:每列中的 ID、名字、姓氏、密码和电话。我需要在每列中输入 N 个条目,其中 ID、名字和姓氏只是随机字符,最多 X 个字符,密码是随机大写、小写和字母数字字符,最多 Y 个字符,电话是随机的 10 位数字诠释。我可以很容易地生成随机字符串,它会检查以确保内容对于表中已经存在的任何其他内容都是唯一的,并添加我不知道的内容。我在 Mac 上,所以这也可以在 bash 中完成,创建一个 csv 文件,这是另一个我知之甚少的领域,但我想,因为它是 Excel 特定的,而且我需要类似的技能,我应该开始学习VBA。

4

1 回答 1

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返回适合 column 的随机值的函数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

上面的代码直接输入到答案中,未经测试。我看不到任何语法错误,但没有任何承诺。如果我犯了你无法纠正的错误,请回来。

希望这能给你一些想法。

于 2014-01-14T10:08:57.223 回答