Tag: 用户定义的函数

如何编写VBA用户定义的函数从IF中采取数组参数与Ctrl + Shift + Enter?

我创build了一个名为test的函数 Function test(a() As Variant) Debug.Print "Type: "; TypeName(a) Debug.Print "lb: "; LBound(a) Debug.Print "ub: "; UBound(a) test = a(UBound(a)) End Function 我打字的时候没问题 =test({4,5,6,8,9}) 在一个小区里。 它返回9。 让我们在工作表上有一些数据。 AB 1 1 3 2 0 6 3 1 9 4 0 7 5 1 8 我用ctrl + shift +在单元格中input下面的公式。 {=test(IF(A1:A5=1,B1:B5))} 我认为一个数组传入testing,但它不起作用。 它可以像往常一样返回LBound(a)和UBound(a) ,但是test = a(UBound(a))失败。 问题是什么? 我怎样才能写一个写入VBA用户定义的函数从IF获取数组参数。

在C#函数中设置Excel单元格的公式

我创build了一个Excel自动化插件,实现为一个C#类库,它包含一个UDF包装(我不使用VSTO) 我想在我的UDF中做的是: 1>获取公式input的单元格地址; 2>将该单元格的公式设置为我自己的公式; 我已经做了点1>如下: Microsoft.Office.Interop.Excel.Application excelApp = (Microsoft.Office.Interop.Excel.Application)Marshal.GetActiveObject("Excel.Application"); Microsoft.Office.Interop.Excel.Range target = (Microsoft.Office.Interop.Excel.Range)excelApp.get_Caller(System.Type.Missing); string cellAddress = target.get_Address(Missing.Value, Missing.Value, Microsoft.Office.Interop.Excel.XlReferenceStyle.xlA1, Missing.Value, Missing.Value); //Perform some operations based on address //Assign a formula to my cell (This does not work !) target.Formula ="=SUM(2,2)" 这应该根据这里的MSDN文档工作。 我究竟做错了什么 ? 有没有其他方法可以设置单元格的公式? 谢谢,

数组公式结果连接成单个单元格

是否有可能从数组公式中返回值并将它们连接成单个单元格? 例如,我有一个简单的电子表格,包含项目任务的行,如下所示: Task # Description Blocked on Blocking ———————————————– 1 Task 1 2 2 Task 2 $formula 3 Task 3 2 我希望单元格D3中的公式返回“1,3”(在阻塞单元格中放置多个值也是很好的做法)。 我现在用下面的公式返回“1”: =(INDEX($A2:$A999,MATCH(A3,$C2:$C999,0)))

如何在VBA / Excel中的用户定义函数中拥有多个可选参数

我需要开发一个UDF来检查一个单元格值是否与几个可能的条目相同,以检查这个单元格是否等于这些值中的任何一个。 正如你所看到的,我有一个关于如何做这个检查的想法。 但编码function的方式,可以接受多个可选的条目不清楚给我。 例如我正在看EXCEL {CONCATENATE(text1,[text2,… text_n])}中的CONCATENATEdynamic。 我用这个函数的5个可选参数的代码如下: Function IfAmong(TextToCheck As String, Text1 As String, Optional Text2 As String, _ Optional Text3 As String, Optional Text4 As String, Optional Text5 As String,_ Optional text6 As String) As Boolean Dim dd As New Scripting.Dictionary dd.CompareMode = TextCompare dd.Add Text1, dd.Count If Text2 <> "" Then dd.Add Text2, […]

在不带参数的自定义函数中添加两个单元

我正在尝试学习Excel的VBA。 我正在观看有关VBA中的自定义函数/用户定义函数的教程。 我试图创build一个用户定义的函数,但它显示一个#REF! 在我input函数名称的单元格中发生错误。 我试图添加( A Cell + B Cell ),而不传递任何参数/参数的function。 我使用偏移来遍历具有函数作为公式的Cell左边的1,2个单元格。 这是我的代码: Option Explicit Function ADD12() Dim Number_1 As Integer Dim Number_2 As Integer Number_2 = ActiveCell.Offset(0, -2).Value Number_1 = ActiveCell.Offset(0, -1).Value ADD12 = Number_1 + Number_2 End Function 我的工作表的截图:

UDF在不同的表单上调用eachother返回错误2015年

我有2张3 UDF的在第一和2在第二。 工作表1是一个每月一列的matrix,每天有一列人们把时间放在下面的行上。 在3个特定的行上,有UDF将上面的列中的数据合并起来,将行作为参数引用。 我做了如下的函数调用,以避免使UDF变得不稳定(如果我这样做会大大延长计算时间),所以当列R中的任何内容发生变化时,UDF的结果都会更新: calculateOvertime(R:R) 在表2中,月份的日子是行(不是列),如果他们加class,可以详细说明他们的日子。 这由表1中的一个UDF检测到,所以这里的2个UDF需要由表1中的UDF计算的数据 我有这个设置一些奇怪的问题: 出于某种原因,当我切换选项卡时,所有包含这些函数的单元格都显示为#VALUE !. 我必须添加“Application.CalculateFull”到一个事件处理程序,每当激活选项卡时触发: Private Sub Worksheet_activate() Application.CalculateFull End Sub 在其他选项卡上引用包含另一个UDF的单元格的UDF将始终得到“2015!”。 作为一个值,指的是错误2015(一个值错误,因为该单元格包含#VALUE!当工作表不活跃) 很明显,这两个问题是相互关联的,因为当我转换工作表时,UDF计算出的非活动表中的值不知何故就丢失了。 我从单元格获取值的方法如下。 我想通过使用Find()函数找出列A中标签的哪一行 Dim compensationRowIndex As Integer compensationRowIndex = CInt(othersheet.Range("A1:A250").Find("COMPENSATION").Row) 然后我得到的价值,并把它投给单 Dim compensation As Single compensation = CSng(othersheet.Cells(compensationRowIndex , columnIndex).Value) variables“补偿”始终保持值2015。 有没有办法解决? 另外,当我想打印表单时,所有包含UDF的单元格都填充了#VALUE !. 我的猜测是:如果我可以让问题1走开,那么问题2。 任何帮助,这是非常赞赏。 我一直在解决这个问题几乎一整天,并没有find一个解决schemegoogling症状。

