Установка ограничения длины ячеек (Microsoft Excel)
Крейг разрабатывает рабочий лист и хочет знать, есть ли способ указать максимальное количество символов, которое можно ввести в любую ячейку. Он не хочет использовать проверку данных, чтобы наложить ограничение.
Невозможно сделать это прямо в Excel без (как упоминает Крейг)
с помощью проверки данных. Однако есть несколько вещей, которые вы можете попробовать для достижения желаемого эффекта. Во-первых, вы можете использовать формулу для проверки длины любой ячейки, а затем при желании отобразить сообщение об ошибке. Например, если ячейки, которые вы хотите проверить, находятся в столбце C, вы можете использовать следующую формулу:
=IF((LEN(C1)>15),"Cell is Too Long","")
Поместите формулу в ячейку справа от проверяемой ячейки (например, в ячейку D1), а затем скопируйте ее на необходимое количество ячеек.
Когда ввод выполняется в C1, и если он превышает 15 символов, отображается сообщение.
Если такой прямой подход нежелателен, вам нужно будет использовать макросы для проверки. Ниже приведен простой пример, который запускается всякий раз, когда что-то изменяется на листе. Затем каждая ячейка на листе проверяется, чтобы убедиться, что она не превышает 15 символов. Если такая ячейка обнаружена, отображается окно сообщения и ячейка очищается.
Private Sub Worksheet_SelectionChange(ByVal Target As Range) For Each cell In UsedRange If Len(cell.Value) > 15 Then MsgBox " Can't enter more than 15 characters" cell.Value = "" End If Next End Sub
Более надежный подход — проверить обработчик событий, чтобы увидеть, было ли изменение внесено где-то в пределах диапазона ячеек, длину которых необходимо ограничить.
Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim rng As Range Dim rCell As Range Dim iChars As Integer On Error GoTo ErrHandler 'Change these as desired iChars = 15 Set rng = Me.Range("A1:A10") If Not Intersect(Target, rng) Is Nothing Then Application.EnableEvents = False For Each rCell In Intersect(Target, rng) If Len(rCell.Value) > iChars Then rCell.Value = Left(rCell.Value, iChars) MsgBox rCell.Address & " has more than" _ & iChars & " characters." & vbCrLf _ & "It has been truncated." End If Next End If ExitHandler: Application.EnableEvents = True Set rCell = Nothing Set rng = Nothing Exit Sub ErrHandler: MsgBox Err.Description Resume ExitHandler End Sub
Чтобы использовать этот макрос, вам просто нужно изменить значение, присвоенное iChars (представляет максимально допустимую длину) и диапазон, присвоенный rng (в настоящее время установлен A1: A10). Поскольку макрос проверяет только изменения в пределах указанного диапазона, он намного быстрее работает с большими листами, чем макрос, который проверяет все используемые ячейки.
_Примечание: _
Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (3150) применим к Microsoft Excel 97, 2000, 2002 и 2003. Вы можете найти версию этого совета для ленточного интерфейса Excel (Excel 2007 и новее) здесь:
link: / excelribbon-Setting_a_Length_Limit_on_Cells [Установка ограничения длины ячеек]
.