2017-08-02 42 views
8

Trong VBA, các Evaluate()[] phương pháp đều có thể được sử dụng để trả các mảng:Làm thế nào để đánh giá công thức mảng với phương pháp Đánh giá

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

cả hai dòng thiết i là một mảng 2D chứa số 1-4 . Một chức năng bổ sung là Evaluate(...)(1,2) trả về phần tử được lập chỉ mục R1C2 của mảng (tức là 2 - [...](1,2) trong khi đó lỗi)

Tôi tự hỏi liệu có bất kỳ cú pháp nào để đánh giá hàm trang tính trả về mảng theo cùng một cách hay không, ví dụ:

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

mà nên trả lại mảng 1D như {False,False,False,True,True} nếu tôi có văn bản dài hơn 3 ký tự trong A4 & A5, nhưng nó không.

Nếu không, có cách nào khác để đánh giá một công thức mảng để trả về mảng đầy đủ không? Tôi đang tìm kiếm bất kỳ cách tiếp cận nào mang lại số lượng ký tự nhỏ nhất.

+0

'i = Đánh giá ("ROW (A1: A5)> 3") ' – SJR

+0

@SJR, kỳ lạ là nó hoạt động, nhưng' i = Đánh giá ("LEN (A1: A5)> 2") 'thì không. Tôi hy vọng rằng để trả về một mảng nhưng nó chỉ trả về một boolean duy nhất, có một số sự mơ hồ mà tôi nhìn không? – Greedo

+2

Thực sự kỳ lạ. Tôi không chắc chắn lý do tại sao, nhưng một số chức năng cần phải được "buộc" để hoạt động đúng cách, ví dụ: điều này hoạt động 'i = Đánh giá (" IF (ROW (A1: A5), LEN (A1: A5)> 2) ")' – SJR

Trả lời

3

Để trả về mảng, bạn cần sử dụng một hàm hỗ trợ kết quả mảng.

Chức năng thường được sử dụng với VBA để đánh giá một biểu thức cho một mảng là INDEX vì nó không làm thay đổi các giá trị:

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

Vui vẻ của nó tùy thuộc vào đầu vào, nó cho một hoặc hai mảng. Ví dụ. 'A1: A5' có 2 chiều,' A1: G1' là một. – Vityata

+0

'A1: A5' là một vectơ cột trong khi' A1: G1' là một vectơ hàng. Vì vậy, sự ngạc nhiên về kết quả mảng khác nhau nên không quá lớn. –