1

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

Например, у меня есть журнал транзакций

         A            B
1    01/25/2018    USD 50.3
2    02/01/2018    USD 21.5
3    02/09/2018    USD 25.4
4    02/17/2018    USD 18.9
5    02/24/2018    USD 34.9
6    02/28/2018    USD 70.5
7    03/02/2018    USD 50.5
8    03/04/2018    USD 22.1

Note: The dates are formatted as date in excel, and the amount are formatted as
Accounting cell

Как сделать так, чтобы Excel автоматически копировал на другие листы транзакции в феврале.

2 ответа2

3

Хотя VB-код хорош, я не уверен, что это будет лучшим решением для тех, кто не знаком с консолью разработчика.

Вы можете сделать столбец на стороне для каждого месяца, извлечь транзакции за этот месяц, а затем суммировать столбец для общей суммы.

В столбце C используйте что-то вроде:

= ЕСЛИ (МЕСЯЦ ($ А2)= 1, $ B2,0)

где 1 будет январь, 2 февраля ...
Затем повторите для февраля в столбце D

1

Вы не указали название или индекс своих рабочих листов, поэтому мне пришлось использовать общие индексы 1 и 2 .

Предоставленная ограниченная информация - это лучшее, что я могу для вас сделать. Но не должно быть сложным изменить код, чтобы он точно соответствовал тому, что вы хотите.

Option Explicit

Sub copyTransactions()

    ' ws = the worksheet that contains the code to copy
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets(1)

    'Create a multi-dimensional array that contains your two columns of data
    Dim myArr() As Variant
    myArr = ws.UsedRange.Columns("A:B").Value

    'ws2 = the worksheet you are copying TO
    Dim i As Long, ws2 As Worksheet, x As Long
    Set ws2 = ThisWorkbook.Worksheets(2)

    'Loop the array, and if it matches your month of 2 (Feb) then copy
    'the data from ws to ws2
    With ws2
        For i = 1 To UBound(myArr)
            If month(myArr(i, 1)) = 2 Then  ' 2 = February
                x = x + 1
                .Cells(x, 1) = myArr(i, 1)  ' the ,1 is column A
                .Cells(x, 2) = myArr(i, 2)  ' the ,2 is column B
            End If
        Next
    End With

End Sub

Вкратце вы берете столбцы A + B и помещаете их в массив myArr() . Затем вы будете зацикливать этот массив в столбце A и устанавливать критерии для соответствия любому месяцу, который соответствует вашему месячному индексу 2 (2 = февраль). Если он найден, вы продолжаете копировать массив в ws2 .

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