Formuła Excel 2010, jak napisać tę formułę? (VBA)

0

Potrzebuję trochę pomocy od bardziej doświadczonych użytkowników Excel VBA.

Zasadniczo mam 2 grupy 3 komórek (łącznie 6 komórek) Jeśli jedna grupa 3 komórek jest wypełniona, musi ją zaakceptować i nie zwracać okna komunikatu.

Jeśli jedna z dwóch grup nie jest wypełniona (pusta) lub zwraca błąd, musi wyświetlić „msgbox błędu”

Dwie grupy 3 komórek to: (A39, A40, A41) i (E39, E40, E41)

To jest obecnie w mojej formule:

If IsError(Range("E39, E40, E41")) Then MsgBox ("error msgbox"): Exit Sub
If Range("E39, E40, E41") = Blank Then MsgBox ("error msgbox"): Exit Sub

Jak dodać A39, A40, A41 do tej formuły, aby w przypadku
wypełnienia grupy 1 (A39, A40, A41) lub grupy 2 (E39, E40, E41) nie pojawiał się komunikat „błąd msgbox”?

Sam próbowałem się z tym bawić, ale zwróciłoby „msgbox błędu”, gdyby wszystkie 6 komórek nie były wypełnione.

Próbowałem spojrzeć na instrukcje AND, OR, ale nie do końca mogę uzyskać żądaną funkcję.

Oto zdjęcie, które może pomóc

wprowadź opis zdjęcia tutaj

Każda pomoc byłaby bardzo mile widziana

12022014
źródło
Czy pojedyncza komórka grupy może być pusta, czy też wszystkie komórki muszą być puste? Co by się stało, gdyby wypełniono tylko 5 komórek (pokaż pole komunikatu lub nie)? Czy możesz potwierdzić, że chcesz wyświetlić okno komunikatu tylko wtedy, gdy obie grupy NIE są wypełnione (lub w przypadku błędu)?
Dave
Hej, dziękuję za odpowiedź. Jeśli jedna z 3 komórek w grupie jest pusta, musi zwrócić błąd msgbox (wszystkie 3 komórki w grupie muszą mieć wartość), to oczywiście musi również zwrócić błąd, jeśli obie grupy są puste / zwróć błąd
12022014
Twój ostatni komentarz jest nieco mylący (przepraszam). To, co tak naprawdę mówisz, to (tak myślę), jeśli jakakolwiek komórka (lub komórki) jest błędna lub pusta, to pokaż okno komunikatu?
Dave
Hej, więc ty (i wszyscy inni) masz więcej informacji Postanowiłem zrobić prosty obraz: s12.postimg.org/3y2y5xrv1/Geen_naam.png
12022014

Odpowiedzi:

1

Masz problemy z kodem. Po pierwsze, Range("E39, E40, E41")nie odnosi się do tych trzech komórek. Trzeba je oddzielić przecinkami poza cudzysłowami Range("E39", "E40", "E41").

Po drugie, aby właściwie ocenić, czy te komórki są puste, musisz je oddzielić w swoim IFwyciągu, ponieważ:

If Range("E39") = "" Or Range("E40") = "" Or Range("E41") = "" Then
    'code here
End If

To samo dotyczy IsError:

If IsError(Range("E39")) Or IsError(Range("E40")) ...

Jednak aby zgrupować logikę, musisz pomyśleć inaczej, ponieważ spowoduje to wyrzucenie błędu, gdy którakolwiek z tych komórek będzie pusta / zawiera błąd. Więc możesz rozważyć dodanie dwóch nowych zmiennych, które ustawiłeś jako Truelub w Falsezależności od tego, czy grupa jest poprawnie wypełniona, czy nie. Przykład:

Dim isFilled1 as Boolean = False
Dim isFilled2 as Boolean = False

If Not Range("E39") = "" Or Not Range("E40") = "" Or Not Range("E41") = "" Then
    'All the cells in this range contain a value so set isFilled1 to True
    isFilled1 = True
End If

If IsError(Range("E39")) Or IsError(Range("E40")) Or IsError(Range("E40")) Then
    'The cells may contain values, but one or more evaluated as an error therefore set isFilled1 to False
    isFilled1 = False
End If

If Not Range("A39") = "" Or Not Range("A40") = "" Or Not Range("A41") = "" Then
    'All the cells in this range contain a value so set isFilled2 to True
    isFilled2 = True
End If

If IsError(Range("A39")) Or IsError(Range("A40")) Or IsError(Range("A40")) Then
    'The cells may contain values, but one or more evaluated as an error therefore set isFilled2 to False
    isFilled2 = False
End If

'Now check if isFilled1 or isFilled2 are True

If isFilled1 = True or isFilled2 = True Then
    'Hooray, one of the groups is properly filled
Else
    'Neither group is properly filled; show msgbox
    MsgBox("error msgbox")
End If

Być może będziesz musiał dostosować ten kod, aby dopasować go do swojej sytuacji, ale tak do niego podchodzę.

nagyben
źródło
Zredagowałem go na własne potrzeby, ale wydaje się, że nie działa. Gdy tylko 2 z 3 pól w grupie są wypełnione, nie zwraca błędu msgbox. Chyba muszę zmienić oświadczenia Or na And?
12022014
Zamiana instrukcji Or na A i instrukcje rzeczywiście działały. Dzięki za pomoc!
12022014
Podam
Fajnie, cieszę się, że mogłem pomóc!
nagyben
0

Musiałem go trochę dostosować, aby działał dobrze z plikiem Excela, którego używałem.

Z podziękowaniami dla exantas (za kod) i Dave'a Rooka (za edycję mojego postu) , to jest końcowy kod:

Dim isFilled1 As Boolean
Dim isFilled2 As Boolean

If Not Range("E39") = "" And Not Range("E40") = "" And Not Range("E41") = "" Then
'Set isFilled1 To True if these cells don't return an empty cell
isFilled1 = True
End If
If IsEmpty(Range("E39")) Or IsEmpty(Range("E40")) Or IsEmpty(Range("E41")) Then
'If these cells don't have a value, set isFilled1 to False
isFilled1 = False
End If

If Not Range("A39") = "" And Not Range("A40") = "" And Not Range("A41") = "" Then
'Set isFilled1 To True if these cells don't return an empty cell
isFilled1 = True
End If
If IsEmpty(Range("A39")) Or IsEmpty(Range("A40")) Or IsEmpty(Range("A41")) Then
'If these cells don't have a value, set isFilled1 to False
isFilled1 = False
End If

If isFilled1 = True Or isFilled2 = True Then
'One of the groups is properly filled
Else
'Neither group is properly filled; show msgbox
MsgBox ("error msgbox"): Exit Sub

Musiałem zamienić formułę w komórkach E39, E40, E41, A39, A40, A41 na :

= JEŻELI (CZY.BŁĄD (stara_formula); ""; (stara_formula), aby wyświetlała pustą / pustą komórkę po zwróceniu błędu.

12022014
źródło