Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Случайное заполнение значениями из определенных ячеек - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Случайное заполнение значениями из определенных ячеек (Макросы/Sub)
Случайное заполнение значениями из определенных ячеек
vladimir25 Дата: Вторник, 15.12.2015, 20:57 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Здравствуйте. Как реализовать данную функцию (Сразу скажу, я человек, практически ничего не знающий, в этом деле).

Есть допустим строка в которой много ячеек и она должна заполняться в случайном порядке значениями, которые указаны в других(другой) ячейке(ячейках), и конечно будет это удобно, если будет это назначено на кнопку для каждой строки. Как это сделать?

Почему пишу в ячейки или ячейках? Если возможно, чтобы все значения эти были записаны через запятую, то в ячейке, если невозможно, то в ячейках.

Лучше конечно глянуть в файле, так понятнее будет.
К сообщению приложен файл: 8916056.xlsx (11.6 Kb)
 
Ответить
СообщениеЗдравствуйте. Как реализовать данную функцию (Сразу скажу, я человек, практически ничего не знающий, в этом деле).

Есть допустим строка в которой много ячеек и она должна заполняться в случайном порядке значениями, которые указаны в других(другой) ячейке(ячейках), и конечно будет это удобно, если будет это назначено на кнопку для каждой строки. Как это сделать?

Почему пишу в ячейки или ячейках? Если возможно, чтобы все значения эти были записаны через запятую, то в ячейке, если невозможно, то в ячейках.

Лучше конечно глянуть в файле, так понятнее будет.

Автор - vladimir25
Дата добавления - 15.12.2015 в 20:57
Wasilich Дата: Вторник, 15.12.2015, 22:07 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
Ну, кнопки и не обязательно, можно просто кликом мышки по строке.
Только как понять
Цитата
строка должна заполнятся в случайном порядке

В примере посмотреть бы.
 
Ответить
СообщениеНу, кнопки и не обязательно, можно просто кликом мышки по строке.
Только как понять
Цитата
строка должна заполнятся в случайном порядке

В примере посмотреть бы.

Автор - Wasilich
Дата добавления - 15.12.2015 в 22:07
vladimir25 Дата: Среда, 16.12.2015, 01:15 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Wasilic, Файл же прикрепил.
 
Ответить
СообщениеWasilic, Файл же прикрепил.

Автор - vladimir25
Дата добавления - 16.12.2015 в 01:15
devilkurs Дата: Среда, 16.12.2015, 01:37 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 167
Репутация: 43 ±
Замечаний: 0% ±

Excel 2007, 2010
vladimir25,
у Вас даже в файле написано
Цитата
Здесь строка должна заполнятся в случайном порядке значениями, которые берутся в столбце "значения".
То есть, к примеру кликнули "кнопку 1" и "строка 1" заполнилась в случайном порядке значенями, которые указаны в столбце "значения" строки 1

Вообще не понятно как это "заполняются в случайном порядке значениями, которые указаны в столбце "значения""
Т.е. Вы хотите рандом? Например у Вас в первой строке в Значания V и 3, соответственно в первой строке рандомом раскидать V 3 3 V 3 например?


 
Ответить
Сообщениеvladimir25,
у Вас даже в файле написано
Цитата
Здесь строка должна заполнятся в случайном порядке значениями, которые берутся в столбце "значения".
То есть, к примеру кликнули "кнопку 1" и "строка 1" заполнилась в случайном порядке значенями, которые указаны в столбце "значения" строки 1

Вообще не понятно как это "заполняются в случайном порядке значениями, которые указаны в столбце "значения""
Т.е. Вы хотите рандом? Например у Вас в первой строке в Значания V и 3, соответственно в первой строке рандомом раскидать V 3 3 V 3 например?

Автор - devilkurs
Дата добавления - 16.12.2015 в 01:37
Wasilich Дата: Среда, 16.12.2015, 01:42 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
Wasilic, Файл же прикрепил.
Но, там же не видно как именно вы хотите разместить значения.
Внесите их ручками, что бы видно было как это в случайном порядке .


Сообщение отредактировал Wasilic - Среда, 16.12.2015, 01:45
 
Ответить
Сообщение
Wasilic, Файл же прикрепил.
Но, там же не видно как именно вы хотите разместить значения.
Внесите их ручками, что бы видно было как это в случайном порядке .

