Страницы: 1
RSS
Число строк в ячейке
 
Подскажите, как можно выделить все ячейки на листе, где число строк больше 4 (стоит перенос по словам). Размер ограничиваю 30х30.  
 
Sub макрос()  
  k = 0  
  For j = 1 To 30  
    For i = 1 To 30  
       If (число строк больше 4) Then (выделяем ячейку)  
       k = k+1    
       End If  
     Next i  
   Next j  
MsgBox ("Найдено ячеек " k)  
End Sub
 
Можно так попробовать:  
 
Sub test()  
Dim cell As Range  
   For Each cell In Range(Cells(1, 1), Cells(30, 30)).Cells  
       If Len(cell) - Len(Replace(cell, Chr(10), "")) >= 4 Then  
           cell.Interior.ColorIndex = 3  
       End If  
   Next  
End Sub
 
Не работает. Прикрепил файл, чтобы пояснить о чем речь.
 
Ячейки, где текст больше 4 строк выделены коричневым. Всего их три в данном примере. В оригинале они не выделяются.
 
Конечно не будет работать, я понял фразу  
"(стоит перенос по словам)" буквально, то есть "Alt+Enter"  
 
Тогда не знаю как точно сделать, сложно это  
можно попробовать с длинной строки  
и можно попробовать условным форматированием поиграться:
 
К сожалению, длину строки не определишь - нельзя ее вычислить, буквы имеют разную ширину.
 
Длинна строки не есть то что вы видите на экране (до автоматического переноса), это длинна строки, смотрите пример!  
 
Не очень понимаю конечную задачу, но может попытаться предусмотреть результат заранее?  
Например принудительны перенос в ячейке можно организовать при помощи "Alt+Enter"  
Чтобы все буквы были одной ширины можно использовать моноширинные шрифты, например "Courier New"
 
Конечный результат - найти все ячейки, где больше 4 строк, то есть текст оказывается вне зоны видимости (не читается). Сейчас приходится все проверять с экрана, искать, где текст вышел за рамку, а хотелось, чтобы немного этот процесс автоматизировать.  
Принудительный перенос отпадает по определению, какой смысл тогда в макросе, если все итак будет найдено.  
Речь идет о сканвордах, а в клетках стоят определения.
 
Проще всего подсчитать сколько знаков переноса в ячейке. Если больше 3, то выделяем эту ячейку.  
Но какой знак (код) ставит эксель при переносе части слова на новую строку, если оно не помещается целиком?
 
В том то всё и дело, что Excel "ничего не ставит" и вычислить программно где он, Excel осуществит перенос строк - невозможно (или очень сложно).  
При одной ширине это будет одно количество переносов и соответственно строк  
При другой ширение - совершенно другое.
 
Пробуйте. Если пройти по шагам, то все понятно.  
 
Sub bb()  
Dim c As Range, h, d As Range, ur As Range  
Set ur = ActiveSheet.UsedRange  
Set d = Workbooks.Add(xlWBATWorksheet).Sheets(1).Cells(1, 1)  
For Each c In ur  
   If Len© > 1 Then 'ячейка с описанием  
1       c.Copy d  
       If h = 0 Then 'предельная высота не определена  
           d.ColumnWidth = c.ColumnWidth  
           d = String(3, vbLf)  
           h = d.Height * 1.05 'это высота ячейки с 4-мя строками  
                               'с небольшим запасом  
           GoTo 1  
       End If  
       If d.Height > h Then 'более 4 строк  
           c.Interior.Color = vbRed  
       End If  
   End If  
Next  
d.Parent.Parent.Close 0  
End Sub
 
Попытаюсь вникнуть. Бэйсик изучал лет 20 назад, а от делфи (который как-то помню) ВБа очень далек.
 
Спасибо, все работает!  
Понять до конца так и не удалось. Сложно для меня.
Страницы: 1
Читают тему
Наверх