Управлять макросом таблицы Excel в другом формате. Удалить дубликаты и переформатировать - PullRequest
0 голосов
/ 03 июля 2019

У меня около 2 месяцев в путешествии по VBA, и я столкнулся с проблемой, которую я не могу найти в Интернете.У меня проблемы с манипулированием таблицей Excel в другом формате, который был создан другим макросом, который я запрограммировал.У меня есть таблица со страной и именем фигуры в разных строках, перечисленных в нескольких строках.Я хочу, чтобы она была динамичной, поскольку эта таблица будет обновляться каждый день

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

Я попытался создать цикл и думаю, что мне, возможно, придется создать диапазон для каждой страны.

Sub ManipulateTable()
Dim Country as String
Dim USA as Range
Dim EU as Range
Dim India as Range

Const StartRow As Byte = 7
Dim LastRow as Long
LastRow = Range("A" & StartRow.(End(xlDown).Row

For i StartRow to LastRow 
Country = Range("A" & i).Value

If Country = "USA" Then Range("C" & i).value = 1
If Country = "EU" Then Range("C" & i).value = 2
If Country = "India" Then Range("C" & i).value = 3
Next i
' This to remove duplicates from column a
Range("A7:A30").RemoveDuplicates Columns:=Array(1). Header:= xlYes
' I thinking that I need to create a loop here 
' But I dont know where to start
For i StartRow to LastRow
Countryindex =  Range("C").Value
If Countryindex = 1 Then put under USA
If Countryindex = 2 Then put under EU

Моя таблица выглядит так с отдельными столбцами

    "A" "B"
     Data
1    USA Sales
2    USA Employment Figures
3    USA Tax
4    EU Sales
5    EU Employment Figures
6    India Sales
7    India Expenses 
8    India Employment Figures

Мне нужна таблица, которая выглядит следующим образом

 "A" 
 Data
1    USA: (With some color)
2    Sales
3    Employment
4    Tax
5    EU: (With some color)  
6    Sales
7    Employment
8    India: (With some color)
9    Sales
10   Expenses
11   Employment

Вся помощь очень важна.

Country Data Time

Country:
Data Time

1 Ответ

0 голосов
/ 03 июля 2019

Сохраните копию перед запуском, она перезапишет ваши данные.

Dim lastrow As Long
    Dim iter As Long
    Dim diter As Long
    Dim countrydict As Object
    Dim country As String
    Dim data As String
    Dim key As Variant

    Set countrydict = CreateObject("Scripting.Dictionary")

    With ActiveSheet
        lastrow = .Cells(.Rows.Count, "A").End(xlUp).row

        For iter = 1 To lastrow
            country = Trim(.Cells(iter, 1).value)
            data = Trim(.Cells(iter, 2).value)
            If countrydict.Exists(country) Then
                If Not InStr(1, countrydict(country), data) > 0 Then ' Remove Dupes
                    countrydict(country) = countrydict(country) & "|" & data ' an array would work but we can instr a string
                End If
            Else
                countrydict.Add country, data
            End If
        Next
        iter = 1
        For Each key In countrydict
            .Cells(iter, 1).value = key & ":"
            .cells(iter, 1).font.bold = True
            .cells(iter, 1).font.colorindex = 30
            iter = iter + 1
            For diter = 0 To UBound(Split(countrydict(key), "|"))
                .Cells(iter, 1).value = Split(countrydict(key), "|")(diter)
                iter = iter + 1
            Next
        Next
        .Columns("B").Clear
    End With
...