Автор - Wasilich
Дата добавления - 16.12.2015 в 01:42
vladimir25 Дата: Среда, 16.12.2015, 02:02 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
devilkurs, именно так.
 
Ответить
Сообщениеdevilkurs, именно так.

Автор - vladimir25
Дата добавления - 16.12.2015 в 02:02
Roman777 Дата: Среда, 16.12.2015, 10:37 | Сообщение № 7
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
vladimir25, Выделите любую ячейку нужной строки и выполняете макрос.
[vba]
Код
Sub rand()
Dim zn() As String
Dim i As Long, j As Long
Dim Znach As String
Dim rand As Long, k As Long
i = Selection.Row
For j = 1 To 3
  If Cells(i, j + 1) <> "" Then
    k = k + 1
    ReDim Preserve zn(k)
    zn(k) = Cells(i, j + 1)
  End If
Next
For j = 1 To k
  rand = (Int(1 + (Rnd() * k)))
  If zn(rand) <> "" Then
    If Znach <> "" Then
       Znach = Znach & ", " & zn(rand)
    Else
       Znach = zn(rand)
    End If
  End If
Next j
Cells(i, 13) = Znach
End Sub
[/vba]
Добавил файлик
Единственное, вывод строки я добавил в 13й столбец, в файлике, если захотите поменять на 12 как вы просили, измените предпоследнюю строку:
[vba]
Код
Cells(i, 13) = Znach
[/vba]
на
[vba]
Код
Cells(i, 12) = Znach
[/vba]
К сообщению приложен файл: 3614223.xls (39.5 Kb)


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Среда, 16.12.2015, 10:42
 
Ответить
Сообщениеvladimir25, Выделите любую ячейку нужной строки и выполняете макрос.
[vba]
Код
Sub rand()
Dim zn() As String
Dim i As Long, j As Long
Dim Znach As String
Dim rand As Long, k As Long
i = Selection.Row
For j = 1 To 3
  If Cells(i, j + 1) <> "" Then
    k = k + 1
    ReDim Preserve zn(k)
    zn(k) = Cells(i, j + 1)
  End If
Next
For j = 1 To k
  rand = (Int(1 + (Rnd() * k)))
  If zn(rand) <> "" Then
    If Znach <> "" Then
       Znach = Znach & ", " & zn(rand)
    Else
       Znach = zn(rand)
    End If
  End If
Next j
Cells(i, 13) = Znach
End Sub
[/vba]
Добавил файлик
Единственное, вывод строки я добавил в 13й столбец, в файлике, если захотите поменять на 12 как вы просили, измените предпоследнюю строку:
[vba]
Код
Cells(i, 13) = Znach
[/vba]
на
[vba]
Код
Cells(i, 12) = Znach
[/vba]

Автор - Roman777
Дата добавления - 16.12.2015 в 10:37
Wasilich Дата: Среда, 16.12.2015, 12:47 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
Так пойдет?
К сообщению приложен файл: 3181472.xls (40.0 Kb)
 
Ответить
СообщениеТак пойдет?

Автор - Wasilich
Дата добавления - 16.12.2015 в 12:47
vladimir25 Дата: Среда, 16.12.2015, 15:52 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Roman777, Подходящий вариант, но только значения должны быть рандомно разбросаны именно в таблице в ячейках, а не в отдельной строке через запятую. Через запятую я имел ввиду сами значения записывать (если это возможно) , а рандом только в ячейках. Гляньте вот, как я имею ввиду
К сообщению приложен файл: 1363340.xls (43.0 Kb)


Сообщение отредактировал vladimir25 - Среда, 16.12.2015, 15:52
 
Ответить
СообщениеRoman777, Подходящий вариант, но только значения должны быть рандомно разбросаны именно в таблице в ячейках, а не в отдельной строке через запятую. Через запятую я имел ввиду сами значения записывать (если это возможно) , а рандом только в ячейках. Гляньте вот, как я имею ввиду

Автор - vladimir25
Дата добавления - 16.12.2015 в 15:52
Roman777 Дата: Среда, 16.12.2015, 21:39 | Сообщение № 10
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
vladimir25, выделяете ячейку в которой через запятую или пробелы и запятую прописаны значения и выполняете макрос. Рандомные значения появятся в ячейках той же строки в 5-11 столбцах.