Excel VBA UDF自动完成参数

我意识到有数以千计的评论和数百个与本网站UDF工具提示有关的问题,外部论坛和各种讨论小组。 我真的是新来的VBA和Excel,但最近学到了很多。 有了这段时间,我已经学习了,我也看到了这些论坛,所以请不要给我链接到Excel-DNA等第三方解决方法。这不是同一个问题。 我不想填充工具提示,我想自动完成UDF参数到单元格中。 简而言之,标题说明了一切,有没有办法自主地将UDF参数填充到string中。 我已经search了文档网站的任何相关的东西,但没有成功。 所以下一步就是find一个对用户来说比较容易的解决scheme,对用户的计算机内存非常友好,更不用说开发人员友好,不需要花费很多时间,而是build立在跨平台兼容性和简单自定义。 由于我是Excel新手,我不确定加载项是如何在Workbook对象中工作的。 我可以通过试验和错误发现,但是在文档网站上发现的类似于我所期望的结果的最接近的事情是强制自动更正: With Application.AutoCorrect .AddReplacement "=EPP(", "=EPP(payrate,hrs)" End With 这很快,完成工作! ……..但就是这样。 这有效的原因有两个: 公式/ UDF是唯一启动的,带有一个=符号,所以我不必做太多的编码来弄清楚用户打字的原因是什么 减less代码和错误的可能性。 特别是对于需要不同语法的Win 64bit版本和32位版本,以及在使用API​​时Mac用户可能 有一个很好的理由,有10个坏的。 我将强调一些: 它允许你按下input,标签等去到下一个单元格,下单元格等 光标会移到string的末尾,这对于自动更正是正常的,但是对于要填写的强制性参数来说是不可取的。 我将不得不手动策划一个'AddReplacement'数组 这在嵌套函数的公式中是无用的 我能够解决其中一些问题,将其更改为以下内容: With Application.AutoCorrect .AddReplacement "=EPP(", "=EPP(<payrate>,<hrs>" End With 这里发生的是如果用户按下input,Excel将自动包括右括号,但是,在这种情况下会出现错误, “Excel认为这是公式错误:1 + 1 = 2” ,因为Excel认为它不是由于<>符号的公式。 所以用户现在是100%肯定他们需要审查。 Butttttt …..说了所有的话,一个巨大的障碍仍然存在,用户必须按此空间来填充。 哎哟。 只要我用过excel,select函数后我从来没有按过空格,我无法想象这对任何人来说都是自然的事情。 所以我尝试了一些方法来规避这种行为。 到目前为止没有工作。 我尝试使用Autocorrect对象内的Application.SendKeys : With […]

如何在Excel加载项(Excel 2007)中使用自定义函数来使用自动完成?

我创build了一个加载项,当我在expression式框中使用它时,自动完成function不起作用。 我在用户定义的函数下单击函数“f”button时看到它们。 我只是喜欢自动完成与他们合作,所以我不必记住他们的名字或每次都必须点击function“f”button。

如何提高调用Web服务的Excel UDF的性能?

我们正在开发一种c#for Excel的股票查找UDF。 我们的UDF最终会调用一个Web服务,如果表单有1000个调用我们的Web服务的话,那么这个Web服务可能会非常慢。 我注意到Excel 2010引入了asynchronousUDF来帮助这个http://msdn.microsoft.com/en-us/library/ff955606.aspx#odc_office14_ta_WhatsNewforOffice2010Developers_Excel2010 有没有人试过这个,并有任何C#的例子,或有任何其他提示在Excel中提高Web服务typesUDF的性能?

制作MS Excel用户定义函数

我正在尝试在C#中为MS Excel创build一个用户定义的函数。 但是无论我尝试什么,当我尝试将外接程序添加到Excel中时,我总是得到臭名昭着的“ 您select的文件不包含新的自动化服务器,或者您没有足够的权限来注册自动化服务器 ”错误。 下面是我从上面的代码和在线示例中进行testing: // C# using System; using System.Runtime.InteropServices; using Microsoft.Win32; namespace AutomationAddin { [ClassInterface(ClassInterfaceType.AutoDual)] public class MyUdf { public MyUdf() { } public double addMeTest(double x, double y) { return x + y; } [ComRegisterFunctionAttribute] public static void RegisterFunction(Type t) { Microsoft.Win32.Registry.ClassesRoot.CreateSubKey( "CLSID\\{" + t.GUID.ToString().ToUpper() + "}\\Programmable"); } [ComUnregisterFunctionAttribute] public static […]