Господа, нужна Ваша экспертная помощь. Суть дела в следущем: 1) вся видимая область таблицы заполняется случайными числами от 1 до 100 (выполнил) 2) InputBox'ом спрашивается цифра от 0 до 9 (выполнил) 3) и затем нужно, чтобы только эта цифра (а не вся ячейка) во всех рандомно введеных ячейках покрасилась в красный. (Не получается, нужна помощь)
В приложении мой макрос, который окрашивает не только одну цифру, а всю ячейку, если там есть искомая цифра. На снимке экрана в столбце А - ошибочная окраска. В столбцах B, C, D - правильная. Но даже этот результат возможен только если числа введены ы ручную и ячейки имеют формат текста. Если же числа вводятся программно (рандомно от 1-100) и даже если формат ячеек меняется на текст одну цифру покрасить не получается. Есть идеи? Прикрепляю файл, в котором все еще раз наглядно продемонстрированно.
Господа, нужна Ваша экспертная помощь. Суть дела в следущем: 1) вся видимая область таблицы заполняется случайными числами от 1 до 100 (выполнил) 2) InputBox'ом спрашивается цифра от 0 до 9 (выполнил) 3) и затем нужно, чтобы только эта цифра (а не вся ячейка) во всех рандомно введеных ячейках покрасилась в красный. (Не получается, нужна помощь)
В приложении мой макрос, который окрашивает не только одну цифру, а всю ячейку, если там есть искомая цифра. На снимке экрана в столбце А - ошибочная окраска. В столбцах B, C, D - правильная. Но даже этот результат возможен только если числа введены ы ручную и ячейки имеют формат текста. Если же числа вводятся программно (рандомно от 1-100) и даже если формат ячеек меняется на текст одну цифру покрасить не получается. Есть идеи? Прикрепляю файл, в котором все еще раз наглядно продемонстрированно.Nostex
а то как же! в макросе генерируете в цикле случайные числа, преобразуете в текст, делаете формат ячеек текстрвым и сохраняете числа на лист как текст. после этого красите нужную цифру.
конечно, минут 10 уйдёт на такой код, но ради такой важной задачи не жалко.
а то как же! в макросе генерируете в цикле случайные числа, преобразуете в текст, делаете формат ячеек текстрвым и сохраняете числа на лист как текст. после этого красите нужную цифру.
конечно, минут 10 уйдёт на такой код, но ради такой важной задачи не жалко.ikki
помощь по Excel и VBA ikki@fxmail.ru, icq 592842413, skype alex.ikki
генерируете в цикле случайные числа, преобразуете в текст, делаете формат ячеек текстрвым и сохраняете числа на лист как текст.
Но разве все эти действия, что ты перечисляешь не выполнены у меня в файле с примером? Я заполняю там видимую область случайными числави, затем преобразую эти ячейки в формат текста и окрашивание должно касаться только одной цифры, введеной в InputBox, но красится по-прежнему вся ячейка, хоть эти и текстовый формат. В чем же дело? Я же так и пытался сделать, но не получилось! И еще раз большое спасибо за отклик! =)
генерируете в цикле случайные числа, преобразуете в текст, делаете формат ячеек текстрвым и сохраняете числа на лист как текст.
Но разве все эти действия, что ты перечисляешь не выполнены у меня в файле с примером? Я заполняю там видимую область случайными числави, затем преобразую эти ячейки в формат текста и окрашивание должно касаться только одной цифры, введеной в InputBox, но красится по-прежнему вся ячейка, хоть эти и текстовый формат. В чем же дело? Я же так и пытался сделать, но не получилось! И еще раз большое спасибо за отклик! =)Nostex
Sub VisibleArea() ActiveWindow.VisibleRange.Select Dim aCell As Range, mR As Range Set mR = Selection Dim x As Integer x = InputBox("Введи число от 0 до 9") Dim iInt As Integer For Each aCell In Selection.Cells aCell = CInt(1 + 99 * Rnd) aCell.NumberFormat = "@" aCell.Value = CStr(aCell.Value) If InStr(1, aCell, x) > 0 Then For i = 1 To Len(aCell.Value) If Mid(aCell, i, 1) = x Then aCell.Characters(i, 1).Font.ColorIndex = 3 Else aCell.Characters(i, 1).Font.ColorIndex = xlAutomatic End If Next End If Next Set mR = Nothing End Sub
[/vba]
Внимательней надо советы читать. [vba]
Код
Sub VisibleArea() ActiveWindow.VisibleRange.Select Dim aCell As Range, mR As Range Set mR = Selection Dim x As Integer x = InputBox("Введи число от 0 до 9") Dim iInt As Integer For Each aCell In Selection.Cells aCell = CInt(1 + 99 * Rnd) aCell.NumberFormat = "@" aCell.Value = CStr(aCell.Value) If InStr(1, aCell, x) > 0 Then For i = 1 To Len(aCell.Value) If Mid(aCell, i, 1) = x Then aCell.Characters(i, 1).Font.ColorIndex = 3 Else aCell.Characters(i, 1).Font.ColorIndex = xlAutomatic End If Next End If Next Set mR = Nothing End Sub
Sub test() With Sheets(3) .UsedRange.Clear .[a1:c20].NumberFormat = "@" For Each c In .[a1:c20].Cells c.Value = CStr(CInt(Rnd(1) * 1000)) Next s = "5" For Each c In .[a1:c20].Cells For i = 1 To Len(c.Text) If Mid(c.Text, i, 1) = s Then c.Characters(i, 1).Font.ColorIndex = 3 Next Next End With End Sub
[/vba]
[vba]
Код
Sub test() With Sheets(3) .UsedRange.Clear .[a1:c20].NumberFormat = "@" For Each c In .[a1:c20].Cells c.Value = CStr(CInt(Rnd(1) * 1000)) Next s = "5" For Each c In .[a1:c20].Cells For i = 1 To Len(c.Text) If Mid(c.Text, i, 1) = s Then c.Characters(i, 1).Font.ColorIndex = 3 Next Next End With End Sub
@ ikki: Офигенно! Просто шикарно! Спасибо! Я немного дополнил под свои надобности, но работает превосходно! ikki, да вы просто повелитель VBA =) У мееня еще один вопросик: А что это за синтаксис такой для написания областей? .[a1:c20]. ? Он эквивалентен Range("A1:C20") только без лишних символов?
Браво! и спасибо!
@ ikki: Офигенно! Просто шикарно! Спасибо! Я немного дополнил под свои надобности, но работает превосходно! ikki, да вы просто повелитель VBA =) У мееня еще один вопросик: А что это за синтаксис такой для написания областей? .[a1:c20]. ? Он эквивалентен Range("A1:C20") только без лишних символов?