У меня есть книга, где мы делаем калькуляцию котировок. Существует основной лист с названием «Расчетный лист» и отдельные листы, которые могут иметь разные имена. Все листы имеют тот же формат, что и First Row в качестве заголовка. Мне просто нужен макрос, который будет искать значения в столбце A в «Таблице затрат» и сравнивать со значениями в столбце A других листов, и если найденный экземпляр, то целая строка A: W с отдельных листов с формулами и форматом «Расчет затрат» Лист "против сопоставимого значения. Я создал макрос, который копирует все данные и создает новый лист. но это не дает мне желаемого результата. Я искал несколько форумов, но не мог найти то же самое. Было бы большую помощь, если вы могли бы помочь Methis код, который я использовал для создания нового листаКопирование строки с формулой на основной лист
Sub CopyFromWorksheets()
Dim wrk As Workbook
Dim sht As Worksheet
Dim trg As Worksheet
Dim rng As Range
Dim colCount As Integer
Set wrk = ActiveWorkbook
For Each sht In wrk.Worksheets
If sht.Name = "Master" Then
MsgBox "There is a worksheet called as 'Master'." & vbCrLf & _
"Please remove or rename this worksheet since 'Master' would be" & _
"the name of the result worksheet of this process.", vbOKOnly + vbExclamation, "Error"
Exit Sub
End If
Next sht
Application.ScreenUpdating = False
Set trg = wrk.Worksheets.Add(After:=wrk.Worksheets(wrk.Worksheets.Count))
'Rename the new worksheet
trg.Name = "Master"
'Get column headers from the first worksheet
'Column count first
Set sht = wrk.Worksheets(1)
colCount = sht.Cells(1, 255).End(xlToLeft).Column
'Now retrieve headers, no copy&paste needed
With trg.Cells(1, 1).Resize(1, colCount)
.Value = sht.Cells(1, 1).Resize(1, colCount).Value
'Set font as bold
.Font.Bold = True
End With
'We can start loop
For Each sht In wrk.Worksheets
'If worksheet in loop is the last one, stop execution (it is Master worksheet)
If sht.Index = wrk.Worksheets.Count Then
Exit For
End If
'Data range in worksheet - starts from second row as first rows are the header rows in all worksheets
Set rng = sht.Range(sht.Cells(2, 1), sht.Cells(65536, 1).End(xlUp).Resize(, colCount))
'Put data into the Master worksheet
trg.Cells(65536, 1).End(xlUp).Offset(1).Resize(rng.Rows.Count, rng.Columns.Count).Value = rng.Formula
Next sht
'Fit the columns in Master worksheet
trg.Columns.AutoFit
Sheets("Master").Select
colCount = Range("A" & Rows.Count).End(xlUp).Row
Range("L2:L" & colCount).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
'Screen updating should be activated
Application.ScreenUpdating = True
Sheets("Costing Sheet").Select
End Sub
Hello Mr.Tony Dallimore Спасибо за ваш ответ. Каждый отдельный лист имеет общий расчет для этого листа внизу. Когда я запускаю этот макрос, все данные будут переданы мастер-листу. Но мне не нужны эти отдельные листы в общем сводке. Поэтому для этого я просто хотел избежать этих отдельных итогов листа, скопированных в Master Sheet, на основе критериев пустых столбцов L. Но в этом есть практические проблемы. ** Мне нужен только макрос, который скопировал бы целую строку из отдельных листов в основной лист на основе значений в столбце A основного листа ** –
Для моего ответа я попытался улучшить код, но я ничего не добавил. В исходном коде нет ничего, что бы проверять значения по сравнению с листом «Лист затрат», поэтому его нет в моей версии. Я внимательно прочитал ваш вопрос, а код, который вы ищете, - это больше, чем исправленная версия. Какие значения вы ищете в «Таблице затрат»? Какие ценности вы сравниваете с другими листами? Какие строки копируются в «Мастер»? –
Я укажу основы, которые могут быть проще понять. –