VBA: извлекать минуты и часы между 2 столбцами

Мое решение принимает Copy & amp; Paste и сохраняет положение каретки. Он используется для стоимости продуктов, поэтому позволяет использовать только положительные десятичные значения. Может быть рефактористом очень легко разрешить отрицательные или целые цифры.

$(function () {
    $("input.only-positive-decimal").bind("change keyup input", function () {
            var position = this.selectionStart - 1;
                //remove all but number and .
                var fixed = this.value.replace(/[^0-9\.]/g, '');
                if (fixed.charAt(0) === '.')                  //can't start with .
                    fixed = fixed.slice(1);

                var pos = fixed.indexOf(".") + 1;
                if (pos >= 0)               //avoid more than one .
                    fixed = fixed.substr(0, pos) + fixed.slice(pos).replace('.', '');

                if (this.value !== fixed) {
                    this.value = fixed;
                    this.selectionStart = position;
                    this.selectionEnd = position;
                }
    });
});

Поместите на страницу html:

<input type="text" class="only-positive-decimal" />
0
задан Catalin Vasilescu 26 February 2019 в 14:00
поделиться

1 ответ

Вы можете полностью отказаться от вызова функции и просто использовать DateDiff для вычисления количества минут между каждой записью, используя цикл For-Next для итеративного добавления минуты в итерации к startTime

Option Explicit
Sub TimeSheet()
    Dim timeEntries As Range
    Dim entry As Range
    Dim startTime As Date
    Dim endTime As Date
    Dim lastRow As Long
    Dim minutes As Long
    Dim m As Long

    Set timeEntries = Worksheets("Input").Range("A2:A3")

    For Each entry In timeEntries
        startTime = entry.Offset(0, 1)
        endTime = entry.Offset(0, 2)

        minutes = DateDiff("n", startTime, endTime)
        With Worksheets("Output")
            For m = 1 To minutes - 1
                lastRow = .Range("A" & .Rows.Count).End(xlUp).Row + 1
                .Range("A" & lastRow) = entry
                .Range("B" & lastRow) = Format(startTime + (m / 1440), "dd.mm.yyyy hh:mm:00")
            Next m
        End With
    Next entry
End Sub

Это привело к результатам:

A   23.03.2018 08:17:00
A   23.03.2018 08:18:00
A   23.03.2018 08:19:00
A   23.03.2018 08:20:00
....
A   23.03.2018 13:55:00
B   23.03.2018 11:17:00
B   23.03.2018 11:18:00
B   23.03.2018 11:19:00
B   23.03.2018 11:20:00
....
B   23.03.2018 13:55:00
0
ответ дан Tate Garringer 26 February 2019 в 14:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: