Excel: проверка данных, как заставить пользователя ввести строку длиной 2 символа? - PullRequest
2 голосов
/ 14 декабря 2011

Я бы хотел добавить проверку данных в ячейку в последней версии Excel.Я хотел бы заставить пользователя ввести строку длиной в два символа, первый символ - цифру, а второй - букву.

например,

1m
2m
9w
8y

Как быВы делаете это?

Кроме того, если вводится строчная буква, я хотел бы сделать ее заглавной буквой, когда ввод завершен.

Ответы [ 6 ]

5 голосов
/ 14 декабря 2011

Только для первой части (VBA не требуется) вы можете использовать проверку данных:

  • Выберите ячейку, которую хотите проверить (например, A1)
  • ВЛента, перейдите к Данные> Проверка данных
  • . В Allow: выберите Пользовательский
  • В поле введите следующую формулу: =IF(AND(LEN(A1)=2,ISNUMBER(VALUE(LEFT(A1,1))),ISTEXT(RIGHT(A1,1))),TRUE,FALSE)
  • На вкладке Предупреждение об ошибке измените диалоговое окно, чтобы объяснить пользователю, что он должен делать, например:

У вас естьчтобы ввести число, за которым следует буква.

Кстати, вы можете добавить чек с помощью теста UPPERCASE.

[EDIT] Также посмотрите ответ brettj дляаналогичное, но оптимизированное решение

2 голосов
/ 15 декабря 2011

Для первой части вам понадобится формула для проверки данных

=AND(LEN(A1)=2,ISNUMBER(VALUE(LEFT(A1,1))),CODE(RIGHT(LOWER(A1),1))>=97,CODE(RIGHT(LOWER(A1),1))<=122)

В этой части выполняется регистронезависимый тест для буквы от a до z CODE(RIGHT(LOWER(A1),1))>=97,CODE(RIGHT(LOWER(A1),1))<=122)

ISTEXT(RIGHT(A1,1))) будет проверять символы, отличные от a-z, на текст, так как это строковый тест, допускаются даже цифры. Вот почему часть VALUE в (VALUE(LEFT(A1,1))) необходима для принудительной числовой оценки первой позиции в строке

2 голосов
/ 14 декабря 2011

Выберите диапазон, затем в меню «Данные» выберите «Проверка».
Разрешить: выберите Text length, минимум = 2, максимум = 2

2 голосов
/ 14 декабря 2011

Джером,

Если вы хотите разрешить это без VBA, вы можете

  • использовать (скрытый) лист, где вы вводите все 260 комбинацийОт 0А до 9Z в одном столбце.
  • Дайте этому диапазону имя, например, "MyList".
  • перейдите на лист ввода (например, A1) и используйте проверку данных, выбрав опцию «list».
  • В поле источника нажмите [F3], чтобы выбрать «MyList».

Если вам нужны эти данные в верхнем регистре, вы можете использовать формулу =UPPER(A1) везде, где вы используете ввод.

1 голос
/ 14 декабря 2011

Вот метод избыточного убийства, в буквальном смысле просто для удовольствия (не принижайте меня за то, что я немного повеселился с VBA - на самом деле полезно знать, как это сделать).Он добавляет список проверки данных в диапазон, в котором допускается только число, за которым следует заглавная буква.Я делаю это буквально, добавляя каждую допустимую комбинацию :) Конечно, вам не нужно выбирать из списка SELECT, но если вы попытаетесь набрать то, что не разрешено, вы получите зуммер:)

Sub AddValidation()

Dim cell As Range
Dim dict As Object
Set dict = CreateObject("scripting.dictionary")
Dim alphabet As String, numbers As String
alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
numbers = "1234567890"
Dim validList As String

For i = 1 To Len(numbers)
    For j = 1 To Len(alphabet)
        dict.Add Mid$(numbers, i, 1) & Mid$(alphabet, j, 1), 1
    Next
Next

validList = Join(dict.keys, ", ")

'Example using B1:B10
With Range("B1:B10").Validation
    .Delete
    .Add Type:=xlValidateList, _
    AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:=validList
    .IgnoreBlank = True
    .InCellDropdown = True
    .InputTitle = ""
    .ErrorTitle = ""
    .InputMessage = ""
    .ErrorMessage = "Invalid data entered"
    .ShowInput = True
    .ShowError = True
End With

End Sub
0 голосов
/ 14 декабря 2011

Если вы можете использовать VBA, попробуйте перехватить событие Worksheet_Change:

Private Sub Worksheet_Change(ByVal Target As Range)
    MsgBox "You just changed " & Target.Address
    ' your logic goes here
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...