Полагаю, это будет немного лениво, но я работаю над этим уже несколько часов, чтобы заставить его работать в Google Sheets. Теперь мне нужно также заставить его работать в Excel, используя VBA. Это довольно простой скрипт для опытных программистов, которым я не являюсь. : -)
У меня есть диапазон букв в электронной таблице. Каждая буква представляет значение. Сценарий Google Apps выглядит следующим образом:
function Arsarbetstid(v,year) {
switch(year) {
case 2020: // Tider gällande 2020
var n=6.7, // N
np=9, // N+
k=8.8, // K
km=7, // K-
k4=4, // K4
d=8.8, // D
h=12, // H
hp=13; // H+
break;
case 2019: // Tider gällande 2019
var n=6.9, // N
np=9, // N+
k=8.7, // K
km=7, // K-
k4=4, // K4
d=9, // D
h=12, // H
hp=13; // H+
break;
case 2018: // Tider gällande 2018
var n=6.9, // N
np=9, // N+
k=8.7, // K
km=7, // K-
k4=4, // K4
d=9, // D
h=12, // H
hp=13; // H+
break;
case 2017: // Tider gällande 2017
var n=7, // N
np=9, // N+
k=8.8, // K
km=7, // K-
k4=4, // K4
d=9.1, // D
h=12, // H
hp=13; // H+
break;
case 2016: // Tider gällande 2016
var n=7, // N
np=9, // N+
k=8.8, // K
km=7, // K-
k4=4, // K4
d=9.1, // D
h=12, // H
hp=13; // H+
break;
case 2015: // Tider gällande 2015
var n=7, // N
np=9, // N+
k=8.8, // K
km=7, // K-
k4=4, // K4
d=9.1, // D
h=12, // H
hp=13; // H+
break;
case 2014: // Tider gällande 2014
var n=7, // N
np=9, // N+
k=8.8, // K
km=7, // K-
k4=4, // K4
d=9.1, // D
h=12, // H
hp=13; // H+
break;
case 2013: // Tider gällande 2013
var n=7, // N
np=9, // N+
k=8.8, // K
km=7, // K-
k4=4, // K4
d=9.1, // D
h=12, // H
hp=13; // H+
break;
default: // Tider gällande om inget årtal anges.
var n=6.7, // N
np=9, // N+
k=8.8, // K
km=7, // K-
k4=4, // K4
d=8.8, // D
h=12, // H
hp=13; // H+
break;
}
var total = 0;
for (var i=0;i < v.length;i++) {
var row = v[i];
for (var j=0;j < row.length;j++) {
switch(row[j]) {
case "N":
total += n;
break;
case "N+":
total += np;
break;
case "D":
total += d;
break;
case "H":
total += h;
break;
case "H+":
total += hp;
break;
case "K":
total += k;
break;
case "K-":
total += km;
break;
case "K4":
total += k4;
break;
}
}
}
return total;
};
v - это диапазон букв, а год - это просто целое число, представляющее год, поэтому я могу выбирать различные значения букв в зависимости от года. Я пытался, и до сих пор не удалось преобразовать это в VBscript. Есть ли кто-нибудь достаточно опытный, чтобы помочь мне преобразовать это? Это не должно быть слишком сложно для тех, кто хотя бы немного выше базовых c навыков как в Javascript, так и в VBscript.
VBA пока выглядит так, но не работает.
Public Function arsarbetstid(v As Range, year As Integer)
Dim total As Double
Select Case year
Case 2020
n = 6.7
np = 9
k = 8.8
km = 7
k4 = 4
d = 8.8
h = 12
hp = 13
Case 2019
n = 6.7
np = 9
k = 8.8
km = 7
k4 = 4
d = 8.8
h = 12
hp = 13
Case 2018
n = 6.7
np = 9
k = 8.8
km = 7
k4 = 4
d = 8.8
h = 12
hp = 13
Case 2017
n = 6.7
np = 9
k = 8.8
km = 7
k4 = 4
d = 8.8
h = 12
hp = 13
Case 2016
n = 6.7
np = 9
k = 8.8
km = 7
k4 = 4
d = 8.8
h = 12
hp = 13
Case 2015
n = 6.7
np = 9
k = 8.8
km = 7
k4 = 4
d = 8.8
h = 12
hp = 13
Case 2014
n = 6.7
np = 9
k = 8.8
km = 7
k4 = 4
d = 8.8
h = 12
hp = 13
Case 2013
n = 6.7
np = 9
k = 8.8
km = 7
k4 = 4
d = 8.8
h = 12
hp = 13
Case Else
n = 6.7
np = 9
k = 8.8
km = 7
k4 = 4
d = 8.8
h = 12
hp = 13
End Select
For i = 0 To v.Length
Row = v(i)
For j = 0 To Row.Length
Select Case Row(j)
Case "N"
total = total + n
Case "N+"
total = total + np
Case "D"
total = total + d
Case "H"
total = total + h
Case "H+"
total = total + hp
Case "K"
total = total + k
Case "K-"
total = total + km
Case "K4"
total = total + k4
End Select
Next
Next
arsarbetstid = total
End Function
Буду очень признателен за помощь.