[vba]
Код
Sub rand2()
Dim zn() As String
Dim i As Long, j As Long
Dim rand As Long, k As Long
Dim Slovo As String, s As Long, Slovo1 As String
Slovo = Replace(Slovo, " ", "")
i = Selection.Row
For s = 1 To Len(Slovo)
  If Mid(Slovo, s, 1) = "," Or Len(Slovo) = s Then
    If Slovo1 <> "" Then
       k = k + 1
       ReDim Preserve zn(k)
       zn(k) = Slovo1
       Slovo1 = ""
    Else
       k = k + 1
       ReDim Preserve zn(k)
       zn(k) = Mid(Slovo, s, 1)
    End If
  Else
     Slovo1 = Slovo1 & Mid(Slovo, s, 1)
  End If
Next s
For j = 5 To 11
  rand = (Int(1 + (Rnd() * k)))
  Cells(i, j) = zn(rand)
Next j
End Sub
[/vba]
К сообщению приложен файл: random2.xls (42.5 Kb)


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Среда, 16.12.2015, 21:41
 
Ответить
Сообщениеvladimir25, выделяете ячейку в которой через запятую или пробелы и запятую прописаны значения и выполняете макрос. Рандомные значения появятся в ячейках той же строки в 5-11 столбцах.

[vba]
Код
Sub rand2()
Dim zn() As String
Dim i As Long, j As Long
Dim rand As Long, k As Long
Dim Slovo As String, s As Long, Slovo1 As String
Slovo = Replace(Slovo, " ", "")
i = Selection.Row
For s = 1 To Len(Slovo)
  If Mid(Slovo, s, 1) = "," Or Len(Slovo) = s Then
    If Slovo1 <> "" Then
       k = k + 1
       ReDim Preserve zn(k)
       zn(k) = Slovo1
       Slovo1 = ""
    Else
       k = k + 1
       ReDim Preserve zn(k)
       zn(k) = Mid(Slovo, s, 1)
    End If
  Else
     Slovo1 = Slovo1 & Mid(Slovo, s, 1)
  End If
Next s
For j = 5 To 11
  rand = (Int(1 + (Rnd() * k)))
  Cells(i, j) = zn(rand)
Next j
End Sub
[/vba]

Автор - Roman777
Дата добавления - 16.12.2015 в 21:39
vladimir25 Дата: Среда, 16.12.2015, 23:19 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Roman777, Спасибо большое. А можно немного дополнить этот код, чтобы только видимые столбцы заполнялись? Посмотрите в файлике, там более понятно.
К сообщению приложен файл: 1531626.xls (51.0 Kb)


Сообщение отредактировал vladimir25 - Среда, 16.12.2015, 23:20
 
Ответить
СообщениеRoman777, Спасибо большое. А можно немного дополнить этот код, чтобы только видимые столбцы заполнялись? Посмотрите в файлике, там более понятно.

Автор - vladimir25
Дата добавления - 16.12.2015 в 23:19
Roman777 Дата: Четверг, 17.12.2015, 09:45 | Сообщение № 12
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
vladimir25, теперь будет работать в объединённой ячейке (если значение записано в первую из объединённых) . Ну и проверка на скрытые ячейки.
[vba]
Код
Sub rand3()
Dim zn() As String
Dim i As Long, j As Long
Dim rand As Long, k As Long
Dim Slovo As String, s As Long, Slovo1 As String
i = Selection.Row
j = Selection.Column
Slovo = Replace(Cells(i, j), " ", "")
i = Selection.Row
For s = 1 To Len(Slovo)
  If Mid(Slovo, s, 1) = "," Or Len(Slovo) = s Then
    If Slovo1 <> "" Then
       k = k + 1
       ReDim Preserve zn(k)
       zn(k) = Slovo1
       Slovo1 = ""
    Else
       k = k + 1
       ReDim Preserve zn(k)
       zn(k) = Mid(Slovo, s, 1)
    End If
  Else
     Slovo1 = Slovo1 & Mid(Slovo, s, 1)
  End If
Next s
For j = 5 To 11
If Columns(j).EntireColumn.Hidden = False Then
  rand = (Int(1 + (Rnd() * k)))
  Cells(i, j) = zn(rand)
End If
Next j
End Sub
[/vba]
К сообщению приложен файл: Rand3.xls (56.0 Kb)


