Excel宏转置只有几列

时间:2016-12-30 01:52:05

标签: excel vba excel-vba

我有一张excel表,如下所示:" Sheet1" &安培; " Sheet2的"我希望结果如" Sheet3"。

所示

Sample Data

最终我想把一个" Button"在单独的工作表(控制面板)中,当点击它时,我需要组合来自" Sheet1"和" Sheet2"具有转置效果,如" Sheet3"。

如何使用宏自动执行此操作,因为有~2000"行"在工作表1和工作表2中的~1000。我是宏的新手,所以希望我可以自动化,否则我会手动复制和粘贴所有这些。

谢谢!

3 个答案:

答案 0 :(得分:0)

使用返回工作表最后一行的函数可能会有所帮助:

Public Function funcLastRow(shtTarget As Worksheet, Optional iColLimit As Integer = -1) As Long

    If iColLimit = -1 Then
        iColLimit = 256
    End If

    Dim rowMaxIndex As Long
    rowMaxIndex = 0

    Dim ctrCols As Integer
    For ctrCols = 1 To iColLimit
    If shtTarget.Cells(1048576, ctrCols).End(xlUp).Row > rowMaxIndex Then
            rowMaxIndex = shtTarget.Cells(1048576, ctrCols).End(xlUp).Row
        End If
    Next ctrCols

    funcLastRow = rowMaxIndex

End Function

您可以像这样使用它:

Dim lLastRow As Long
lLastRow = funcLastRow(Sheets(1))

如果有效,请告诉我们

答案 1 :(得分:0)

以下是所有公式解决方案(无宏)

数据在Sheet1 A到I和Sheet2 A到G

我假设你只有6个部门。虽然如果你有额外的,公式需要很少或可能没有修改。

在表3中

重复六次用户ID

A2 = INDEX(Sheet1!A:A,1+QUOTIENT(ROW()-ROW($A$2)+6,6))

获取姓名,性别&国家

B2 = VLOOKUP($A2,Sheet1!$A$2:$I$3000,COLUMNS($A$1:B$1),FALSE)

C2 = VLOOKUP($A2,Sheet1!$A$2:$I$3000,COLUMNS($A$1:C$1),FALSE)

D2 = VLOOKUP($A2,Sheet1!$A$2:$I$3000,COLUMNS($A$1:D$1),FALSE)

获取部门访问权限。如果结果单元格为空白,"" & ...将避免为0.

E2 = "" & IF(SUMPRODUCT(--(Sheet1!$A$1:$I$1=F2))>0,HLOOKUP(F2,Sheet1!$A$1:$I$3000,MATCH(A2,Sheet1!$A$1:$A$3000,0),FALSE),HLOOKUP(F2,Sheet2!$A$1:$G$3000,MATCH(A2,Sheet2!$A$1:$A$3000,0),FALSE))

F2:F7部门是手动输入的(没有公式)。 F8F2相关联,以便在向下拖动时重复展示

G2 = "" & IF(SUMPRODUCT(--(Sheet1!$A$1:$I$1=F2))>0,INDEX(Sheet1!$I$1:$I$3000,MATCH(A2,Sheet1!$A$1:$A$3000,0)),INDEX(Sheet2!$G$1:$G$3000,MATCH(A2,Sheet1!$A$1:$A$3000,0)))

Screenshot of result

如果您需要,我可以准备谷歌表进行演示。欢呼声。

答案 2 :(得分:0)

此代码适用于Transpose和大数据的连接。

from unittest.mock import patch
from app import app


def test_index():
    with patch("app.session", dict()) as session:
        client = app.test_client()
        response = client.post("/", data={
            "username": "test"
        })
        assert session.get("username") == "test"
        assert response.data == b"Username saved in session"