Мое решение принимает 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" />
Вы можете полностью отказаться от вызова функции и просто использовать 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