Много чего не знаю!!!!
 
Ответить
Сообщениеvladimir25, теперь будет работать в объединённой ячейке (если значение записано в первую из объединённых) . Ну и проверка на скрытые ячейки.
[vba]
Код
Sub rand3()
Dim zn() As String
Dim i As Long, j As Long
Dim rand As Long, k As Long
Dim Slovo As String, s As Long, Slovo1 As String
i = Selection.Row
j = Selection.Column
Slovo = Replace(Cells(i, j), " ", "")
i = Selection.Row
For s = 1 To Len(Slovo)
  If Mid(Slovo, s, 1) = "," Or Len(Slovo) = s Then
    If Slovo1 <> "" Then
       k = k + 1
       ReDim Preserve zn(k)
       zn(k) = Slovo1
       Slovo1 = ""
    Else
       k = k + 1
       ReDim Preserve zn(k)
       zn(k) = Mid(Slovo, s, 1)
    End If
  Else
     Slovo1 = Slovo1 & Mid(Slovo, s, 1)
  End If
Next s
For j = 5 To 11
If Columns(j).EntireColumn.Hidden = False Then
  rand = (Int(1 + (Rnd() * k)))
  Cells(i, j) = zn(rand)
End If
Next j
End Sub
[/vba]

Автор - Roman777
Дата добавления - 17.12.2015 в 09:45
vladimir25 Дата: Четверг, 17.12.2015, 15:26 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Roman777, Огромное преогромное спасибо! :) Всё так, как нужно.
 
Ответить
СообщениеRoman777, Огромное преогромное спасибо! :) Всё так, как нужно.

Автор - vladimir25
Дата добавления - 17.12.2015 в 15:26
vladimir25 Дата: Четверг, 17.12.2015, 15:39 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Roman777, ещё одно небольшое дополнение. А как сделать, чтобы значения можно было только из одного столбца (например из столбца С2:С11) , а не из всей строки?
К сообщению приложен файл: 7680899.xls (50.0 Kb)
 
Ответить
СообщениеRoman777, ещё одно небольшое дополнение. А как сделать, чтобы значения можно было только из одного столбца (например из столбца С2:С11) , а не из всей строки?

Автор - vladimir25
Дата добавления - 17.12.2015 в 15:39
devilkurs Дата: Четверг, 17.12.2015, 16:33 | Сообщение № 15
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 167
Репутация: 43 ±
Замечаний: 0% ±

Excel 2007, 2010
[vba]
Код

i = Selection.Row
If Not (i>2 And i<11) Then MsgBox "Выбрана неверная строка": Exit Sub
j = 3  'Selection.Column
[/vba]


 
Ответить
Сообщение[vba]
Код

i = Selection.Row
If Not (i>2 And i<11) Then MsgBox "Выбрана неверная строка": Exit Sub
j = 3  'Selection.Column
[/vba]

Автор - devilkurs
Дата добавления - 17.12.2015 в 16:33
Roman777 Дата: Четверг, 17.12.2015, 17:01 | Сообщение № 16
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
А я бы сделал так:
[vba]
Код
If Intersect(Selection, Range("C1", "C11")) Is Nothing Then Exit Sub
[/vba]
в макросе:
[vba]
Код
Sub rand3()
Dim zn() As String
Dim i As Long, j As Long
Dim rand As Long, k As Long
Dim Slovo As String, s As Long, Slovo1 As String
If Intersect(Selection, Range("C1", "C11")) Is Nothing Then Exit Sub
i = Selection.Row
j = Selection.Column
Slovo = Replace(Cells(i, j), " ", "")
i = Selection.Row
For s = 1 To Len(Slovo)
If Mid(Slovo, s, 1) = "," Or Len(Slovo) = s Then
    If Slovo1 <> "" Then
    k = k + 1
    ReDim Preserve zn(k)
    zn(k) = Slovo1
    Slovo1 = ""
    Else
    k = k + 1
    ReDim Preserve zn(k)
    zn(k) = Mid(Slovo, s, 1)
    End If
Else
    Slovo1 = Slovo1 & Mid(Slovo, s, 1)
End If
Next s
For j = 5 To 11
If Columns(j).EntireColumn.Hidden = False Then
rand = (Int(1 + (Rnd() * k)))
Cells(i, j) = zn(rand)
End If
Next j
End Sub
[/vba]


