使用VBA自动生成Excel表

时间:2014-01-13 22:35:21

标签: excel vba excel-vba excel-2011

我应该通过声明我有使用Excel的任何高级功能的经验来解释这个问题,现在我需要使用它们,我不知道我在做什么。

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

1 个答案:

答案 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

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

希望这会给你一些想法。