Excel VBA - как определить год (дату) в одной ячейке, затем проверить данные в другой ячейке, а затем подсчитать - PullRequest
1 голос
/ 18 октября 2019

Помощь! Совсем недавно в Excel VBA, и сейчас я прохожу несколько платных курсов, чтобы поправиться, но я столкнулся с препятствием, и поиск в Google не дает мне результатов, которые я ищу.

Iиметь постоянно растущую электронную таблицу отслеживания, которая показывает данные о том, что мы обработали (мы называем это «построением»), в столбце, а затем данные, показывающие, что мы проверили (мы называем это проверенным) те данные, которые мы обработалив другой колонке. Я хочу узнать, был ли обработан год, и выяснить, прошел ли он аудит независимо от года проведения аудита, и, если да, добавьте его. Я хочу делать это для каждого года, поэтому 2017, 2018, 2019, 2020 и т. Д. И т. Д.

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

Например, столбец поиска Jкоторый содержит дату, когда мы обработали данные за 2017 год, затем посмотрите на проверенный столбец в той же строке (который также содержит дату), если там есть что-то, и посчитайте 1. Затем делайте это снова и снова, пока весь диапазон не будетбыл проверен. Каждый раз, когда мы находим дату с 2017 года, мы добавляем ее и делаем это для каждого года. В конце поиска результаты для каждого года должны быть введены в лист панели инструментов.

Есть ли способ написать код для проверки каждый год вместо того, чтобы вызывать каждый год специально?

Вот что я получил, но продолжаю сталкиваться с ошибкой. Либо «следующий без для» и другие, которые я не могу вспомнить сейчас. Я гуглил и добавлял все виды вещей, перемещал их и т. Д. И т. Д. Я уверен, что я делаю что-то действительно явно неправильное, но я просто не вижу этого. Пожалуйста, помогите новичку здесь.


Sub CountAudits()

Dim CellBuild As Range
Dim CellAudit As Range
Dim CellDateCount2017 As Long

For Each CellBuild In Sheet1.Range("J:J500") 'column J contains a date MMYYDD what we call "build" data in other words we processed it.

If CellBuild.Value = "2017" Then 'this checks if the date it was processed was in 2017

For Each CellAudit In Sheet1.Range("Q:Q500") 'this is the column containing the date it was audited. It will be blank if it was not audited.

If CellAudit.Value <> "" Then 'this checks if it's been audited. I don't care about the date just as long a there is something in the cell

CellDateCount2017 = CellDateCount2017 + 1 'if the processed date was 2017 and it was audited it adds a count of 1 to here.

Exit For

Sheet2.Range("V18").Value = CellDateCount2017 'Sheet2 is the sheet code name to the dashboard

Next ' I keep getting an "Next without for" error for this here. I've added all sorts of ends, end ifs, etc. but I can't figure it out.
End If

End Sub

Я нашел SUMPRODUCT, который, я думаю, я могу использовать, чтобы подсчитать, сколько раз 2017 отображается в моей колонке, но как мне его получитьдобавить его и перенести на панель? например, SUMPRODUCT(1*(YEAR(J1:J500)=2017))

Если бы это было не так весело, разобраться в этом, я мог бы просто уйти от этого! Я был укушен ошибкой "этот материал VBA - это весело".

1 Ответ

0 голосов
/ 18 октября 2019

Вы вкладываете ЗА и ЕСЛИ неправильно. Попробуйте код ниже. Я не проверял функциональность, я только исправил петли:

Sub CountAudits()

Dim CellBuild As Range
Dim CellAudit As Range
Dim CellDateCount2017 As Long

    For Each CellBuild In Sheet1.Range("J:J500") 'column J contains a date MMYYDD what we call "build" data in other words we processed it.

        If CellBuild.Value = "2017" Then 'this checks if the date it was processed was in 2017

            For Each CellAudit In Sheet1.Range("Q:Q500") 'this is the column containing the date it was audited. It will be blank if it was not audited.

                If CellAudit.Value <> "" Then 'this checks if it's been audited. I don't care about the date just as long a there is something in the cell

                CellDateCount2017 = CellDateCount2017 + 1 'if the processed date was 2017 and it was audited it adds a count of 1 to here.

                End If

            Next CellAudit

            Sheet2.Range("V18").Value = CellDateCount2017 'Sheet2 is the sheet code name to the dashboard

        End If

    Next CellBuild

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...