L oop через столбцы, которые варьируются от 1 до 31 - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь сделать расчет, который будет l oop через несколько столбцов, максимум будет 31 столбца (31 день в месяце).
Начиная с "B8", следующий столбец будет "C8 "...

Шаблон Excel
enter image description here

Мне удалось вычислить первый диапазон.

Я хочу добавить все oop для расчета количества часов для каждого существующего столбца: который может варьироваться от 1 дня до 31 дня в зависимости от человека, использующего шаблон Excel.

Количество проектов также может отличаться «Код OTP» от 1 до 10 проектов.

Обновление моего кода:

Sub CalculHeuresTravail()
Application.ScreenUpdating = False
Dim i As Integer, firstDate As Date, secondDate As Date, n, rng As Range
Set ws = ThisWorkbook.Sheets("Feuil1")
MaSomme = 0
i = 8
f = 8

firstDate = ws.Range("E2")
secondDate = ws.Range("E3")
n = DateDiff("d", firstDate, secondDate)
n = n + 1

While ws.Range("A" & i).Value <> ""
    i = i + 1
Wend

While f < i
    MaSomme = MaSomme + ws.Range("B" & f).Value
    f = f + 1  
Wend

If MaSomme = "8,8" Then
    MsgBox "OK"
    Else: MsgBox "NON"
End If
End Sub

1 Ответ

0 голосов
/ 07 февраля 2020

Вот выше решение, которое сработало для меня:

Оно проходит по всем столбцам, указанным в диапазоне переменных, хранящемся в переменной с именем 'e', ​​которая вычисляет первый столбец, с которого начинается, и количество дней, указанных пользователем.

Sub CalculHeuresTravail()
Application.ScreenUpdating = False
Dim i As Integer, firstDate As Date, secondDate As Date, nombreDeJours, rng As Range, e
Set ws = ThisWorkbook.Sheets("Feuil1")

    nombreDeProjets = 8

    firstDate = ws.Range("E2")
    secondDate = ws.Range("E3")
    nombreDeJours = DateDiff("d", firstDate, secondDate)
    nombreDeJours = nombreDeJours + 1


    While ws.Range("A" & nombreDeProjets).Value <> ""
     nombreDeProjets = nombreDeProjets + 1
    Wend

    IndiceDeColomne = 2
    e = IndiceDeColomne + nombreDeJours
    While IndiceDeColomne < e
        caseDebutHeures = 8
        MaSomme = 0
        While caseDebutHeures < nombreDeProjets

            MaSomme = MaSomme + ws.Cells(caseDebutHeures, IndiceDeColomne).Value
            caseDebutHeures = caseDebutHeures + 1
            ws.Cells(6, IndiceDeColomne).Value = MaSomme
        Wend


        If MaSomme = "8,8" Then
            MsgBox "Colomne " & IndiceDeColomne & " OK"
            Else: MsgBox "Colomne " & IndiceDeColomne & " NON OK"
        End If

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