2

У меня есть файл Excel, который содержит следующие данные

Name  |  Items Sold  | Selling Price
=====================================
jeff  |  red pen     | L5
june  |  blue pen    | L6
jane  |  green pen   | L5
jeff  |  blue pen    | L5
june  |  green pen   | L7
jane  |  red pen     | L5

в это:

      | red pen  | blue pen  | green pen
==========================================
jeff  | L5       | L5        | -
june  | -        | L6        | L7
jane  | L5       | -         | L5

Буква «L», за которой следует цифра, обозначает диапазон продажной цены. (например, L5 может быть ценой от $ 0,4 до $ 0,5)

Могу ли я узнать, как мне это сделать, когда я попробовал сводную таблицу, но не получил то, что хотел.

Почему сводная таблица не работает, потому что:

Когда я вставляю сводную таблицу, я выбираю Имя в качестве «Метки строки», Товар, проданный в качестве «Метки столбца», и Продажную цену в качестве «Значения», Excel выдаст мне Счет цены продажи в качестве «Значения». Я не могу представить это как обычные простые значения, просто таблицу, которую я хотел.

Вот что мне даст сводная таблица:

     Row Labels | blue pen | green pen  | red pen  | Grand Total
==================================================================
          june  | 1        | 1          |          | 2
          jane  |          | 1          | 1        | 2
          jeff  | 1        |            | 1        | 2
==================================================================
Grand Total     | 2        | 2          | 2        | 6

1 ответ1

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

И Worksheet2 после того, как я запускаю VBA

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .