如何在VBA中利用重复向量创建矩阵?
VBA实现向量重复生成矩阵
完全可行,给你两种实用的实现方式:
方法一:利用工作表函数快速生成(高效)
借助工作表函数可以批量生成矩阵,避免循环带来的性能损耗,代码如下:
If Blad1.Range("number").Value < 1 Then n = 1 Else n = Blad1.Range("number").Value End If ' 获取行向量curve(注意指定工作表,避免引用错误) Dim curve As Variant curve = Blad2.Range(Blad2.Cells(1, 3), Blad2.Cells(1, 3 + n - 1)).Value ' 生成n行n列的重复矩阵 Dim matrix As Variant Dim tempStr As String ' 将向量转为分隔符连接的字符串,重复n次后拆分转置 tempStr = Join(Application.Transpose(Application.Transpose(curve)), "|") tempStr = WorksheetFunction.Rept(tempStr & "|", n) tempStr = Left(tempStr, Len(tempStr) - 1) ' 移除末尾多余分隔符 matrix = Application.Transpose(Split(tempStr, "|")) matrix = Application.Transpose(matrix) ' 转为n行n列的矩阵结构
注:这里用|作为分隔符,若你的数据中包含该字符,可替换为^或其他无冲突符号。
方法二:循环赋值(直观易懂)
如果追求代码可读性,直接通过循环逐行赋值更清晰:
If Blad1.Range("number").Value < 1 Then n = 1 Else n = Blad1.Range("number").Value End If ' 获取行向量curve Dim curve As Variant curve = Blad2.Range(Blad2.Cells(1, 3), Blad2.Cells(1, 3 + n - 1)).Value ' 初始化n行n列的矩阵数组 Dim matrix() As Variant ReDim matrix(1 To n, 1 To n) ' 逐行复制向量内容 Dim i As Integer For i = 1 To n Dim j As Integer For j = 1 To n matrix(i, j) = curve(1, j) Next j Next i
两种方法都能得到每行与curve向量完全一致的n×n矩阵:数据量较大时选方法一效率更高;小数据量场景下方法二更易理解维护。
内容的提问来源于stack exchange,提问作者Gabriela M
相关产品推荐
相关产品推荐

