Я пытаюсь создать макрос, который позволяет мне преобразовывать данные, полученные от клиента, в данные, которые я могу импортировать в систему. Данные, которые я получаю, имеют формат:

Как я могу сделать это через VBA Macro? Поэтому он должен прочитать данные, а затем создать новый лист с копией данных в формате, который я могу использовать. Как это:

3 ответа3

0

Это макрос, который должен делать то, что вы хотите. Это:

  • Запросы на количество средств
  • Предполагается, что таблица данных начинается в A1
  • печатает на "Sheet2" в столбцах от A до C
  • Выходит, если в столбце date встречается пустая ячейка

Примечание: если "Sheet2" не существует, макрос потерпит неудачу, поэтому создайте его. Также вам нужно поместить заголовки в "Sheet2" и настроить формат ячейки для дат и сумм в "Sheet2"

отрегулируйте по мере необходимости

Sub wolfeline()
Dim c As Range
Dim k As Integer
Dim x As Integer
Dim y As Integer
Dim WScurr As Worksheet
Dim WStarg As Worksheet

'Set current and target WS
'//Note: target WS must exist already
Set WScurr = ActiveSheet
Set WStarg = Sheets("Sheet2")

'k=2 so we start on row 2, below the headers you've put, adjust as needed
k = 2

'count the range of dates
y = [counta(A:A)]

'Ask user to input number of funds
x = InputBox("Number of Funds?")
'Feel free to define range("A:A") to your actual range e.g. range("A2:A100")
For Each c In WScurr.Range("A2:A" & y)
If c.Value = "" Then Exit Sub

    ' "to 3" indicates there are 3 funds, adjust as needed
    For i = 1 To x
        If c.Offset(, i) <> "" Then
            'we're printing this in columns K, L and M, adjust as needed
            WStarg.Cells(k, "A") = c
            WStarg.Cells(k, "B") = Cells(1, c.Offset(, i).Column)
            WStarg.Cells(k, "C") = c.Offset(, i)
            k = k + 1
        End If
    Next
Next


End Sub
0

Включите устройство записи макросов и используйте метод, описанный в блоге Джона Уокенбаха. Он приходит с этим кодом, используя пример данных на скриншоте:

Sub Unpivot()

'
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlConsolidation, SourceData:= _
        Array("Sheet1!R1C1:R4C4"), Version:=xlPivotTableVersion15).CreatePivotTable _
        TableDestination:="", TableName:="PivotTable1", DefaultVersion:= _
        xlPivotTableVersion15
    ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
    ActiveSheet.Cells(3, 1).Select
    ActiveSheet.PivotTables("PivotTable1").DataPivotField.PivotItems( _
        "Count of Value").Position = 1
    ActiveSheet.PivotTables("PivotTable1").PivotFields("Row").Orientation = _
        xlHidden
    ActiveSheet.PivotTables("PivotTable1").PivotFields("Column").Orientation = _
        xlHidden
    Range("A4").Select
    Selection.ShowDetail = True
End Sub

Отрегулируйте по своему вкусу или попробуйте код сообщения Джона Уокенбаха здесь. Он был написан для более ранней версии Excel, поэтому может отличаться от кода 2010 года.

0

Если у вас не слишком много столбцов средств, вы можете сделать это вручную.

  1. Перед фондом 1 (столбец B) вставьте один столбец. Скопируйте формулу "IF" в каждую ячейку, которая проверяет, есть ли значение в столбце B (теперь столбец C), и, если это так, устанавливает для содержимого значение "Fund 1". В ячейке B2:

    = IF (C2 <> "", "Fund 1", "")

  2. Перед следующей колонкой фонда вставьте две колонки. В первом из этих двух элементов установите формулу "ЕСЛИ", которая проверяет, есть ли значение в столбце "Фонд", и, если да, копирует дату из столбца А. Во втором из двух новых столбцов повторите шаг 1 выше, но вставьте правильный фонд. То есть в ячейках D2 и E2

    = IF (F2 <> "", A2, "") || = IF (F2 <> "", "Fund 2", "") ||

Сделайте это для каждой колонки фонда.

  3.  Затем скопируйте ячейки из каждого из трехколоночных блоков на новый лист, чтобы каждый последующий блок располагался под предыдущим. То есть выберите и скопируйте из первой ячейки данных столбца A (не строки 1) в последнюю ячейку с данными в столбце C, а не во все столбцы, и вставьте их в верхнюю левую ячейку нового листа. Затем выберите и скопируйте данные из первой ячейки в столбце D вниз до последней ячейки данных в столбце F и вставьте их в столбец A в строку, расположенную непосредственно под ранее вставленными данными.

После того как все эти блоки будут скопированы, вы можете отсортировать данные по столбцу A (столбец даты). Это не только упорядочит все транзакции в хронологическом порядке, но и заблокирует все пробелы, предоставив вам данные в нужном формате.

Макро версия

Если есть много Колонный фонда, использовать записи макросов , чтобы сделать шаги 1 и 2, и запустить код , который делает шаг 2 через петлю для каждого фонда (установить «Фонд #» строку, выполнив некоторую математику на колонке вы находятся в).

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

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