Много чего не знаю!!!!
 
Ответить
СообщениеА я бы сделал так:
[vba]
Код
If Intersect(Selection, Range("C1", "C11")) Is Nothing Then Exit Sub
[/vba]
в макросе:
[vba]
Код
Sub rand3()
Dim zn() As String
Dim i As Long, j As Long
Dim rand As Long, k As Long
Dim Slovo As String, s As Long, Slovo1 As String
If Intersect(Selection, Range("C1", "C11")) Is Nothing Then Exit Sub
i = Selection.Row
j = Selection.Column
Slovo = Replace(Cells(i, j), " ", "")
i = Selection.Row
For s = 1 To Len(Slovo)
If Mid(Slovo, s, 1) = "," Or Len(Slovo) = s Then
    If Slovo1 <> "" Then
    k = k + 1
    ReDim Preserve zn(k)
    zn(k) = Slovo1
    Slovo1 = ""
    Else
    k = k + 1
    ReDim Preserve zn(k)
    zn(k) = Mid(Slovo, s, 1)
    End If
Else
    Slovo1 = Slovo1 & Mid(Slovo, s, 1)
End If
Next s
For j = 5 To 11
If Columns(j).EntireColumn.Hidden = False Then
rand = (Int(1 + (Rnd() * k)))
Cells(i, j) = zn(rand)
End If
Next j
End Sub
[/vba]

Автор - Roman777
Дата добавления - 17.12.2015 в 17:01
vladimir25 Дата: Четверг, 17.12.2015, 18:31 | Сообщение № 17
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Roman777, А можно ли сделать, чтобы при нажатии кнопочки всё разом рандомилось, а не по отдельному выделению строки?
 
Ответить
СообщениеRoman777, А можно ли сделать, чтобы при нажатии кнопочки всё разом рандомилось, а не по отдельному выделению строки?

Автор - vladimir25
Дата добавления - 17.12.2015 в 18:31
Roman777 Дата: Четверг, 17.12.2015, 22:09 | Сообщение № 18
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
vladimir25, Тут же несложно дописать...
[vba]
Код

Sub rand3()
Dim zn() As String
Dim i As Long, j As Long
Dim rand As Long, k As Long
Dim Slovo As String, s As Long, Slovo1 As String
For i = 2 to 11
Slovo = Replace(Cells(i, 3), " ", "")
   For s = 1 To Len(Slovo)
     If Mid(Slovo, s, 1) = "," Or Len(Slovo) = s Then
       If Slovo1 <> "" Then
         k = k + 1
         ReDim Preserve zn(k)
         zn(k) = Slovo1
         Slovo1 = ""
       Else
         k = k + 1
         ReDim Preserve zn(k)
         zn(k) = Mid(Slovo, s, 1)
       End If
     Else
       Slovo1 = Slovo1 & Mid(Slovo, s, 1)
     End If
   Next s
   For j = 5 To 11
     If Columns(j).EntireColumn.Hidden = False Then
        rand = (Int(1 + (Rnd() * k)))
        Cells(i, j) = zn(rand)
     End If
   Next j
Next i
End Sub
[/vba]


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Четверг, 17.12.2015, 22:10
 
Ответить
Сообщениеvladimir25, Тут же несложно дописать...
[vba]
Код

Sub rand3()
Dim zn() As String
Dim i As Long, j As Long
Dim rand As Long, k As Long
Dim Slovo As String, s As Long, Slovo1 As String
For i = 2 to 11
Slovo = Replace(Cells(i, 3), " ", "")
   For s = 1 To Len(Slovo)
     If Mid(Slovo, s, 1) = "," Or Len(Slovo) = s Then
       If Slovo1 <> "" Then
         k = k + 1
         ReDim Preserve zn(k)
         zn(k) = Slovo1
         Slovo1 = ""
       Else
         k = k + 1
         ReDim Preserve zn(k)
         zn(k) = Mid(Slovo, s, 1)
       End If
     Else
       Slovo1 = Slovo1 & Mid(Slovo, s, 1)
     End If
   Next s
   For j = 5 To 11
     If Columns(j).EntireColumn.Hidden = False Then
        rand = (Int(1 + (Rnd() * k)))
        Cells(i, j) = zn(rand)
     End If
   Next j
Next i
End Sub
[/vba]

