Witam! Szukam funkcji, która wykona poniższe działanie:
1-4 -> A
5-10 -> B
11-15 -> C
.
.
.
Wpisuję w komórkę X liczbę 2, a w komórce Y ma pojawić się A.
Próbowałem to zrobić najprostszą funkcją, jaka mi przyszła do głowy JEŻELI(ORAZ(;;);), ale Excel ma limit 30 bodajże wyrażeń logicznych, więc się to nie nadaje.
Możesz użyć do tego celu makro. Poniżej załączam fragment kodu:
Public Function GetLetterFromNumber(number As Integer)
Dim result As String
If number < 1 Then
result = ""
ElseIf number <= 4 Then
result = "A"
ElseIf number <= 10 Then
result = "B"
ElseIf number <= 15 Then
result = "C"
' itd.
End If
GetLetterFromNumber = result
End Function
W komórce Excela będziesz to wywoływał jak każdą inną predefiniowaną funkcję czyli np. =GetLetterFromNumber(A1) Ten kod musisz dokończyć, tzn. ręcznie podopisywać resztę warunków. EDIT: Jest też druga wersja kodu.
Public Function GetLetterFromNumber(number As Integer)
Dim result As String
Dim letters As Variant
Dim i, j As Integer
letters = Split("A B C D E F G H I J K L M N O P R S T U W Y Z", " ")
result = ""
If number < 1 Then
ElseIf number <= 4 Then
result = letters(0)
ElseIf number <= 10 Then
result = letters(1)
Else
j = 16
For i = 2 To UBound(letters)
If number < j Then
result = letters(i)
Exit For
Else
j = j + 5
End If
Next
End If
GetLetterFromNumber = result
End Function
Zadziała pod warunkiem, że przedziały począwszy od liczby 11 tworzone są w następujący sposób:
11 - 15
16 - 20
21 - 25
26 - 30
itd.
Tą listę z literami “A B C D E F G H I J K L M N O P R S T U W Y Z” możesz sobie zmienić na taką jaką potrzebujesz. Jedyne o czym musisz pamiętać to żeby oddzielać kolejne litery spacją.
Już prawie mam to, co chciałem. Gdybyś jeszcze mógł mi powiedzieć, jak zrobić z tego funkcję, tak aby działała dynamicznie na parametrach, a nie określonych komórkach arkusza.
Poniżej stworzyłem sobie taką funkcyjkę, w której nie wiem jednak jak zastąpić wartość A1 parametrem. Funkcja ta działa, ale tylko dla komórki A1.
Public Function wyrok(liczba As Long) As String
If Not IsEmpty(Range("A1").Value) And liczba = 0 Then
wyrok = "ok"
End If
End Function