将 Excel 数据行数据转换为报告表

将 Excel 数据行数据转换为报告表

我有一个包含以下数据的 excel 文件

名称 | 售出商品 | 售价
=====================================
杰夫 | 红笔 | L5
六月 | 蓝色笔 | L6
jane | 绿色笔 | L5
杰夫 | 蓝色笔 | L5
六月 | 绿色笔 | L7
jane | 红笔 | L5

变成这样:

      | 红笔 | 蓝笔 | 绿笔
==========================================
杰夫 | L5 | L5 | -
六月 | - | L6 | L7
简 | L5 | - | L5

“L”后面跟着的数字表示售价范围。(例如 L5 的价格可以是 0.4 美元到 0.5 美元)

我可以知道如何去做吗?因为我尝试了数据透视表,但没有得到我想要的结果。

数据透视表不起作用的原因是:

当我插入数据透视表时,我选择名称作为“行标签”,销售商品作为“列标签”,销售价格作为“值”,Excel 将给我销售价格计数作为“值”。我无法将其作为普通的纯值,只能作为我想要的表格。

以下是数据透视表提供的内容:

     行标签 | 蓝色笔 | 绿色笔 | 红色笔 | 总计
==================================================================
          六月 | 1 | 1 | | 2
          简 | | 1 | 1 | 2
          杰夫 | 1 | | 1 | 2
==================================================================
总计 | 2 | 2 | 2 | 6

答案1

这个 VBa 应该可以做到(或者至少可以让你入门)

Option Explicit

Sub myShaefferPenNibBroke()

'first, let's set up the headings on worksheet 2 and clear it all

Worksheets("Sheet2").Cells.Clear

Worksheets("Sheet2").Range("B1").Value = "red pen"
Worksheets("Sheet2").Range("C1").Value = "blue pen"
Worksheets("Sheet2").Range("D1").Value = "green pen"


Dim row As Integer
row = 2

Do While (Worksheets("Sheet1").Range("A" & row).Value <> "")

    Dim name As String
    name = Worksheets("Sheet1").Range("A" & row).Value

    Dim pen As String
    pen = Worksheets("Sheet1").Range("B" & row).Value

    Dim price As String
    price = Worksheets("Sheet1").Range("C" & row).Value

    Call UpdateOtherSheet(name, pen, price)

row = row + 1

Loop

End Sub

Sub UpdateOtherSheet(name As String, pen As String, price As String)

Dim row As Integer
row = 2

Dim doesExist As Boolean
doesExist = False

Do While (Worksheets("Sheet2").Range("A" & row).Value <> "")

    Dim resultName As String
    resultName = Worksheets("Sheet2").Range("A" & row).Value

    If (name = resultName) Then
       Call AddPrice(row, pen, price)
       doesExist = True
    End If



row = row + 1
Loop

 If Not doesExist Then
        row = 2
        Do While (Worksheets("Sheet2").Range("A" & row).Value <> "")
            row = row + 1
        Loop

        Worksheets("Sheet2").Range("A" & row).Value = name
        Call AddPrice(row, pen, price)

    End If

End Sub

Sub AddPrice(row As Integer, pen As String, price As String)

         Select Case pen
            Case "red pen"
                Worksheets("Sheet2").Range("B" & row).Value = price
            Case "blue pen"
                Worksheets("Sheet2").Range("C" & row).Value = price
            Case "green pen"
                Worksheets("Sheet2").Range("D" & row).Value = price
        End Select
End Sub

它读取工作表1上的原始表格并将其全部转换为工作表2上的表格

工作表 1

在此处输入图片描述

在我运行 vba 之后,Worksheet2

在此处输入图片描述

相关内容