Автор - Roman777
Дата добавления - 17.12.2015 в 22:09
vladimir25 Дата: Четверг, 17.12.2015, 22:53 | Сообщение № 19
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Roman777, теперь почему-то происходит полный рандом. Допустим те строки, где столбец "Значения" пустой, рандомно заполняются значениями, а они должны оставаться пустыми. И там, где всего лишь одно значение, например 5, там также заполняются другие значения, а не только указанные.
К сообщению приложен файл: 3155433.xls (45.0 Kb)


Сообщение отредактировал vladimir25 - Четверг, 17.12.2015, 23:09
 
Ответить
СообщениеRoman777, теперь почему-то происходит полный рандом. Допустим те строки, где столбец "Значения" пустой, рандомно заполняются значениями, а они должны оставаться пустыми. И там, где всего лишь одно значение, например 5, там также заполняются другие значения, а не только указанные.

Автор - vladimir25
Дата добавления - 17.12.2015 в 22:53
Roman777 Дата: Пятница, 18.12.2015, 11:02 | Сообщение № 20
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
vladimir25, Приношу пардона, моя ошибка. Чуть исправил макрос:
[vba]
Код
Sub rand3()
Dim zn() As String
Dim i As Long, j As Long, i_n As Long
Dim rand As Long, k As Long
Dim Slovo As String, s As Long, Slovo1 As String
i_n = Cells(Rows.Count, 3).End(xlUp).Row
Cells(2, 5).Resize(10, 7) = ""
For i = 2 To 11
If Cells(i, 3) <> "" Then
  Slovo = Replace(Cells(i, 3), " ", "")
  For s = 1 To Len(Slovo)
      If Mid(Slovo, s, 1) = "," Or Len(Slovo) = s Then
        If Slovo1 <> "" Then
          k = k + 1
          ReDim Preserve zn(k)
          If Mid(Slovo, s, 1) = "," Then
             zn(k) = Slovo1
          Else
             zn(k) = Slovo1 & Mid(Slovo, s, 1)
          End If
          Slovo1 = ""
        Else
          k = k + 1
          ReDim Preserve zn(k)
          zn(k) = Mid(Slovo, s, 1)
        End If
      Else
        Slovo1 = Slovo1 & Mid(Slovo, s, 1)
      End If
  Next s
  For j = 5 To 11
      If Columns(j).EntireColumn.Hidden = False Then
          rand = (Int(1 + (Rnd() * k)))
          Cells(i, j) = zn(rand)
      End If
  Next j
  Erase zn
  k = 0
End If
Next i
End Sub
[/vba]


Много чего не знаю!!!!
 
Ответить
Сообщениеvladimir25, Приношу пардона, моя ошибка. Чуть исправил макрос:
[vba]
Код
Sub rand3()
Dim zn() As String
Dim i As Long, j As Long, i_n As Long
Dim rand As Long, k As Long
Dim Slovo As String, s As Long, Slovo1 As String
i_n = Cells(Rows.Count, 3).End(xlUp).Row
Cells(2, 5).Resize(10, 7) = ""
For i = 2 To 11
If Cells(i, 3) <> "" Then
  Slovo = Replace(Cells(i, 3), " ", "")
  For s = 1 To Len(Slovo)
      If Mid(Slovo, s, 1) = "," Or Len(Slovo) = s Then
        If Slovo1 <> "" Then
          k = k + 1
          ReDim Preserve zn(k)
          If Mid(Slovo, s, 1) = "," Then
             zn(k) = Slovo1
          Else
             zn(k) = Slovo1 & Mid(Slovo, s, 1)
          End If
          Slovo1 = ""
        Else
          k = k + 1
          ReDim Preserve zn(k)
          zn(k) = Mid(Slovo, s, 1)
        End If
      Else
        Slovo1 = Slovo1 & Mid(Slovo, s, 1)
      End If
  Next s
  For j = 5 To 11
      If Columns(j).EntireColumn.Hidden = False Then
          rand = (Int(1 + (Rnd() * k)))
          Cells(i, j) = zn(rand)
      End If
  Next j
  Erase zn
  k = 0
End If
Next i
End Sub
[/vba]

Автор - Roman777
Дата добавления - 18.12.2015 в 11:02
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Случайное заполнение значениями из определенных ячеек (Макросы/Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!