精华内容
下载资源
问答
  • 我就废话不多说,咱直接看代码吧! tf.transpose transpose( a, perm=None, name='transpose' ) Defined in tensorflow/python/ops/array_ops.py. See the guides: Math > Matrix Math Functions, Tensor ...
  • 在Excel工作表中有个强大的函数Transpose,可以直接实现数组行列转置,作为VBA开发者来说,肯定不会忘记用这个。 Sub Demo1() Dim aData(1 To 3, 1 To 2) For i = 1 To 3 For j = 1 To 2 aData(i, j) = i + j *...
  • 在学习矩阵外积(outer product)时,第一次使用了TRANPOSE函数,在此标记一下。 已知矩阵X: X 3 1 2 4 1 2 ...用Excel矩阵乘法函数(MMULT)和转置函数(TRANSPOSE)直接计算...

    在学习矩阵外积(outer product)时,第一次使用了TRANPOSE函数,在此标记一下。

    已知矩阵X:

    X 
    31
    24
    12

    及矩阵Y:

    Y 
    12
    24
    31

    求:XY^T(Y^T表示矩阵Y的转置矩阵)。

    用Excel矩阵乘法函数(MMULT)和转置函数(TRANSPOSE)直接计算出结果为:

    XY^T  
    51010
    102010
    5105

     显示公式为:

    XY^T  
    =MMULT(B32:C34,TRANSPOSE(F32:G34))=MMULT(B32:C34,TRANSPOSE(F32:G34))=MMULT(B32:C34,TRANSPOSE(F32:G34))
    =MMULT(B32:C34,TRANSPOSE(F32:G34))=MMULT(B32:C34,TRANSPOSE(F32:G34))=MMULT(B32:C34,TRANSPOSE(F32:G34))
    =MMULT(B32:C34,TRANSPOSE(F32:G34))=MMULT(B32:C34,TRANSPOSE(F32:G34))=MMULT(B32:C34,TRANSPOSE(F32:G34))

     参考内容:

    TRANSPOSE函数的详细说明,可参考以下文章:

    https://www.excelfunctions.net/excel-transpose-function.html 

    展开全文
  • Excel提示行列转置粘贴无法适用于不连续范围. Option Explicit Sub copppy() Dim rowsnum As Long rowsnum = Selection.Row Range("B5:W5, B" & rowsnum & ":W" & rowsnum).Select Selection.Copy...
  • '带有一个参数的函数 Function CAL(a) As Double Select Case a Case Is > 100: CAL = 100 Case 55 To 100 CAL = 55 Case Else CAL = 0 End Select End Function '带1个参数写1个,带2个写2个,多个的话...

    想说的都写在批注了,就不多写了。

    '带有一个参数的函数
    Function CAL(a) As Double
        Select Case a
            Case Is > 100:
                CAL = 100
            Case 55 To 100
                CAL = 55
            Case Else
                CAL = 0
        End Select
    End Function
    
    '带1个参数写1个,带2个写2个,多个的话可以选择数组
    '函数过程主要是在单元格用,意味着经常一框,不晓得多少个参数,怎么处理?
    '用数组作为参数
    '经过测试,类似=SUMARRAY(A4:D4)可以运行,但是=SUMARRAY(A4,B4,C4,D4)无法计算
    
    Function SUMARRAY(list) As Double
        '未明确是啥类型就用Variant
        Dim Item As Variant
        SUMARRAY = 0
        For Each Item In list
            '是数字就加总
            If WorksheetFunction.IsNumber(Item) Then
                SUMARRAY = SUMARRAY + Item
            End If
        Next Item
    End Function
    Sub MakeList()
        Dim nums(1 To 100) As Double
        Dim i As Integer
        For i = 1 To 100
            '随机赋值1-100的值到nums数组的各个元素
            nums(i) = Rnd * 100
        Next i
        MsgBox SUMARRAY(nums)
    End Sub
    
    '部分函数带可选参数,可选参数怎么实现呢?
    '在参数名前面加上Optional就是可选参数啦!
    '假设实现一个返回大小写功能的函数,不写参数全大写,可选参数填了则全小写
    
    
    Function UPORLOW(cell As Variant, Optional UpperCase As Variant)
        'cell是必须提供的参数,用IsMissing判断是否提供了后面的UpperCse参数
        
        If IsMissing(UpperCase) Then
            UPORLOW = UCase(cell)
        Else
            UPORLOW = LCase(cell)
        End If
            
    End Function
    
    '参数传入1.固定数量参数;2.数组;3.可选参数
    '问题:怎么输出数组
    
    Function WEEKTOTAL()
        WEEKTOTAL = Array("周一", "周二", "周三", "周四", "周五", "周六", "周日")
        '使用方法
        '1.框柱不能多于数组数量的单元格(多了的会显示错误值,还不能单独删除)
        '2.把=WEEKTOTAL输入到单元格中,然后注意不要就按回车键哈,是按Ctrl+Shift+Enter三个一起
        '3.数组输出的值在单元格只会横着排
    End Function
    
    '怎么实现想横着就横着想竖着就竖着的数组排列呢?
    '和之前一样,传入一个可选参数,这里简单点,随便穿了参数就当做竖着排列好了
    Function WEEKTOTALPLUS(Optional arg As Variant)
        '基本流程就是1.没参数,不管了;有参数,横着排
        Dim weeks As Variant
        '不能Dim weeks(7) as String ,然后weeks =arry(7个值)这样操作
        weeks = Array("周一", "周二", "周三", "周四", "周五", "周六", "周日")
        '还是用IsMissing判断有没有参数
        If IsMissing(arg) Then
            WEEKTOTALPLUS = weeks
        Else
            '有参数了,就变成竖的往下排列,用系统的转置函数
            WEEKTOTALPLUS = Application.Transpose(weeks)
        End If
    End Function
    
    '刚才例子SUMARRAY在输入=SUMARRAY(A4:D4)可以运行,但输入=SUMARRAY(A4,B4,C4,D4)无法计算
    '不定数量的参数的处理办法:使用数组作为最后一个参数,加上关键字PrarmArray
    
    Function SUMPLUS(ParamArray arglist() As Variant) As Double
        Dim arg As Variant
        For Each arg In arglist
            SUMPLUS = SUMPLUS + arg
        Next arg
        '这个时候输入=SUMARRAY(A4,B4,C4,D4)等等多个参数可以计算
        '但是输入=SUMARRAY(A4:D4)又可以运行,后面完善类似SUM的功能
    End Function
    

     

    展开全文
  • VBA-自定义实用函数

    2017-07-02 22:14:00
      总结自定义VBA函数,补充《基于Office_VBA的数据处理、挖掘、建模及可视化的自动化框架设计》方案中相关函数,方便查找和应用。 目录概览  1)数组写入其他工作簿中(注:说明文档中未修改)  2)自动当前工作...
    copyright.gif(2017-07-02 银河统计)

      总结自定义VBA函数,补充《基于Office_VBA的数据处理、挖掘、建模及可视化的自动化框架设计》方案中相关函数,方便查找和应用。

    目录概览

    1)数组写入其他工作簿中(注:说明文档中未修改)

    2)自动当前工作薄工作表的名称

    3)自动判断其他工作薄工作表的名称

    4)字典取唯一项

    5)sql 调取excel工作表数据

    6)自动取工作表的路径和名称

    7)sql调取excel工作表数据,返回数组数据结果

    8)语句8

    9)语句9

    10)语句10

    11)语句11

    12)语句12

    13)语句13

    14)语句14

    15)语句15

    16)语句16

    17)语句17

    18)语句18


    1)数组写入其他工作簿中(注:说明文档中未修改)

        Public Function oWriteIntoExcel(ByVal oDataArr, ByVal parentFolderPath As String, ByVal DocumentName As String, ByVal oType As String, _
                     ByVal oSheet As String, ByVal oCellLocation As String, ByVal oColumn As Long, ByVal oTypeColumn As Long)
            
            Dim mypath As String
            mypath = parentFolderPath & DocumentName & "." & oType
            Application.DisplayAlerts = False
            Workbooks.Open mypath
            With Worksheets(oSheet)
                .Select
                If oTypeColumn = 1 Then
                    Call oArrTransDataRY2(oDataArr, oSheet, oCellLocation, oColumn)
                ElseIf oTypeColumn = 2 Then
                    Call oArrTransDataRYH1(oDataArr, oSheet, oCellLocation, oColumn)
                ElseIf oTypeColumn = 3 Then
                    Call oArrTransDataRYS1(oDataArr, oSheet, oCellLocation, oColumn)
                End If
            End With
            ActiveWorkbook.Close SaveChanges:=True
            Application.DisplayAlerts = True
            
        End Function

    2)自动当前工作薄工作表的名称

        Public Function oGetSheetName()
            
            Dim arr
            Dim i As Integer
            ReDim arr(0 To Sheets.Count - 1)
            For i = 0 To Sheets.Count - 1
                arr(i) = Sheets(i + 1).Name
            Next
            oGetSheetName = arr
            
        End Function

    3)自动判断其他工作薄工作表的名称

        Public Function oGetOtherSheetName(ByVal parentFolderPath As String, ByVal DocumentName As String, ByVal oType As String)
            
            Dim arr
            Dim mypath As String
            Dim mysheet As String
            Dim i, n As Integer
            mypath = parentFolderPath & DocumentName & "." & oType
            mysheet = DocumentName & "." & oType                     
            Application.DisplayAlerts = False
            With GetObject(mypath)
                Workbooks(mysheet).Activate
                n = Workbooks(mysheet).Sheets.Count - 1
                ReDim arr(0 To n)
                For i = 0 To n
                    arr(i) = Sheets(i + 1).Name
                Next
                .Close False
            End With
            Application.DisplayAlerts = True 
            oGetOtherSheetName = arr
            
        End Function

    4)字典取唯一项

        Function dic_qc(Byval arr)
        
            Dim dic As Object
            Dim arr1, ra
            Dim n1, n2, i
            Set dic = CreateObject("Scripting.Dictionary")
            n1=UBound(arr)
            n2=LBound(arr)
            For i = n2 to n1
                ra=dic(arr(i))
            Next
            'Range("C2").Resize(dic.Count, 1)=Application.Transpose(dic.keys)
            'arr1=Application.Transpose(dic.keys)
            arr1=dic.keys
            dic_qc=arr1
        
        End Function
        

    5)sql 调取excel工作表数据

        Sub data_group_by()
            
            'Sheets("原始数据").Select
            Dim conn As Object
            Dim sql, t
            Set t = Sheets("Sheet")
            Set conn = CreateObject("adodb.connection")
            conn.Open "dsn=excel files;dbq=" & ThisWorkbook.FullName
            sql = "select id, sum(A) from [Sheet$] group by id"
            t.[Z1].CopyFromRecordset conn.Execute(sql)
            conn.Close
            Set conn = Nothing
            MsgBox "分组统计已完成!", 64
            
        End Sub

    6)自动取工作表的路径和名称

        path = ThisWorkbook.path & Application.PathSeparator
        name = ThisWorkbook.FullName

    7)sql调取excel工作表数据,返回数组数据结果

        '------------------------
        'SELECT select_list
        '[ INTO new_table ]
        'From table_source
        '[ WHERE search_condition ]
        '[ GROUP BY group_by_expression ]
        '[ HAVING search_condition ]
        '[ ORDER BY order_expression [ ASC | DESC ] ]
        '
        '如果要改为之前我的那种说明方式,可以理解为:
        'Select 列名1,列名2,……
        '[Into 新表格名]
        'From 表格名
        '[Where {条件}]
        '[Group By 组合列名1,组合列名2,……]
        '[Having {组合条件}]
        '[Order By 排序列名1,排序列名2,…… [Asc|Desc]]
        '------------------------
        
        ' sql 调取excel工作表数据
        Public Function oGetDataSql(ByVal sql As String)
            
            On Error Resume Next
            Dim AdoConn As Object
            Dim AdoRst As Object
            
            Dim oArr1(), oArr2(), oArr3()
            Dim k, k1, k2 As Long
            Dim i As Long
            Dim oCount As Long
            Dim oArr
            Dim ii, jj As Long
            Dim n1, n2, n3, n4 As Long
            
            AdoConn.BeginTrans
            Set AdoConn = CreateObject("ADODB.connection")
            AdoConn.Open "DSN=EXCEL FILES;DBQ=" & ThisWorkbook.FullName
            Set AdoRst = AdoConn.Execute(sql)
            'Application.Wait Now() + TimeValue("00:00:02")
            oCount = AdoRst.Fields.Count - 1
            k2 = 0
            Do While Not AdoRst.EOF
                k1 = 0
                ReDim oArr1(0)
                For i = 0 To oCount
                    ReDim Preserve oArr1(0 To k1)
                    oArr1(k1) = AdoRst(i)
                    k1 = k1 + 1
                Next
                ReDim Preserve oArr2(0 To oCount, 0 To k2)
                For i = 0 To oCount
                    oArr2(i, k2) = oArr1(i)
                Next
                k2 = k2 + 1
                AdoRst.MoveNext
            Loop
            '    可以取结果的名字
            '    k = 0
            '    For i = 0 To oCount
            '        ReDim Preserve oArr3(0 To k)
            '        oArr3(k) = AdoRst(i).Name
            '        k = k + 1
            '    Next
            AdoConn.CommitTrans
            
            '数组oArr2 | 行列转置+去掉oArr2第一列的空值null
            n1 = LBound(oArr2, 1)
            n2 = UBound(oArr2, 1)
            n3 = LBound(oArr2, 2)
            n4 = UBound(oArr2, 2)
            ReDim oArr(n3 To n4 - 1, n1 To n2)
            For ii = n1 To n2
                For jj = n3 To n4
                    oArr(jj, ii) = oArr2(ii, jj + 1)
                Next
            Next
            
            If Not AdoRst Is Nothing Then
                If AdoRst.State = 1 Then
                   AdoRst.Close
                End If
                Set AdoRst = Nothing
            End If
            AdoConn.Close
            Set AdoConn = Nothing
            oGetDataSql = oArr
            'MsgBox "分组统计已完成!", 64
            
        End Function
        
        '-----------------------
        
        Sub test()
        
            Dim sql, arr
            'sql = "select id As oID, sum(A) As oSum, count(B) As oCount, avg(C) As oAvg, max(D) As oMax, min(E) As oMin from [Sheet$] group by id"
            sql = "select id, sum(A), count(B), avg(C), max(D), min(E) from [Sheet$] group by id"
            arr = oGetDataSql(sql)
        
        End Sub
        '------------------------

    8)语句8

    9)语句9

    10)语句10

    11)语句11

    12)语句12

    13)语句13

    14)语句14

    15)语句15

    16)语句16

    17)语句17

    18)语句18

    转载于:https://www.cnblogs.com/cloudtj/articles/7107492.html

    展开全文
  • Transpose实现数组行列转置的限制

    万次阅读 2018-02-24 13:25:46
    提到数组,大家都不陌生,什么是数组行列转置呢?其实也很简单,如下图所示,行列转置... 在Excel工作表中有个强大的函数Transpose,可以直接实现数组行列转置,作为VBA开发者来说,肯定不会忘记用这个。Sub Dem...

            提到数组,大家都不陌生,什么是数组行列转置呢?其实也很简单,如下图所示,行列转置就是将数组元素的存放方式进行转换,原来保存在第一列的数据,将保持在新数组的第一行,并且保持原有顺序,即6在第一个位置,8在最后一个位置。其他列依次类推。


            在Excel工作表中有个强大的函数Transpose,可以直接实现数组行列转置,作为VBA开发者来说,肯定不会忘记用这个。

    Sub Demo1()
        Dim aData(1 To 3, 1 To 2)
        For i = 1 To 3
            For j = 1 To 2
                aData(i, j) = i + j * 5
            Next j
        Next i
        aTrans = Application.Transpose(aData)
        Debug.Print UBound(aData, 1) & " x "; UBound(aData, 2)
        Debug.Print "=>>"
        Debug.Print UBound(aTrans, 1) & " x "; UBound(aTrans, 2)
    End Sub

            一句代码轻松实现转置,比很多程序开发语言都要简单,在本地窗口中可以看到转置效果。


            这么好用的神奇代码,有时会莫名其妙的罢工,我们来看看下面的代码,运行代码将给出“类型不匹配”的错误提示,错误号为“13”。

    Sub Demo2()
        Dim aData(1 To 3, 1 To 2)
        For i = 1 To 3
            For j = 1 To 2
                aData(i, j) = i + j * 5
            Next j
        Next i
        aData(1, 1) = Application.Rept("$", 256)
        aTrans = Application.Transpose(aData)   ' Runtime error "13"
        Debug.Print UBound(aData, 1) & " x "; UBound(aData, 2)
        Debug.Print "=>>"
        Debug.Print UBound(aTrans, 1) & " x "; UBound(aTrans, 2)
    End Sub

            转置失败的原因在于aData(1,1)的字符长度为256,Transpose所能够处理的数组元素字符长度最大为255。有时就是需要处理这样的数组元素,那么我们可以使用自定义函数进行数组的行列转置。TrasnposeArray可以实现二维数组的行列转置。其效果与Transpose函数相同。

    Sub Demo3()
        Dim aData(1 To 3, 1 To 2)
        For i = 1 To 3
            For j = 1 To 2
                aData(i, j) = i + j * 5
            Next j
        Next i
        aData(1, 1) = Application.Rept("$", 256)
        aTrans = TransposeArray(aData)
        Debug.Print UBound(aData, 1) & " x "; UBound(aData, 2)
        Debug.Print "=>>"
        Debug.Print UBound(aTrans, 1) & " x "; UBound(aTrans, 2)
    End Sub
    
    Function TransposeArray(arrA) As Variant
        Dim aRes()
        If VBA.IsArray(arrA) Then
            ReDim aRes(LBound(arrA, 2) To UBound(arrA, 2), LBound(arrA, 1) To UBound(arrA, 1))
            For i = LBound(arrA, 1) To UBound(arrA, 1)
                For j = LBound(arrA, 2) To UBound(arrA, 2)
                    aRes(j, i) = arrA(i, j)
                Next
            Next
            TransposeArray = aRes
        End If
    End Function
            补充说明一点,由于Transpose本身是工作表函数,因此大家使用时,需要注意它的另一个限制,就是被转置数组的最大行数是65,536。


    展开全文
  • 几个Excel vba示例文件. 包括行列转置,表格数据到数组,一维数组转二维数组,单列转多列等。均含示例数据,如: 250B的文本测试数据,晶振微调后的频率测试数据等。 另外还有EXCEL的常用命令语句精选。
  • VBA常用功能函数

    千次阅读 2014-12-22 10:46:55
    (2) On Error Resume Next '忽略错误继续执行VBA代码,避免出现错误消息 (3) On Error GoTo ErrorHandler '当错误发生时跳转到过程中的某个位置 (4) On Error GoTo 0 '恢复正常的错误提示 (5) Application....
  • 选择性粘贴转置() Range( " a2:b9 " ).Copy Range( " a11 " ).PasteSpecial 12 , , , True End Sub 给出部分效果图:   转载于:https://www.cnblogs.com/gilgamesh-hjb/p/7496011.html
  • VBA技巧(二):Split函数用法

    万次阅读 2009-03-12 18:14:00
    Split函数描述返回一个下标从零开始的一维数组,它包含指定数目的子字符串语法Split(expression[, delimiter[, limit[, compare]]]) Dim mutname As StringDim mutDim count As Integer mut = Split(mutname, ",")...
  • 使用动态或静态SQL实现 类似于EXCEL的行列转置功能
  • VBA中妙用Split

    万次阅读 2017-03-13 19:47:40
    今天VBA项目甲方反馈有一些问题,其中有一个是: 将EXCEL表格中一个单元格中的: TX121 MF501 TX122 MF501 TX123 MF501 TX124 MF501 TX125 MF501 拆分成5个,每个数据都是以T开头 之前我的代码是这样写的...
  • VB6.0将二维数组进行行列转置怎么处理?怎么将行列对调构成一个新的二维数组呢?
  • 1、代码目的:把相同ID的数据,合并到...transpose函数有65536的限制,当同一ID行数超过限制时,跳“类型不匹配”的错误,求大佬指点? ![图片说明](https://img-ask.csdn.net/upload/201809/19/1537336643_641881.png)
  • VBA数组完全教程

    万次阅读 多人点赞 2017-06-25 11:45:15
    兰色幻想VBA数组入门教程10集 1. 前言:不要把VBA数组想的太神秘,它其实就是一组数字而已。 2. 数组的维数: Sub 数组示例() Dim x As Long, y As Long Dim arr(1 To 10, 1 To 3) '创建一个可以容下10行...
  • 16.test16 其它功能函数 文章目录 EXCEL自学之路第一节 前言 一、EXCEL函数VBA? 二、使用方法 1.test01 excel生成目录 2.test02 打开全部隐藏工作表 3.test03 多个工作表汇总到一个工作表 4.test04 隔m列(行)...
  • Excel数组的转置和变换.rar,数组转置就是将数组的行列进行互换,形成一个新数组,即把数组在屏幕上旋转了90°。数组的转置需要借助ERANSPOSE函数来完成的,如本例。
  • 注意:也可以使用sumproduct函数进行计算,不过,需要将第一个表格进行转置(transpose)操作转换为以下形式。 Expenses Raw Materials Labor Overhead and miscellaneous Product A 0.1...
  • VBA-Excel工具函数

    2017-03-18 22:59:00
      Excel_VBA类模块框架是在Excel后台通过vba编程方式,实现类似R语言模块化数据操作的功能,对数据进行处理、挖掘、建模及可视化,提高数据分析和挖掘人员的数据处理效率,从而能将更多的时间投入到数据挖掘中,...
  • sql内置函数pivot强大的行转列功能

    万次阅读 2012-11-05 17:10:11
    PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P 完整语法: table_source PIVOT( 聚合...
  • ExcelVBA之数组错误

    2020-06-07 01:55:13
    如果你试图给数组赋予比声明数组时更多的成员的话,VBA就会显示错误信息“下标越界”。 另外一个使用数组时经常碰到的错误是类型不匹配。要避免这类错误,就要牢记一个数组的每个成员都必须具有相同的数据类型。...
  • 原来的问题和代码 Sub ponyma1() Dim arr1() '和arr1()下面赋值要一致?要么都arr? j = 0 '生成数组 arr1() = Range("a1" & ":" & "a" & Range("a65535").End(xlUp)....'从 excel 的 range 读的内...
  • 基于 Excel VBA 实现 DFT

    2020-12-09 07:19:43
    利用ExcelVBA编写了一个自定义的 DFT(Xn, Index=True)函数,该函数返回数组。第一个输入参数是时域信号,要求在Excel表中已列的形式存在;第二个布尔型参数默认为True,返回变换后的实部数组;取False时,返回虚部...
  • 今天和大家要说的是VBA数组的应用,上篇文章我们说的是数组的基础知识点,有不明白的小伙伴可以点击链接进行知识点回顾Excel VBA 数组基础知识,初学者不可不学的关键知识,今天主要说说数组的几个操作方法,这个是...
  • 第23集 VBA数组-4:数组与函数 100、 数组的最值 Application.Max(数组名) Application.Min(数组名) Application.Large(数组名,第几个) Application.Small(数组名,第几个) Sub s() Dim arr1() arr1 = Array(1, 12, 4...
  • VBA数组

    千次阅读 2019-05-03 01:49:57
    VBA数组详解
  • VBA dictionary的用法

    千次阅读 2019-10-10 21:35:04
    1.VBA中创建字典:用的是WSH引用。 dictionary是保存数据键和项目对的对象。 下面代码示范如何创建 Dictionary 对象: Dim myd As Object Set myd = CreateObject("Scripting.Dictionary") d.Add "a", "Athens...

空空如也

空空如也

1 2 3 4 5 ... 17
收藏数 334
精华内容 133
关键字:

vba转置函数