Tag: 数组

VBA函数调用VBA sub将数组打印到工作表

目前我有一个用户定义的函数,它运行几个涉及matrix生成的例程。 要检查这些matrix已经正确生成,我想把它们放在工作表上。 用户定义的函数工作正常,我已经添加到下面的地方,我想找出数组中的内容: Call CheckArray(TestArray) 上面的“TestArray”取决于我想要看的数组。 “CheckArray”子程序如下: Sub CheckArray(MyArray As Variant) MatrixRows = UBound(MyArray, 1) MatrixCols = UBound(MyArray, 2) MsgBox MyArray(11, 2) MsgBox "Matrix size = " & MatrixRows & " rows x " & MatrixCols & " columns" ActiveWorkbook.Worksheets("Check array").[A1].Resize(MatrixRows, MatrixCols) = MyArray End Sub 请注意,我将两个MsgBox命令放在那里,以检查子被调用正确,它是工作,这是。 而且,它返回了我请求的特定位置的值,并且还说明了我正在查看的特定matrix的大小,所以数据似乎正在被正确读取 – 问题是随后从新的子文件中写入。 当我包含最后一行时,它不会将我的数组打印到工作表,并且也会停止用户定义的函数正常工作。 有谁知道为什么这不起作用? 用户定义的函数是否可以调用打印到工作表的子工具? 有没有办法来解决这个问题?

Excel:使用vlookup,但在数组中使用通配符

我在一张纸上列出了一个值列表。 在另一张纸上,我有两列。 一个是通配符列表,另一个是另一个值列表。 在第一个工作表的列旁边,我想要一个额外的列包含一个公式,它将检查第一列中的值与第二个工作表中的通配符。 如果find匹配项,则应显示该通配符旁边的值。 有没有办法做到这一点? 一直在它几个小时,我不能得到它的工作。 提前致谢。 一些示例数据: 第一张 A栏 randomunnecessarydataUSEFULTHINGS123INFOmoregarbage morerandomstuffIMPORTANT456junkjunkjunk IMPORTANT456lotsofmorejunk morejunkUSEFULTHINGS789INFOgarbage B栏 <some formula> <some formula> “ “ 等等 第二张 A栏 *usefulthings???INFO* *important456* B栏 有用的东西 – 信息 重要456 我想要<some formula>检查表单1列A中的值与表单2中的表格中的值。如果表单2列A中的通配符之一匹配,则包含公式的单元格应显示表单2列B中的内容。

整数布尔/位数组没有循环

我有一个数字(比如5),我首先想将它转换为二进制(101),然后在VBA中分成{1,0,1}或布尔值{True,False,True} 有没有办法做到这一点没有循环? 我可以转换为二进制没有循环在我的代码与工作表公式如下 myBinaryNum = [DEC2BIN(myDecInteger,[places])] 但是我被告知工作表函数效率很低,而且这个function是非常有限的。 我不知道如何拆分成一个数组,而不需要用MID循环数字。 有什么像strConv数字?

Excel公式来填充数组

例如:假设我有几个一维数组,比如A,B和C: ABC — — — 2 4 99 3 5 37 4 6 42 7 我想用一个公式来填充每个这些数组(这是命名的范围),所以他们有相同数量的行。 (编辑,提供更完整的解释:)我也希望能够将每个数组的起始位置移动指定的行数。 这里是一个输出的例子,我把A移动了2,B移动了3,C移动了一个位置: A' B' C' — — — 0 0 0 0 0 99 2 0 37 3 0 42 4 4 0 0 5 0 0 6 0 0 7 0 因此,“公式”(实际上是多个现有标准公式的组合)来填充其中一个数组将实际上具有四个input:原始数组名/范围,在原始数组开始处填充的值的数量,在最后填充,填充值(即0,NA()等)。 初始方法:我的第一个尝试是将三个数组部分(开始填充数组,开始数组和结束填充数组)连接成一个数组,如下所示: =INDIRECT("{" & IF(_NPadBegin>0, REPT(_PadVal&",", _NPadBegin-1) […]

