Tag: udf

如果打开另一个工作簿,则Excel用户定义函数的计算结果为零

我已经在Excel VBA中创build了一个用户定义函数(UDF),它从2列中提取内容并计算结果。 当没有其他工作簿打开时,UDF会正确评估,但在同时打开任何其他工作簿时更改为零。 我认为这个问题是在前几个步骤,我读了input: Set Sheet = ThisWorkbook.Worksheets(inputSheet) For i = 0 To numrows array_multi(i, 0) = Cells(inputRow1 + i, inputCol1) array_multi(i, 1) = Cells(inputRow2 + i, inputCol2) Next 有人可以帮我解决这个问题吗? 让我知道如果你需要更多的细节。

VBA UDF返回数组

我有以下的UDF,需要循环表格中的所有数据称为类,并返回学生的姓名和类名称(列A和B),如果学生姓名显示在名单上的时间表名单这个列表在单元格BM3到BM21中),并且类别在UDF中input的date和时间发生。 目前它返回一个#Value错误。 我做错了什么? Function TTDisplay(Day As String, Time As Variant) As Variant Dim Result(1 To 12) As String Dim Students As String Dim cell As Integer Dim LastRow As Long Dim Classes As Worksheet Dim Timetable As Worksheet Dim x As Integer Dim TimeSpan As Integer Dim TTTime As Integer Classes = Sheets("Classes") Timetable = […]

易失性用户定义函数不按预期重新计算(VBA / Excel)

看起来Application.Volatile和ActiveSheet.Calculate不是我认为的那样,我需要帮助创build一个函数,当相关数据改变时能够正确地重新计算。 以下是我现在正在做的事情: Public Function Availability(EmpName As Range) Application.Volatile (True) ColLetter = Cletter(EmpName.Column) Set NameRange1 = Range("$" & ColLetter & "$1:$" & ColLetter & "$" & (Application.ActiveCell.Row – 1)) Set SumRange1 = Range(Cletter(Application.ActiveCell.Column) & "1:" & Cletter(Application.ActiveCell.Column) & (Application.ActiveCell.Row – 1)) Sum1 = Application.SumIfs(SumRange1, NameRange1, EmpName) Availability = Sum1 End Function 所以你可以看到,它需要一个单元格,并使用该单元格的sumifs来提供条件和标准列,使用函数所在的列来为实际的数字求和(我知道这似乎是重新发明轮子,但我只是提出了我的问题最简单的forms)。 它基本上每行都执行这些计算。 CLetter只是另一个将Column#转换成字母的小函数,因为我懒得调用R1C1,并且发现它更具可读性。 但是每当我修改标准或总和范围,而不是重新计算标识符或数字的变化,似乎忘记了受影响的行存在(即使我只是改变它匹配的标准),或只是抛出一个#VALUE错误。 通过点击“= […]

VBA UDF在testing中工作,但在Excel中使用时不起作用

我越来越绝望了! 我已经build立了下面的function。 cday是指excel中的一个单元格,如01/01/2017 它匹配并find一个数据集的行和列,并将其input到一个数组(dpricebase),这是我预先用数据填充的一个子 我写了一个小小的东西来唤起它,它起作用。 我尝试直接在Excel中使用它,而不是! 请帮忙! 谢谢! Function findprice (cday, commno) cday = DateValue(cday) price1 = 0 If cday > lastday Then 'last day is a date xx/xx/xxxx at a cell in the excel price1 = 0 GoTo result End If Windows("m.xls").Activate Sheets("Daily").Activate 'find the matching row For x = 5 To lastrow If […]

使用评估写入其他单元格的UDF是不可预知的

