将FormulaArray评估保存到实际阵列

时间:2018-06-14 21:25:29

标签: excel excel-vba vba

背景: 我需要检索数组公式(在excel接口中)计算的值,以便在那里循环结果。
问题:
我还没有找到如何存储它计算的所有值的方法。我只能存储第一个。
代码:

Sub test()
Dim ArrTopValues() As Long
    'Fails
    ArrTopValues = Application.Evaluate("=LARGE(A1:A11,{1,2,3})")
End Sub

我需要通过按" F9"来处理公式可以在excel界面上保存的3个值。
进一步的想法 我知道我可以编写一个重新创建Large函数的UDF(甚至只是在大函数上评估" k"并以这种方式构建Array变量)。请理解我正在寻找如何将这些数组评估存储到更多场景中,并且已经完成了解决此问题的解决方法,以使其工作"。

1 个答案:

答案 0 :(得分:3)

使用INDEX返回数组,您需要将数组变为变量:

#include <array>
#include <iostream>

template <typename S, typename T>
struct Homomorphism
 {
   //Defined in specialization: static const T morph(const S&);
   static constexpr bool is_instance = false;
   using src  = S;
   using dest = T;
 };

template <typename S, typename T>
struct Monomorphism : Homomorphism<S, T>
 {
   //Defined in specialization: static const T morph(const &S);
   static constexpr bool is_instance = false;
   using src  = S;
   using dest = T;
 };

template <typename, typename>
struct CompositionMorphism;

template <template <typename, typename> class C,
          typename S, typename T, typename U>
struct CompositionMorphism<C<S, T>, C<T, U>>
 {
   using comp = C<S, U>;

   static const U morph (const S & s)
    { return C<T, U>::morph(C<S, T>::morph(s)); }
 };


int main ()
 { 
   Homomorphism<int, long>        h0;
   Homomorphism<long, long long>  h1;
   Monomorphism<int, long>        m0;
   Monomorphism<long, long long>  m1;

   CompositionMorphism<decltype(h0), decltype(h1)>  h2;
   CompositionMorphism<decltype(m0), decltype(m1)>  m2;

   // compiler error
   //CompositionMorphism<decltype(h0), decltype(m1)>  hm;

   static_assert( std::is_same<Homomorphism<int, long long>,
                               decltype(h2)::comp>{}, "!" );

   static_assert( std::is_same<Monomorphism<int, long long>,
                               decltype(m2)::comp>{}, "!" );
 }