2014-01-13 5 views
-1

Я должен предисловие к этому вопросу, заявив, что у меня есть опыт использования каких-либо дополнительных функций Excel, и теперь, когда мне нужно их использовать, я понятия не имею, что я делаю.Auto Generate Excel Table Использование VBA

Мне нужно создать таблицу excel со следующими столбцами: ID, имя, фамилию, пароль и телефон в каждом столбце. Мне нужно N записей в каждом столбце, где ID, имя и фамилия - это просто случайные символы, до X символов, пароль - случайный верхний регистр, строчный регистр и буквенно-цифровые символы, до Y символов, а телефон - случайный 10-значный внутр. Я могу легко генерировать случайные строки, проверяя, чтобы содержимое было уникальным для чего-либо еще в таблице и добавляло его, о котором я не знаю. Я нахожусь на Mac, так что это также можно сделать в bash, создав файл csv, еще одну область, о которой я знаю очень мало, но я подумал, что это специфичный Excel, и мне понадобятся аналогичные навыки в будущем, я должен начать обучение VBA.

+1

Пожалуйста, покажите нам шаги, которые вы сделали до сих пор. Для начала попробуйте записать макрос и показать и объяснить нам, что именно было сделано с вашей стороны. :) – Manhattan

+0

Я знаю, что это норма здесь, но в этом случае я действительно не имел ничего общего с этим. – Wingdom

ответ

2

Если я правильно понимаю, вы беспокоитесь, что идентификатор, скажем, вы создаете в строке N, совпадает с тем, который вы создали для одной из строк в диапазоне от 2 до N-1.

Я не знаю функции VBA, которая сообщит, соответствует ли значение или не соответствует любому значению в диапазоне. Вы используете MAC, пока я использую ПК, но я сомневаюсь, что это имеет значение.

Вы ищете таблицу из пяти столбцов. У вас должно быть несколько строк, например Max. Вы хотите, чтобы строка 1 удерживала линию заголовка. Вы говорите, что знаете, как создавать случайные значения для каждого столбца.

Я знаю, что существуют небольшие различия между MAC и ПК 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 

Приведенный выше код набирался прямо в ответ и не испытывалась. Я не вижу никаких синтаксических ошибок, но никаких обещаний. Вернись, если я допустил ошибку, которую ты не можешь исправить.

Надеюсь, это даст вам некоторые идеи.

+0

Это именно то, что я искал. Спасибо вам за помощь! – Wingdom