我不愿意问UDF的devise写入其他单元格的问题,因为在devise上,这种行为应该被禁用。 但是…我会通过所有潜在的批评权力,然后问。 我真的没有期望完全回答这个问题,所以我只是想了解我遇到的奇怪行为。 我有一个UDF,旨在计算一个简单的轴承允许。 它需要10个参数。 如果任何参数超出范围,UDF将在调用单元中返回“错误”。 我想通过列出所有有问题的input来反馈这种相当无用的反馈,以便用户不必一个接一个地进行单一的修正。 这样,所有不良的input都会被列出来,用户可以立刻纠正所有的input。 仅供参考,由于一些input相互作用,input有10多个潜在问题。 否则用户可能会尝试几次没有成功的按摩input。 这就是为什么我想要立即列出所有的反馈。 UDF:简写 – 它将数据发送到类模​​块以执行所有检查和计算。 public Function LBA(ByVal layup_string As String, ByVal diaBolt As Double, ByVal boltHead As String, _ ByVal eD As Double, ByVal tMetallicFitting As Double, ByVal tempF As Double, ByVal depth As Double, _ ByVal allowable_type As String, ByVal basis As String, ByVal […]

转换范围并从UDF返回

我正在尝试编写一个非常简单的UDF,它将使用一个input范围并返回另一个范围。 输出范围的每个单元格应该等于input范围单元格加1.这是我所拥有的 Public Function Addone(rng As Range) As Range Dim i As Integer, N As Integer N = rng.Count For i = 1 To N Addone.cells(1,i) = rng.cells(1,i) + 1 Next i End Function 假定范围“A1:C1”包含数字1,2,3。 然后进入工作表,select一个单元格范围(输出范围“A2:C2”),然后inputAddone(A1:C1)并按下Ctrl + Shift + Enter。 然而,输出单元格填充了#VALUE 。 我在这里和这里查了其他的答案,但不能使它适用于我的情况。 任何帮助表示赞赏。

比较两个范围:经典范围与单个单元格中逗号分隔值的范围

假设我有一个值范围:6 2 4 7 8 7 1 5 1 9 4 6 8 8 1 7 4 2 而且在一个单独的单元中:“1,4,9” 我需要将这些值与给定范围内的单个单元格进行比较。 如果匹配,input“是”,否则input“否”。 “1,4,9” – 结果:“是” “3,10,11” – 结果:“否” 在这里,我有一个UDF,简单地比较两个普通范围,并input值作为结果匹配的次数。 应该作为一种模板,我想。 Public Function Compare(r1 As Range, r2 As Range) As Long Dim r As Range, v As Variant, v2 As Variant Dim rr As Range For Each […]

使用VBAparsing和拆分通配符的string?

我有一张包含字母数字字符的项目号码和一排其他信息的行。 有时,类似的项目被合并成一行,项目号码上的差异将以(X / Y)显示,以select在该项目号码中当时使用哪个字符(不仅是X或Y,可以是任何字母数字字符)。 换句话说,这些条目将如下所示: AB(X / Y)CD123 我需要的是将其分成两个项目号ABXCD123和ABYCD123的方法。 之后,我将不得不在当前行下创build一行,并将当前行复制到其中,并更改项目编号,但该部分很简单。 我已经尝试使用InStr来获取(X / Y)标记,但我不知道如何拉出X和Y字符,使他们与新的string。 我也不知道通配符是否适用于InStr,而且我对RegEx也不太熟悉。 有任何想法吗?

如何将Excel公式转换为UDF?

我有一个公式来交换名称格式为“史密斯,约翰”的单元格中的姓氏。 =MID(A4&" "&A4,(FIND(" ",A4)+1),(LEN(A4)-1)) 我创build了一个function来利用这个function,它似乎起初工作。 function是: Function SwapNames(text As String) As String SwapNames = Mid(text & " " & text, (Find(" ", text) – 1, (Len(text) – 1)) End Function 我把我的工作簿转换成一个加载文件types,所以我可以全局使用它,现在它说Find函数是未定义的。 我在这里做错了什么?

用于date范围的UDF或标准IF函数?

我正在尝试从列中的数字创build一个范围,并创build一个范围。 例如, column F: 1899 1912 1915 1918 1929 1934 1935 1936 … 因此,一旦1934年,1935年,1936年的序列开始,它将捕获1934年并迭代,直到差异不是1。 这个例子的结果是: 1934 – 1936. 一旦我创build了这些date范围,我将通过“ – ”分隔符使用文本到列来创build开始和结束date列。 在这方面的困难是比较另一列,并确保date是基于一个特定的标题。 因此:IF(标题1 =标题2,(IFdate2-date1 = 1,检查date3的增量 – date2 = 1,否则=date1))。 我可以尝试嵌套许多IF语句,但这会变得讨厌,加上不知道每个标题要比较多less个date。 迭代看起来好像在VBA中创build一个子或UDF会容易得多,但在这里(或其他地方)找不到任何可能有用的例子。