#excel #vba
#excel #vba
Вопрос:
Попытка написать макрос, который берет ячейки из одной строки (каждый раз увеличивая взятую ячейку на 2), затем вставьте его в другую электронную таблицу, пока он не попадет в столбец 33, затем начните со следующей строки.
Основываясь на моем коде, он возвращает следующие значения :
Dim wbDest As Workbook
Dim shtDest As Worksheet
Dim cell As Integer
Dim cellnum As Integer
Dim cellhours As Integer
Dim lastrow As Integer
cellhours = 3
cellnum = 10
lastrow = 8
Do Until cellnum > 31
' STHours
If Wkb.Sheets(1).Cells(2, cellnum).Value Like "Reg*" Or Wkb.Sheets(1).Cells(2, cellnum).Value Like "*OffReg*" Or Wkb.Sheets(1).Cells(2, cellnum).Value Like "*Hol*" Then
shtDest.Cells(lastrow, 10).Value = Wkb.Sheets(1).Cells(2, cellhours).Value shtDest.Cells(lastrow, 10).Value
'OTHours
Else
shtDest.Cells(lastrow, 11).Value = Wkb.Sheets(1).Cells(2, cellhours).Value shtDest.Cells(lastrow, 10).Value
End If
destLRow = destLRow 1
cellhours = cellhours 3
cellnum = cellnum 3
lastrow = lastrow 1
Loop
Комментарии:
1. вероятно, есть более простой способ сделать это: exceljet.net/formula/sum-every-nth-column
2. @sous2817 обычно я бы согласился с вами. К сожалению, этот процесс настраивается в гораздо большем макросе VBA и должен быть реализован через vba, а не в Excel.
Ответ №1:
Хорошо, я понял! Извините, я новичок в VBA, поэтому я уверен, что этот код выглядит ужасно, лол. Но вот оно.
Dim lRow As Integer
Dim destLRow As Integer
Dim cell As Integer
Dim cellnum As Integer
Dim cellhours As Integer
Dim lastrow As Integer
Dim rownum As Integer
cellhours = 8
cellnum = 10
lastrow = 8
rownum = 2
'amount of people
For person = 1 To lRow
Do Until cellnum > 31
' STHours
If Wkb.Sheets(1).Cells(rownum, cellnum).Value Like "Reg*" Or Wkb.Sheets(1).Cells(rownum, cellnum).Value Like "*OffReg*" Or Wkb.Sheets(1).Cells(rownum, cellnum).Value Like "*Hol*" Then
shtDest.Cells(lastrow, 10).Value = Wkb.Sheets(1).Cells(rownum, cellhours).Value shtDest.Cells(lastrow, 10).Value
'OTHours
Else
shtDest.Cells(lastrow, 11).Value = Wkb.Sheets(1).Cells(rownum, cellhours).Value shtDest.Cells(lastrow, 10).Value
End If
cellhours = cellhours 3
cellnum = cellnum 3
Loop
lastrow = lastrow 1
rownum = rownum 1
cellnum = 10
cellhours = 8
Next person
Ответ №2:
Хорошо. Также вы можете немного упростить свой код. Вы можете запустить цикл for с параметром «шаг». Это способ пропустить 1 столбец.