Tag: 用户定义的函数

是否可以在VBA中编写一个名称中包含句点的UDF?

Excel 2010附带了一些名称中包含句点的function。 例如STDEV.S和PERCENTILE.EXC 是否可以使用VBA为名称指定我自己的函数名称,如PERCENTILE.CUSTOM ? 例如,我想用公式=NAME.SUFFIX()来引用下面的函数。 Option Explicit Function NAMEdotSUFFIX() As Variant NAMEdotSUFFIX = 42 End Function

Excel:将数组传递给用户定义的函数(VBA)

编辑:解决scheme – 请参阅原始问题下面 在将{1,2,3}这样的数组传递给UDF时,我发现了两件事情要考虑: 语言环境 – 请参阅答案1.德语系统(通常)上的列表分隔符是“;” 因此我需要使用{1 ; 2 ; 3}。 传递的数组在函数中显示为2维数组。 因此,第n个元素必须以myArray(n, 1 )为目标。 无视这给了我#VALUE! 错误。 因此,一个简短的“select案例”-UDF可能是这样的: Function SelCase(a1, a2, a3) For i = 1 To UBound(a2) If a2(i, 1) = a1 Then SelCase = a3(i, 1) Next End Function 称为(德语区域!): =SelCase(A1;{1;2;3};{"a";"b";"c"}) 在结果中给出“a”,“b”或“c”取决于A1保持1,2或3。 在这里find一个更详细的“select案例”-UDF。 原来的问题: 我想传递一个像{1,2,3,4}这样的数组到Excel 2002中的用户定义的函数 – 而不是设法find这样做的方法。 我使用的是德语版本,所以“,”是我的小数点分隔符,也分隔水平(1D-)数组中的值– 编辑:这是错误的 ,“wheras”;“ 从表中分离公式中函数中的参数,并在垂直(1D-)数组中分离值 […]

长文本的分割function失败,并显示VALUE! 错误

我正在使用一个函数,我在这里看到了Stackoverflow: Function EXTRACTELEMENT(Txt, n, Separator) As String EXTRACTELEMENT = Split(Application.Trim(Txt), Separator)(n – 1) End Function 它正在分解一组数据,如下所示: sRN LMDscandata sRA LMDscandata 1 1 F97BBF 0 0 6D2A 6D2D 71F5A0FA 71F5FD85 0 0 7 0 0 1388 168 0 1 DIST1 3F800000 00000000 D9490 1388 5 6E2 6DC 6E3 6ED 6E1 0 0 0 0 0 0 […]

将范围传递给Excel用户定义函数并将其分配给数组

我在尝试着 将两个范围( 多行单列)传递给Excel 2007中的用户定义函数, 然后将其分配给一个数组进行处理。 任何人都可以告诉我如何将这样的范围分配给一个数组? 范围不是常量,因为我在不同的单元格中使用UDF来处理不同的数据,所以我不能使用e,g, Range("A1:A10") 当我使用Data1.Rows.Cells(i, 1)而不是数组时,代码正在工作。 但是我认为使用一维数组来提高效率更好。 这是我目前的代码 Function Sample(Data1 As Range, Data2 As Range) As Double 'Size of Data1 and Data2 Dim rows As Integer rows = Data1.Rows.Count 'Declaring two one dimensional arrays Dim data1Array(rows) As Double — Getting error here Dim data2Array(rows) As Double — Getting error here Dim […]

用户在Excel中定义的函数和速度问题

我有一个使用几乎所有UDF的Excel模型。 有说120列,400多行。 计算是垂直进行的,然后进行水平方向—即首先完成第一列的所有计算,然后第一列的最后输出是第二列的input等。在每一列中,我称之为六个或七个UDF调用其他UDF。 UDF经常输出一个数组。 每个UDF的input是一些variables,一些范围variables,一些双打。 在访问内容之前,范围variables在内部被转换为数组。 我的问题是,我可以build立没有UDF的Excel模型,当我运行模拟时,我可以在X小时内完成所有的计算。 当我使用UDF时,仿真时间是3X小时或更长。 (为了回答这个显而易见的问题,是的,我需要和UDF一起工作,因为如果我想对模型做一些小的修改(比如说添加另一个资产types(这是一个财务模型)),重build模型需要将近一天的时间没有UDF来适应新的法律/金融结构,UDF需要大约20分钟来适应不同的财务结构。) 在任何情况下,我已closures屏幕更新,没有复制和粘贴的function,Varianttypes的使用是最小的,所有的数据都包含在一张表中,我将所有范围typesvariables数组之前,获取内容。 除了让一台速度更快的计算机或等价物使VBA代码/ Excel文件运行得更快之外,我还能做些什么? 请让我知道这是否需要更多的澄清。 谢谢!

