Tag: udf

VBA UDF Excel 2010 #VALUE

我已经阅读了有关UDF #VALUE错误的线程,似乎要么我不知道有关VBA能够使用它们,要么我遇到的问题是不一样的。 无论哪种方式,我试图做一个UDF来计算YY:MM格式的一个年龄的月数,根据我创build的公式做了相同的。 Function TOTALMONTHS(YearsMonths As String) Colonz = WorksheetFunction.Find(":", YearsMonths) Yearz = Left(YearsMonths, Colonz – 1) Monthz = Mid(YearsMonths, Colonz + 1, Lengthz – Colonz) Lengthz = Len(YearsMonths) TOTALMONTHS = Yearz * 12 + Monthz End Function 上述代码在Excel 2010中实现时返回#VALUE错误。 任何协助我犯了什么错误将不胜感激! 谢谢! 编辑: 我试图和一个If块来迎合包含“>”在一开始的年龄。 例如,8:6和> 8:6。 我想我可能会在开始的search结果1上得到误报,但不知道为什么。 Function TOTALMONTHS(YearsMonths As String) As Integer If WorksheetFunction.Search(">", […]

当在UDF内部设置时,select一个范围内的单元格range.cell

我已经创build了一个UDF,它工作得很好。 但是,如果第二个范围没有被提交(这是可选的),它将被设置为UDF内的范围。 如果我现在尝试直接返回一个单元格的范围,我需要添加.Cells范围以select单元格(x, y) 。 如果没有提交范围,则可以这样做: Set optional_range = required_range.Columns(2) Set required_range = required_range.Columns(1) 如果我以后在UDF想要从optional_range输出一个单元格我得到这个行为: Set MyFunction = optional_range(x, y) 'cell shows #VALUE Set MyFunction = optional_range.Cells(x, y) 'shows correct value 但是.Cells :如果optional_range直接从公式中得到一个范围,它也显示正确的值,而不使用.Cells 。 我根本找不到这种行为的原因。 有人能告诉我为什么发生这种情况? 完整的代码可以在这里find。

使用excel插件注册UDF和参数的描述

我有一个UDF的getRegExResult插件。 我想为这个函数添加一个函数描述和参数描述,所以当用户安装插件时,closures,打开excel几次,进入“插入函数”对话框,他将能够find具有参数描述的函数。 这里也是一样的问题。 我find了一个适合我需求的答案 。 除… 我希望能够通过Excel Addin来做到这一点。 我的想法是把调用插入到workbook_open事件像这样: Private Sub Workbook_Open() Call getRegExResultRegister End Sub Public Sub getRegExResultRegister() Application.MacroOptions Macro:="getRegExResult", Description:="Returns a concatenated string of NONE, ONE, or ALL Regular Expression Match(es).", Category:="User Defined", _ ArgumentDescriptions:=Array("Source string to inspect for matches.", _ "Regular Expression Pattern. Eg ""\d+"" matches at least 1 or more digits.", […]

删除一切,但从单元格中的数字

我有一个Excel工作表,我使用follwoing命令从包含表单文本的单元格获取数字: =MID(D2;SEARCH("number";D2)+6;13) 它searchstring“数字”,并获得后面的13个字符。 但有时候结果会比数字更多,因为单元格中的这些文本没有模式,如下例所示: 62999999990 21999999990 11999999990 6299999993) ( 17999999999) 21914714753) 58741236714 P 18888888820 我如何避免采取任何事情,但数字或如何删除一切,但从我得到的数字?

函数为范围内的每个单元格返回“太低”,“太高”或“OK”

我想要一个函数来运行一系列的单元格,如果: 任何大于NormalValue然后返回“太低”, NormalValue大于范围内的最大值的两倍然后返回“太高”, 这些都不是真的,然后返回“确定”。 这是我到目前为止所提出的: Function TooHighLow(rng As range, NormalValue As Double) For Each cell In rng If Application.WorksheetFunction.Max(cell.Value) > NormalValue Then TooHighLow = "Too Low" ElseIf NormalValue > 2 * (Application.WorksheetFunction.Max(cell.Value)) Then TooHighLow = "Too High" Else TooHighLow = "OK" End If Next cell End Function

自定义Excel公式函数UDF来计算条件格式

有没有人跑过一个实际上使用条件格式的函数? 有一些kutools和albebits插件,但他们不是基于公式(你必须手动select所有的东西) 我发现这个,但只适用于手动格式 Function ColorFunction(rColor As Range, rRange As Range, Optional SUM As Boolean) Dim rCell As Range Dim lCol As Long Dim vResult lCol = rColor.Interior.ColorIndex If SUM = True Then For Each rCell In rRange If rCell.Interior.ColorIndex = lCol Then vResult = WorksheetFunction.SUM(rCell) + vResult End If Next rCell Else For Each rCell […]

