Здравствуйте. Как реализовать данную функцию (Сразу скажу, я человек, практически ничего не знающий, в этом деле).
Есть допустим строка в которой много ячеек и она должна заполняться в случайном порядке значениями, которые указаны в других(другой) ячейке(ячейках), и конечно будет это удобно, если будет это назначено на кнопку для каждой строки. Как это сделать?
Почему пишу в ячейки или ячейках? Если возможно, чтобы все значения эти были записаны через запятую, то в ячейке, если невозможно, то в ячейках.
Лучше конечно глянуть в файле, так понятнее будет.
Здравствуйте. Как реализовать данную функцию (Сразу скажу, я человек, практически ничего не знающий, в этом деле).
Есть допустим строка в которой много ячеек и она должна заполняться в случайном порядке значениями, которые указаны в других(другой) ячейке(ячейках), и конечно будет это удобно, если будет это назначено на кнопку для каждой строки. Как это сделать?
Почему пишу в ячейки или ячейках? Если возможно, чтобы все значения эти были записаны через запятую, то в ячейке, если невозможно, то в ячейках.
Лучше конечно глянуть в файле, так понятнее будет.vladimir25
Здесь строка должна заполнятся в случайном порядке значениями, которые берутся в столбце "значения". То есть, к примеру кликнули "кнопку 1" и "строка 1" заполнилась в случайном порядке значенями, которые указаны в столбце "значения" строки 1
Вообще не понятно как это "заполняются в случайном порядке значениями, которые указаны в столбце "значения"" Т.е. Вы хотите рандом? Например у Вас в первой строке в Значания V и 3, соответственно в первой строке рандомом раскидать V 3 3 V 3 например?
vladimir25, у Вас даже в файле написано
Цитата
Здесь строка должна заполнятся в случайном порядке значениями, которые берутся в столбце "значения". То есть, к примеру кликнули "кнопку 1" и "строка 1" заполнилась в случайном порядке значенями, которые указаны в столбце "значения" строки 1
Вообще не понятно как это "заполняются в случайном порядке значениями, которые указаны в столбце "значения"" Т.е. Вы хотите рандом? Например у Вас в первой строке в Значания V и 3, соответственно в первой строке рандомом раскидать V 3 3 V 3 например?devilkurs
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]
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]
Roman777, Подходящий вариант, но только значения должны быть рандомно разбросаны именно в таблице в ячейках, а не в отдельной строке через запятую. Через запятую я имел ввиду сами значения записывать (если это возможно) , а рандом только в ячейках. Гляньте вот, как я имею ввиду
Roman777, Подходящий вариант, но только значения должны быть рандомно разбросаны именно в таблице в ячейках, а не в отдельной строке через запятую. Через запятую я имел ввиду сами значения записывать (если это возможно) , а рандом только в ячейках. Гляньте вот, как я имею ввидуvladimir25
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]
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
Roman777, Спасибо большое. А можно немного дополнить этот код, чтобы только видимые столбцы заполнялись? Посмотрите в файлике, там более понятно.
Roman777, Спасибо большое. А можно немного дополнить этот код, чтобы только видимые столбцы заполнялись? Посмотрите в файлике, там более понятно.vladimir25
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]
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
Roman777, ещё одно небольшое дополнение. А как сделать, чтобы значения можно было только из одного столбца (например из столбца С2:С11) , а не из всей строки?
Roman777, ещё одно небольшое дополнение. А как сделать, чтобы значения можно было только из одного столбца (например из столбца С2:С11) , а не из всей строки?vladimir25
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
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]
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
Roman777, теперь почему-то происходит полный рандом. Допустим те строки, где столбец "Значения" пустой, рандомно заполняются значениями, а они должны оставаться пустыми. И там, где всего лишь одно значение, например 5, там также заполняются другие значения, а не только указанные.
Roman777, теперь почему-то происходит полный рандом. Допустим те строки, где столбец "Значения" пустой, рандомно заполняются значениями, а они должны оставаться пустыми. И там, где всего лишь одно значение, например 5, там также заполняются другие значения, а не только указанные.vladimir25
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