mitya528, в таком случае, советую разобраться с этим (добавил 1) и дальше собираться по кусочкам:
Код
Sub aaa()
lLastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
For n = 4 To lLastRow
On Error Resume Next
ActiveSheet.Range("P" & n) = Round(Application.AverageIfs(ActiveSheet.Range("C" & n & ":O" & n), ActiveSheet.Range("C" & n & ":O" & n), ">0"), 1)
ActiveSheet.Range("R" & n) = Sheets("Лист2").Range("Y" & n) + Sheets("Лист2").Range("AB" & n)
Next
End Sub
mitya528, В чем цель замены формул на значения? Они долго обновляются? Вы представляете, сколько всего хотите сделать чужими руками просто так?
для самого простого примера:
Код
Sub aaa()
lLastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
For n = 4 To lLastRow
ActiveSheet.Range("R" & n) = Sheets("Лист2").Range("Y" & n) + Sheets("Лист2").Range("AB" & n)
Next
End Sub
Счастливчик, в целом все просто: 1) Если задача разовая, то не стоит сильно заморачиваться по скорости (в разумных пределах). Такие задачи у меня сейчас часто появляются в связи с локализацией различных штук в компании 2) Если задача постоянная, то однозначно стоит бороться за скорость, но тоже нужно понимать, кто пишет код, т.к. трудозатраты могут быть не рациональными для этого.
deviceik, можно сделать с помощью 3D Maps вообще без трудов или с Вашей картинкой на диаграмме, но подбирая каждое местоположение вручную. Думаю, что сами понимаете за какой из вариантов коллеги возьмут гораздо больше.
eshot1, а у меня в 365 все ок))) upd: можете нажать "отобразить все знаки" или ctrl+*? после этого выделяем весь тест ctrl+a, нажимаем ПКМ, выбираем шрифт, убираем галку "скрытый"
Как учесть ежегодный плавающий период отпуска через формулу, При составлении ежедневного расписания на несколько лет необходимо учесть плавающий период отпуска через формулу
Как учесть ежегодный плавающий период отпуска через формулу, При составлении ежедневного расписания на несколько лет необходимо учесть плавающий период отпуска через формулу
Sub aaaaaaaabbb()
Dim arr()
Dim i As Long
Dim q As Variant
Dim matchFound As Boolean
Dim numColumns As Long
lLastRowA = Sheets("A").Cells(Rows.Count, 1).End(xlUp).Row
lLastRowB = Sheets("B").Cells(Rows.Count, 1).End(xlUp).Row
Set rngA = Sheets("A").Range("A2:C" & lLastRowA)
Set rngB = Sheets("B").Range("A2:C" & lLastRowB)
numColumns = rngA.Columns.Count
ReDim arr(1 To lLastRowA, 1 To numColumns)
For rA = 1 To rngA.Rows.Count
matchFound = False
For rB = 1 To rngB.Rows.Count
If rngA(rA, 1) = q Then
Exit For
End If
If rngA(rA, 1) = rngB(rB, 1) Then
If rngA(rA, 3) - rngB(rB, 2) > 0 Then
q = rngA(rA, 1)
Exit For
End If
matchFound = True
Exit For
End If
Next rB
If Not matchFound Then
i = i + 1
For j = 1 To numColumns
arr(i, j) = rngA(rA, j)
Next j
End If
Next rA
Sheets("A").Range("A2:C" & lLastRowA).ClearContents
Sheets("A").Range("A2").Resize(i, 3).Value = arr
End Sub
delph3r написал: листа "Последняя таблица" со всеми предыдущими листами?
активного листа, со всеми другими
Цитата
delph3r написал: А сильно сложнее будет, если Результат будет выдаваться только тогда, когда все строки колонки B из листа "Последняя таблица" совпадают со всеми строками колонки
delph3r, чтобы сравнить каждый лист с каждым и вывести совпадения:
Код
Код
Sub СравнитьЛисты()
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long, j As Long, k As Long
Dim wsCompare As Worksheet
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For Each ws In ActiveWorkbook.Worksheets
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
rng = ws.Range("A2:C" & lastRow)
For r = 2 To UBound(rng)
For Each wsCompare In ActiveWorkbook.Worksheets
If wsCompare.Name <> ws.Name Then
lastRow = wsCompare.Cells(ws.Rows.Count, "A").End(xlUp).Row
rngCompare = wsCompare.Range("A2:C" & lastRow)
For rCompare = 2 To UBound(rngCompare)
If rng(r, 1) & rng(r, 2) & rng(r, 3) = rngCompare(rCompare, 1) & rngCompare(rCompare, 2) & rngCompare(rCompare, 3) Then
found = found & " " & wsCompare.Name
End If
Next
End If
Next wsCompare
ws.Cells(r + 1, 4).value = found
found = ""
Next r
Next ws
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
для последнего листа с подсветкой:
Код
Код
Sub СравнитьЛисты()
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long, j As Long, k As Long
Dim wsCompare As Worksheet
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Set ws = ActiveSheet
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
Rng = ws.Range("A2:C" & lastRow)
For r = 2 To UBound(Rng)
For Each wsCompare In ActiveWorkbook.Worksheets
If wsCompare.Name <> ws.Name Then
lastRow = wsCompare.Cells(ws.Rows.Count, "A").End(xlUp).Row
rngCompare = wsCompare.Range("A2:C" & lastRow)
For rCompare = 2 To UBound(rngCompare)
If Rng(r, 1) & Rng(r, 2) & Rng(r, 3) = rngCompare(rCompare, 1) & rngCompare(rCompare, 2) & rngCompare(rCompare, 3) Then
wsCompare.Range("A" & r + 1 & ":C" & r + 1).Interior.Color = RGB(146, 208, 80)
found = found & " " & wsCompare.Name
End If
Next
End If
Next wsCompare
If found <> "" Then
ws.Cells(r + 1, 4).Value = found
ws.Range("A" & r + 1 & ":C" & r + 1).Interior.Color = RGB(146, 208, 80)
End If
found = ""
Next r
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub