2017-08-02 80 views
8

VBA sposoby Evaluate()[] i mogą być stosowane zarówno do powrotu tablic:Jak oceny preparatów macierzy z metodą ocenić

Dim i As Variant 
i = Evaluate("{1,2;3,4}") 
i = [{1,2;3,4}] 

obie linie ustawione i być 2D tablica zawierająca numery 1-4 . Dodatkową funkcjonalność jest Evaluate(...)(1,2) zwraca indeksowany elementu R1C2 tablicy (to znaczy 2 - [...](1,2) błędów tymczasem)

mi zastanawiać, czy istnieje jakikolwiek składnię dla przeprowadzenia oceny funkcji arkusza array-powrót w taki sam sposób, np

i = Evaluate("LEN(A1:A5)>3") 'or similar like [{LEN(A1:A5)>3}] 

która powinna zwracać tablicę 1D jak {False,False,False,True,True} jeśli mam tekst dłuższy niż 3 znaki w A4 & A5, ale tak nie jest.

Jeśli nie, czy istnieje inny 1-liniowy sposób oceny formuły tablicowej, aby zwrócić pełną tablicę? Szukam jakiegokolwiek podejścia, które daje najmniejszą liczbę postaci.

+0

'i = dokonanie oceny („rząd (A1: A5)> 3”) ' – SJR

+0

@SJR, dziwne, że to działa, ale' i = Evaluate ("LEN (A1: A5)> 2") nie. Spodziewam się, że zwróci tablicę, ale zwraca tylko jedną wartość logiczną, czy istnieje pewna niejednoznaczność, której nie widzę? – Greedo

+2

Rzeczywiście dziwne. Nie jestem pewien dlaczego, ale niektóre funkcje muszą być "zmuszone" do prawidłowego działania, np. to działa 'i = Evaluate (" JEŻELI (WIERSZ (A1: A5), LEN (A1: A5)> 2) ")' – SJR

Odpowiedz

3

Aby zwrócić tablicę, należy użyć funkcji, która w rezultacie obsługuje tablicę.

funkcja zwykle stosować VBA ocenić ekspresję na tablicy jest INDEX ponieważ nie zmienia wartości:

Dim data() 
data = Evaluate("INDEX(LEN(A1:A5)>3,)") 
+1

To zabawne, że w zależności od danych wejściowych, daje jedną lub dwie tablice wymiarowe. Na przykład. 'A1: A5' ma dwa wymiary,' A1: G1' jest z jednym. – Vityata

+0

'A1: A5' jest wektorem kolumnowym, podczas gdy' A1: G1' jest wektorem wiersza. Zatem niespodzianka dotycząca różnych wyników w tablicy nie powinna być tak duża. –