Excel VBA:函数来计算数组的非空元素

我正在寻找一种方法来计算2维数组中的非空元素。 我已经在这里读了一个解决schemeVBA计数非空元素的数组 。 不过,我认为可能有更好的方法或function来执行它。 要计算范围(A1:J10)中的非空单元格,我们在Excel VBA中使用此单元格 k = Application.WorksheetFunction.CountA(Range(Cells(1, 1), Cells(10, 10))) 我正在寻找类似的function来计算数组中的非空元素。 例如,我试过这个 k = Application.WorksheetFunction.CountA(Array(1,1),Array(10,10)) 但它不起作用。 有这样的函数来计算数组中的非空元素吗? 我需要计算这个数字,因为当数组中相同行的所有元素都为空时,我想删除数组中的整个行。 谢谢。

填充临时数组以避免在dynamicmultidimensional array上使用Preserve

作为VBA的初学者,我正在努力学习这个内容的大部分特别,所以请原谅我的灰尘。 我有一个子程序,我正在通过阅读文本文件中的行。 每行都用空格分隔,作为文本标识符。 我需要将每行分割为multidimensional array。 Sub ReadLines() Dim LineValues() As String Dim row As Long, col As Long Dim DataArray() As String Dim TempArray() As String Dim FileContent As String Dim FilePath As String FilePath = "c:\mytextfile.txt" row = 0 TextFile = FreeFile Open FilePath For Input As TextFile FileContent = Input(LOF(TextFile), TextFile) Close TextFile […]

增加数组vba中元素的值

我在Excel的VBA工作,我有一个整数数组。 我想要做的是当我的条件已满足时,将1添加到数组内的特定元素。 在我的示例代码中,如果列A中的单元格是5,那么我想在数组的第5个位置添加1,或者如果单元格是3,那么将1添加到数组的第3个位置。 Sub CountCustomers() Dim myArray(5) Dim i as integer For i = 1 to 10 If Cells(i,1) = 5 Then myArray(4) = myArray(4)+1 ElseIf Cells(i,1) = 3 Then myArray(2) = myArray(2)+1 End If Next End Sub 当我这样运行时,它会以正确的位置结束1,但不会增加任何更高的值。 有没有办法做到这一点?

如何在vb中使用一个对象数组

我试图学习如何使用一个对象的数组,但我不明白。 我必须将数据从Excel文件导出到Access数据库。 Private Sub Import_XLS(ByVal fileData As String, ByVal dbEmpty As String, ByVal dbDest As String) If My.Computer.FileSystem.FileExists(dbDest) Then My.Computer.FileSystem.DeleteFile(dbDest) My.Computer.FileSystem.CopyFile(dbEmpty, dbDest) Dim capitoli As New cCapitoli Dim paragrafi As New cParagrafi Dim voci As New cVoci Dim total As Integer Dim fileStream As FileStream = New FileStream(fileData, FileMode.Open) Dim file(fileStream.Length) As Byte fileStream.Read(file, 0, […]

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-)数组中分离值 […]

用VBA内存数组replace工作表数组公式

我的工作表需要BG2中的以下数组公式。 =INDEX('Client'!O$2:O$347473, MATCH(1, (('Client_Cost'!D$2:D$347473='Client'!BC2)* ('Client_Cost'!E$2:E$347473='Client'!BE2)), 0)) 这提供了两列匹配(Client_Cost!D:D到Client!BC2和Client_Cost!E:E到Client!BE2),并从Client!O:O返回相应的值。 大量的行使得数组公式非常计算密集。 我可以处理几百行(500行约90秒),但是我需要一直到客户端BG347473的结果,我希望在今年的某个时候。 我已经尝试使用Application Evaluate从数组公式返回结果数组到变体数组,然后返回结果数组到集体工作表,但这不是我期待的改进。 寻找替代品。