Odpowiedzi:
Pierwszą część pytania można uzyskać dzięki walidacji danych i niestandardowemu formatowi. W tym celu najpierw zaznacz cały zakres do sprawdzenia, a następnie kliknij przycisk Sprawdzanie poprawności danych na wstążce Dane. Następnie, aby ustawić format niestandardowy, na karcie Ustawienia okna dialogowego Walidacja danych zmień listę rozwijaną Zezwalaj na „Własne” i wklej lub wpisz formułę, w tym wiodącą =
w polu Formula:
=AND(A1 > 0, A1 < 1000000000, A1 = INT(A1), COUNTIF(A:A, A1) <= 1)
AND
formuła zwraca prawdę, jeśli wszystkie jej argumenty są prawdziwe. A1 > 0
potwierdza, że liczba jest dodatnia. A1 < 1000000000
sprawdza, czy liczba ma długość co najwyżej 9 znaków. A1 = INT(A1)
sprawdza, czy liczba nie jest dziesiętna. COUNTIF(A:A, A1) <= 1
sprawdza, czy zakres zawiera tylko 1 instancję liczby. Nie ma potrzeby sprawdzania, czy nie ma zer wiodących, chyba że zakres jest sformatowany jako tekst, ponieważ program Excel automatycznie usuwa wszystkie początkowe zera z liczb.
Ta formuła zakłada, że zakres docelowy to kolumna A. Zmień wszystkie wystąpienia A1
w formule do pierwszej komórki w zakresie docelowym i $A:$A
do całego zakresu. Upewnij się, że używasz względnego formularza odniesienia, gdy odnosisz się do pierwszej komórki i bezwzględnego formularza odniesienia, gdy odnosi się do całego zakresu (tj. B1
dla pierwszej komórki i $B$1:$B$20
dla całego zakresu.)
Zalety sprawdzania poprawności danych polegają na tym, że nie ma potrzeby używania makr i można określić niestandardowy komunikat wejściowy i niestandardowy komunikat o błędzie bezpośrednio w oknie dialogowym Walidacja danych.
Druga część twojego pytania nie może być łatwo wykonana bez VBA. Jeśli pracujesz z tabelą i stosujesz sprawdzanie poprawności danych do kolumny, można to łatwo osiągnąć za pomocą ukrytej kolumny i funkcji niestandardowej podobnej do następującej:
Function LimitAlpha24(str As String) As Boolean
Dim rx As Object
Set rx = CreateObject("VBScript.RegExp")
rx.Pattern = "^[A-Za-z-]{0,24}$"
LimitAlpha24 = rx.Test(str)
End Function
Umieść następujące makro zdarzenia w obszarze kodu arkusza:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim A As Range, v As Variant, L As Long, i As Long
Dim wf As WorksheetFunction
Set wf = Application.WorksheetFunction
Set A = Range("A1:A10")
If Intersect(Target, A) Is Nothing Then Exit Sub
Application.EnableEvents = False
v = Target.Text
L = Len(v)
If L > 9 Then
MsgBox "input too long"
GoTo errOut
End If
For i = 1 To L
If Mid(v, i, 1) Like "[0-9]" Then
Else
MsgBox "bad character"
GoTo errOut
End If
Next i
If Left(v, 1) = "0" Then
MsgBox "leading zero"
GoTo errOut
End If
If wf.CountIf(A, v) > 1 Then
MsgBox "duplicate value"
GoTo errOut
End If
Application.EnableEvents = True
Exit Sub
errOut:
Target.Clear
Target.Select
Application.EnableEvents = True
End Sub
Zakładany zakres komórek to A1: A10
Ponieważ jest to kod arkusza roboczego, jest bardzo łatwy w instalacji i automatycznym użyciu:
Jeśli masz jakiekolwiek wątpliwości, najpierw spróbuj w arkuszu próbnym.
Jeśli zapiszesz skoroszyt, makro zostanie zapisane wraz z nim. Jeśli używasz wersji programu Excel później niż w 2003 r., Musisz ją zapisać plik jako .xlsm, a nie .xlsx
Aby usunąć makro:
Aby dowiedzieć się więcej o makrach w ogóle, zobacz:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
i
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
Aby dowiedzieć się więcej o makrach zdarzeń (kod arkusza), zobacz:
http://www.mvps.org/dmcritchie/excel/event.htm
Makra muszą być włączone, aby działało!