实现可以asynchronous调用Web方法的Excel UDF

最初,我实现了一个可以同步调用Web方法的UDF,但是却遇到了很多麻烦,特别是当我试图请求大量数据时 – 简而言之, Excel会挂起并冻结,直到检索到所有数据严重危害用户体验。 我猜测同步使用Web服务是真正的杀手锏。 所以我想知道是否有任何方法可以asynchronous执行 ? 任何人都可以给我一些指针? 任何工具或平台更受欢迎? (我个人更喜欢使用C#)

使一个VBA自定义函数什么都不返回 – 不是0,不是空白string,但没有

我有一个自定义的函数可以从电子表格的单元格中调用,在某些情况下我不想返回任何东西。 换句话说,我希望与我的函数的单元格被视为完全像一个空单元格(除非该函数返回一个值)。 我能做的最接近的是返回一个空string"" 。 不幸的是,具有零长度string的单元格不被COUNTA或COUNTBLANK视为空,并且打破math公式(例如1 + "" = #VALUE )。 我的大多数尝试返回没有返回0,但这将被用户很不同的解释。 我该怎么办? 迄今试过: Returns 0: result = null result = VbEmpty result = Range("SomeCellKnownToBeEmpty") Returns error: result = Nothing 答:我现在确信这是不可能的,最好的办法就是解决这个问题。 解决选项: 返回一个string"-blank-"并让VBAmacros用"-blank-"删除任何单元格的内容。 一个奇怪的方法,但符合我的需求。 我正在做这个作为准备我的出版工作簿的步骤之一。 返回空string,并显式获取表中的其他公式,将其视为空白。 返回并显示0:返回0并使用自定义格式来隐藏0。

在单元格公式中调用在Excel 2007中用C#编写的方法

我正在使用Excel 2007.我有C#代码写在一个单独的二进制文件。 代码在类上使用静态类和静态方法。 我有一个在我的VSTO Excel工作表项目中的DLL的引用。 我需要添加或修改什么才能使其工作? 我的C#代码如下所示: using System; using System.Collections.Generic; using Microsoft.Office.Interop.Excel; using System.Runtime.InteropServices; namespace FooStatistics { [ComVisible(true)] public static class Statistics { public static int Count(Range range) { return range.Count; } 我希望能够把一个公式放入一个如下所示的Excel单元格中: =FooStatistic.Statistic.Count(A1:A10) pipe他呢。 我已经看到了这一点,但它似乎是在Excel 2003中的非静态类。我不能相信现在集成是不是更好。 我已经看了很多关于这个StackOverflow的问题。 他们似乎没有提供本地整合(许多人说,“使用X开源库”),不幸的是,很多不被OP接受。 我不是在寻找,“把它变成一个COM对象,并从VBA调用它”。 所以我在找: Excel 2007 代码在C#DLL中 从Excel单元格调用UDF 本地整合 所以这里是另一个StackOverflow链接 ,其中两个响应者说: 据我所知,你不能直接在VSTO中创buildUDF。 VSTO不支持创buildExcel UDF。 自动化插件可以在.Net中创build,似乎是微软认可的方式。 这是一个从2009年6月的问题。这是真的 – […]

Excel编程方法

在UDF,macros,加载项,自动化加载项,XLL或VSTO之间的Excel编程有什么区别。 我应该使用哪一个,在哪种情况下?

Excel-DNA:一维数组限于65536行

当试图在VBA中调用以下Excel-DNA-Method时,我只能得到一个大小为1的数组(在65536行之后数组似乎被调整为实际数组大小 – 65537)。 当调用表中的方法作为数组函数时,整个事情的作品。 [ExcelFunction(Description = "Example", Name = "Example", HelpTopic = "")] public static object[] example() { object[] ret = new object[65537]; return ret; } 我正在使用Excel 2007,该工作表是一个xlsm工作表,使用这样的二维数组时,一切工作正常。 [ExcelFunction(Description = "Example", Name = "Example", HelpTopic = "")] public static object[,] example() { object[,] ret = new object[65537,1]; return ret; } 但是使用二维数组的方式是相同的,以防万一发生 [ExcelFunction(Description = "Example", Name […]