UDF在任何地方都返回相同的值

我正在尝试移动平均代码在vba但以下返回相同的价值无处不在。 Function trial1(a As Integer) As Variant Application.Volatile Dim rng As Range Set rng = Range(Cells(ActiveCell.Row, 2), Cells(ActiveCell.Row – a + 1, 2)) trial1 = (Application.Sum(rng)) * (1 / a) End Function

当不相关的单元格被删除时,需要停止UDF的重新计算

我注意到,我删除单元格时,我的UDF重新计算。 这会在删除整个列时造成大量延迟,因为UDF会针对所使用的每个单元格进行调用。因此,如果您使用的是1000个UDFS,那么删除列或单元格将调用它1000次。 举个例子,把下面的UDF放到一个模块中,然后用工作表调用一堆= HelloWorld() Function HelloWorld() HelloWorld = "HelloWorld" Debug.Print Now() End Function 然后删除一行。 如果你的经验和我的一样,你会看到每调用一次就会调用一次。 任何人有任何想法,这种行为是否可以停止? 我也有兴趣为什么它应该被调用。 看起来像Excel的依赖树中的一个缺陷给我,但可能有一个很好的理由。 编辑:经过实验,我发现了更多触发UDFS的操作: 对ListObject(即Excel表)跨越大小(但不包括行)的列数进行的任何更改。 即使UDF本身不在相关的ListObject中,或者实际上也不在任何 ListObject中。 在工作表中的任何位置添加新的单元格或列(但不包括行)。 请注意,手动计算模式不是几个方面的选项。 首先,鉴于这是一个应用程序级别的设置,它只是performance出太大的风险,即有人会使用任何一个电子表格的输出,而没有意识到他们处于手动计算模式。 其次,我实际上并没有devise特定的电子表格,而是写了一本关于非开发人员如何使用良好编写的现成代码(如UDF)来做本来不可能的事情的书。 例子包括dynamic连接或分割文本,或Charles Williams在https://fastexcel.wordpress.com/2011/07/22/developing-faster-lookups-part-2-how-to- build-a-faster-vba-lookup / (是的,我给了他们很多警告,通常一个基于本地公式的解决scheme将胜过UDF,但正如你从上面提到的线程中看到的那样,可以performance良好)。 我不知道用户如何使用这些。 在没有编程解决scheme的情况下,看起来我只需在本书中指出,如果用户使用资源密集型UDFS,添加或删除单元格或调整ListObjects的大小时,用户可能会遇到显着的延迟。 即使这些UDF被有效地写入。

VBA UDF更改所有工作表上的值。 如何限制到一个?

我做了一个UDF,在一张纸上工作。 多张纸发生问题。 如果我在多个工作表上有公式,并且如果我(重新)将其加载到一张工作表上,它也将更改所有其他工作表中的输出。 为什么会发生? 我没有使用ActiveWorksheet或Active Cell或类似的。 Function customreturn(security As Range, datacheck As Range) As Variant Dim row_num As Integer Dim row_num2 As Integer Dim price1 As Double Dim price2 As Double Dim perfo As Double Dim blank_end As Boolean row_num = security.Row col_num = security.Column row_num2 = row_num + 1 col_num2 = datacheck.Column If WorksheetFunction.IsError(datacheck.Value) […]

具有可选参数的用户子集 – 在macros窗口中不可见

我有一个macros通过列(S),并删除范围内的所有单元格的数字。 我想添加一个可选的参数,所以我可以在告诉它在哪个列上运行的时候调用它。 这是我有: Sub GEN_USE_Remove_Numbers_from_Columns(Optional myColumns as String) 这个想法是我可以从另一个子调用它,像这样GEN_USE_…Columns("ABC") 但是,我不能从VB编辑器运行,也不能在macros窗口(当点击查看 – >macros)时看到这个macros。 为什么不? 为什么我必须调用它的参数(甚至GEN_USE_…Columns("") )我不能只是调用GEN_USE_…Columns()了。 我已经看到,你可以添加= Nothing到最后,设置一个默认值,如果没有给出。 我试过(),但它没有做任何事情。 我想我的问题是A)如何在macros窗口中看不到具有可选参数的macros? 和B)为什么我不能直接从VB编辑器调用macros的参数? 我必须实际创build一个子,然后我可以调用该子内的macros。 没有更多的只是突出一些文字,并打“播放”。 我知道这两个问题可能是相关的,所以任何有识之士将不胜感激! (PS:我知道我们应该发布代码,但我不认为这是相关的,当然,如果你想看,请告诉我,我会更新)。