Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/если ячейкаA листа1=ячейкеB листа2, то скопировать ячейкуC - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » если ячейкаA листа1=ячейкеB листа2, то скопировать ячейкуC (Макросы/Sub)
если ячейкаA листа1=ячейкеB листа2, то скопировать ячейкуC
Yar4i Дата: Суббота, 03.12.2016, 09:22 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
Доброе время дамы и господа :D .
На листе1 в столбце B идут цифры по возрастанию, но иногда с пропусками (например 1, 2, 3, 5, т.е. пропущена цифра 4).
На листе 3 в столбце A идут цифры по возрастанию и без пропусков.
В случае если цифра на листе1 столбца B совпадает с цифрой на листе3 столбца A, то:
нужно цифру листа3 столбца 7 скопировать на лист1 в столбец 8 (соответствующей строки).
Например:
Цифра на листе1 столбца B =15 2-ой строки Excel и она совпадает с цифрой 13-ой строки Excel на листе3 столбца A =15, то:
"1,00" цифру листа3 столбца 7 скопировать на лист1 в столбец 8 (соответствующей строки листа1, т.е. 2-ой строки Excel).
Опасаюсь за 54-ую строку листа3 - она содержит объединённые ячейки. Нужно ли в данном случае избавиться от объединённых ячеек?
Спасибо.
Хороших выходных. (у кого они есть(.

А можно в столбец B листа1(содержащий цифры) добавить через "/" цифры листа3 столбца 7 ?
В итоге получится "15/1,00" на листе1 в строке 2 Excel.
К сообщению приложен файл: 555.xlsx (91.0 Kb)


Сообщение отредактировал Yar4i - Суббота, 03.12.2016, 14:14
 
Ответить
СообщениеДоброе время дамы и господа :D .
На листе1 в столбце B идут цифры по возрастанию, но иногда с пропусками (например 1, 2, 3, 5, т.е. пропущена цифра 4).
На листе 3 в столбце A идут цифры по возрастанию и без пропусков.
В случае если цифра на листе1 столбца B совпадает с цифрой на листе3 столбца A, то:
нужно цифру листа3 столбца 7 скопировать на лист1 в столбец 8 (соответствующей строки).
Например:
Цифра на листе1 столбца B =15 2-ой строки Excel и она совпадает с цифрой 13-ой строки Excel на листе3 столбца A =15, то:
"1,00" цифру листа3 столбца 7 скопировать на лист1 в столбец 8 (соответствующей строки листа1, т.е. 2-ой строки Excel).
Опасаюсь за 54-ую строку листа3 - она содержит объединённые ячейки. Нужно ли в данном случае избавиться от объединённых ячеек?
Спасибо.
Хороших выходных. (у кого они есть(.

А можно в столбец B листа1(содержащий цифры) добавить через "/" цифры листа3 столбца 7 ?
В итоге получится "15/1,00" на листе1 в строке 2 Excel.

Автор - Yar4i
Дата добавления - 03.12.2016 в 09:22
Manyasha Дата: Суббота, 03.12.2016, 15:21 | Сообщение № 2
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Yar4i, здравствуйте. Вам именно макросом нужно или формулой тоже подойдет?
В листе 3 у Вас не числа, поэтому так (массивная):
Код
ИНДЕКС(лист3!$G$1:$G$1000;ПОИСКПОЗ(B2;--лист3!$A$1:$A$1000;))

или так (обычная):
Код
ИНДЕКС(лист3!$G$1:$G$1000;ПОИСКПОЗ(B2&"";лист3!$A$1:$A$1000;))

добавить через "/" цифры

в начало формулы добавьте B2&"/"&
[p.s.]Половину данных удалила, чтобы файл влез по размеру[/p.s.]
К сообщению приложен файл: 555-1.xlsx (67.1 Kb)


ЯД: 410013299366744 WM: R193491431804

Сообщение отредактировал Manyasha - Суббота, 03.12.2016, 15:56
 
Ответить
СообщениеYar4i, здравствуйте. Вам именно макросом нужно или формулой тоже подойдет?
В листе 3 у Вас не числа, поэтому так (массивная):
Код
ИНДЕКС(лист3!$G$1:$G$1000;ПОИСКПОЗ(B2;--лист3!$A$1:$A$1000;))

или так (обычная):
Код
ИНДЕКС(лист3!$G$1:$G$1000;ПОИСКПОЗ(B2&"";лист3!$A$1:$A$1000;))

добавить через "/" цифры

в начало формулы добавьте B2&"/"&
[p.s.]Половину данных удалила, чтобы файл влез по размеру[/p.s.]

Автор - Manyasha
Дата добавления - 03.12.2016 в 15:21
Yar4i Дата: Понедельник, 05.12.2016, 06:50 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
массивная

формула классная и она работает, я пытался ее с макросом совместить, но она Н/Д начала выдавать, все листы переименовал по аналогии с примером - все условия благоприятные в общем создал.

***
Всё понял, формула привязана и к имени файла.
А у меня беда: у меня куча файлов и в каждом необходим этот столбец, если листы я переименую в "лист1" или "1" (как хотел) то с переименованием файлов - беда.
***
Всё - убрал из формулы имя файла))) заработало.
***
[vba]
Код
Sub Макрос1()
Range("I1").Select
ActiveCell.FormulaR1C1 = _
"=RC[-7]&""/""&INDEX('3'!R1C7:R701C7,MATCH(RC[-7]&"""",'3'!R1C1:R701C1,))"
Range("I1").Select
Selection.AutoFill Destination:=Range("I1:I555"), Type:=xlFillDefault
Range("I1:I555").Select
Columns("I:I").Select
Range("I553").Activate
Selection.Copy
Columns("H:H").Select
Range("H553").Activate
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub
[/vba]
Сюда вставил - Н/Д опять пишет.
Возможно из-за отличных от "--" данных листа 3. (не указал - хотел облегчить задачу первоначально).
Не могу уменьшить размер файла для прикрепления. Почти все удалил и он стал не информативен. Ссылки полетели(


Сообщение отредактировал Yar4i - Понедельник, 05.12.2016, 08:19
 
Ответить
Сообщение
массивная

формула классная и она работает, я пытался ее с макросом совместить, но она Н/Д начала выдавать, все листы переименовал по аналогии с примером - все условия благоприятные в общем создал.

***
Всё понял, формула привязана и к имени файла.
А у меня беда: у меня куча файлов и в каждом необходим этот столбец, если листы я переименую в "лист1" или "1" (как хотел) то с переименованием файлов - беда.
***
Всё - убрал из формулы имя файла))) заработало.
***
[vba]
Код
Sub Макрос1()
Range("I1").Select
ActiveCell.FormulaR1C1 = _
"=RC[-7]&""/""&INDEX('3'!R1C7:R701C7,MATCH(RC[-7]&"""",'3'!R1C1:R701C1,))"
Range("I1").Select
Selection.AutoFill Destination:=Range("I1:I555"), Type:=xlFillDefault
Range("I1:I555").Select
Columns("I:I").Select
Range("I553").Activate
Selection.Copy
Columns("H:H").Select
Range("H553").Activate
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub
[/vba]
Сюда вставил - Н/Д опять пишет.
Возможно из-за отличных от "--" данных листа 3. (не указал - хотел облегчить задачу первоначально).
Не могу уменьшить размер файла для прикрепления. Почти все удалил и он стал не информативен. Ссылки полетели(

Автор - Yar4i
Дата добавления - 05.12.2016 в 06:50
Pelena Дата: Понедельник, 05.12.2016, 08:59 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 19182
Репутация: 4420 ±
Замечаний: ±

Excel 365 & Mac Excel
Почти все удалил

Попробуйте ещё скрытый лист удалить


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщение
Почти все удалил

Попробуйте ещё скрытый лист удалить

Автор - Pelena
Дата добавления - 05.12.2016 в 08:59
Yar4i Дата: Понедельник, 05.12.2016, 09:34 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
скрытый лист

Что-то я хм.. опасен сегодня.
К сообщению приложен файл: 7275270.xlsx (42.3 Kb)


Сообщение отредактировал Yar4i - Понедельник, 05.12.2016, 09:39
 
Ответить
Сообщение
скрытый лист

Что-то я хм.. опасен сегодня.

Автор - Yar4i
Дата добавления - 05.12.2016 в 09:34
nilem Дата: Понедельник, 05.12.2016, 10:45 | Сообщение № 6
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
а ВПР не подходит?
для яч. Н1 на листе ГрандСмета:
Код
=ВПР(B1&"";'3'!$A$25:$M$500;8;0)

и протянуть вниз


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениеа ВПР не подходит?
для яч. Н1 на листе ГрандСмета:
Код
=ВПР(B1&"";'3'!$A$25:$M$500;8;0)

и протянуть вниз

Автор - nilem
Дата добавления - 05.12.2016 в 10:45
Yar4i Дата: Понедельник, 05.12.2016, 15:17 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
Спасибо. Все подходит.
Прикреплю весь код. Может кому-нибудь понадобиться к восьмиграфной КС-2ой добавить стоимость материалов из сметы.
[vba]
Код
Sub ИзКС2вГС()
        'копировать видимый массив из КС2 на новый лист
        'выделить предварительно массив!!!
        'Отключение обновления экрана для ускорения работы макроса
Application.ScreenUpdating = False
Selection.SpecialCells(xlCellTypeVisible).Select
Selection.Copy
        'Sheets.Add After:=ActiveSheet  'первоначально
        'Sheets.Add Before:=Sheets(1) 'After:=ActiveSheet   'апострофф
        'ActiveSheet.Name = 111111111                        'апострофф
Sheets.Add(Before:=Sheets(1)).Name = "ГрандСмета"    'Пелена
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
        'красота в третьем и четвертом столбце
Columns  ("C : D").Select  'что-то изменяется...   пробелы удалите
Selection.ColumnWidth = 40
Cells.Select
Selection.RowHeight = 40
Application.CutCopyMode = False
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
            'удалить пустые строки Wasilich
PS = Range("B" & Rows.Count).End(xlUp).Row
For i = PS To 1 Step -1
If Cells(i, 1) = "" Or Mid(Cells(i, 1), 1, 1) = "." Or Mid(Cells(i, 1), 1, 1) = Chr(133) Then
Rows(i).Delete
End If
Next
            'для всех C D     формула tt  МВТ,  Manyasha
For Each cell In Range("c1:d" & Cells(Rows.Count, "d").End(xlUp).Row)
cell.Value = tt(cell.Value) 'вызов UDF от МВТ
Next cell
            'Минуса убрать с цены  (минус из 7-ого столбца в 6-ой) _Boroda_
For i = 1 To Range("F" & Rows.Count).End(xlUp).Row
If Cells(i, 7) < 0 Then
Cells(i, 7) = -Cells(i, 7)
Cells(i, 6) = -Abs(Cells(i, 6))
End If
Next
                 'стоимость материалов из сметы 3 в ГрандСмета
Range("I1").Select
ActiveCell.FormulaR1C1 = _
"=RC[-7]&""                    ""&VLOOKUP(RC[-7]&"""",'3'!R25C1:R500C13,7,0)"  'nilem
            '"=RC[-7]&""                    ""&INDEX('3'!R1C7:R701C7,MATCH(RC[-7]&"""",'3'!R1C1:R701C1,))"  'Manyasha
Range("I1").Select
Selection.AutoFill Destination:=Range("I1:I105"), Type:=xlFillDefault
Range("I1:I105").Select
Columns("I:I").Select
Range("I97").Activate
Selection.Copy
Columns("H:H").Select
Range("H97").Activate
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
            'СохрБезЗапроса Апострофф
ActiveWindow.SmallScroll Down:=-100
Range("A8").Select
ActiveWindow.View = xlNormalView
ActiveWindow.Zoom = 100
Workbooks.Application.DisplayAlerts = False
Excel.ActiveWorkbook.Save
Application.Quit
            'Включение обновления экрана для ускорения работы макроса
Application.ScreenUpdating = True
End Sub
[/vba]

и функция tt:
[vba]
Код
   
Function tt(Text As String)    
Dim obj As Object       
Text = WorksheetFunction.Trim(Text)       
With CreateObject("VBScript.Regexp")        
.Ignorecase = False       
.MultiLine = False        
.Pattern = "(\d{1,3}-\d{1,3}-\d{1,3}- ?\d{1,3}) ([А-яЁё]+( [а-яё])?)"        
Set obj = .Execute(Text)        
If obj.Count > 0 Then Text = obj(0).submatches(1) & " " & obj(0).submatches(0)       
End With       
tt = Text       
End Function  
[/vba]
В КС-2 выделяем массив от 1 номера до нижнего ПЗ, лист со сметой переименовываем в 3 и жмем макрос. в итоге я получаю данные на листе ГрандСмета, которые экспортируются в саму ГрандСмету. (в примечании "столбец B" номер по смете и стоимость материалов) - мне удобно, чего и вам желаю.
В файл добавил макрос, т.к. с ошибками отображается код.
К сообщению приложен файл: 5-518-9.xlsm (60.5 Kb)


Сообщение отредактировал Yar4i - Понедельник, 05.12.2016, 15:47
 
Ответить
СообщениеСпасибо. Все подходит.
Прикреплю весь код. Может кому-нибудь понадобиться к восьмиграфной КС-2ой добавить стоимость материалов из сметы.
[vba]
Код
Sub ИзКС2вГС()
        'копировать видимый массив из КС2 на новый лист
        'выделить предварительно массив!!!
        'Отключение обновления экрана для ускорения работы макроса
Application.ScreenUpdating = False
Selection.SpecialCells(xlCellTypeVisible).Select
Selection.Copy
        'Sheets.Add After:=ActiveSheet  'первоначально
        'Sheets.Add Before:=Sheets(1) 'After:=ActiveSheet   'апострофф
        'ActiveSheet.Name = 111111111                        'апострофф
Sheets.Add(Before:=Sheets(1)).Name = "ГрандСмета"    'Пелена
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
        'красота в третьем и четвертом столбце
Columns  ("C : D").Select  'что-то изменяется...   пробелы удалите
Selection.ColumnWidth = 40
Cells.Select
Selection.RowHeight = 40
Application.CutCopyMode = False
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
            'удалить пустые строки Wasilich
PS = Range("B" & Rows.Count).End(xlUp).Row
For i = PS To 1 Step -1
If Cells(i, 1) = "" Or Mid(Cells(i, 1), 1, 1) = "." Or Mid(Cells(i, 1), 1, 1) = Chr(133) Then
Rows(i).Delete
End If
Next
            'для всех C D     формула tt  МВТ,  Manyasha
For Each cell In Range("c1:d" & Cells(Rows.Count, "d").End(xlUp).Row)
cell.Value = tt(cell.Value) 'вызов UDF от МВТ
Next cell
            'Минуса убрать с цены  (минус из 7-ого столбца в 6-ой) _Boroda_
For i = 1 To Range("F" & Rows.Count).End(xlUp).Row
If Cells(i, 7) < 0 Then
Cells(i, 7) = -Cells(i, 7)
Cells(i, 6) = -Abs(Cells(i, 6))
End If
Next
                 'стоимость материалов из сметы 3 в ГрандСмета
Range("I1").Select
ActiveCell.FormulaR1C1 = _
"=RC[-7]&""                    ""&VLOOKUP(RC[-7]&"""",'3'!R25C1:R500C13,7,0)"  'nilem
            '"=RC[-7]&""                    ""&INDEX('3'!R1C7:R701C7,MATCH(RC[-7]&"""",'3'!R1C1:R701C1,))"  'Manyasha
Range("I1").Select
Selection.AutoFill Destination:=Range("I1:I105"), Type:=xlFillDefault
Range("I1:I105").Select
Columns("I:I").Select
Range("I97").Activate
Selection.Copy
Columns("H:H").Select
Range("H97").Activate
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
            'СохрБезЗапроса Апострофф
ActiveWindow.SmallScroll Down:=-100
Range("A8").Select
ActiveWindow.View = xlNormalView
ActiveWindow.Zoom = 100
Workbooks.Application.DisplayAlerts = False
Excel.ActiveWorkbook.Save
Application.Quit
            'Включение обновления экрана для ускорения работы макроса
Application.ScreenUpdating = True
End Sub
[/vba]

и функция tt:
[vba]
Код
   
Function tt(Text As String)    
Dim obj As Object       
Text = WorksheetFunction.Trim(Text)       
With CreateObject("VBScript.Regexp")        
.Ignorecase = False       
.MultiLine = False        
.Pattern = "(\d{1,3}-\d{1,3}-\d{1,3}- ?\d{1,3}) ([А-яЁё]+( [а-яё])?)"        
Set obj = .Execute(Text)        
If obj.Count > 0 Then Text = obj(0).submatches(1) & " " & obj(0).submatches(0)       
End With       
tt = Text       
End Function  
[/vba]
В КС-2 выделяем массив от 1 номера до нижнего ПЗ, лист со сметой переименовываем в 3 и жмем макрос. в итоге я получаю данные на листе ГрандСмета, которые экспортируются в саму ГрандСмету. (в примечании "столбец B" номер по смете и стоимость материалов) - мне удобно, чего и вам желаю.
В файл добавил макрос, т.к. с ошибками отображается код.

Автор - Yar4i
Дата добавления - 05.12.2016 в 15:17
Yar4i Дата: Вторник, 06.12.2016, 13:44 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
Формула перестала работать с этим 3-им листом. Подставляю другие листы - работает.
Формулу ввожу верно.
К сообщению приложен файл: 1160201.xlsx (55.4 Kb)
 
Ответить
СообщениеФормула перестала работать с этим 3-им листом. Подставляю другие листы - работает.
Формулу ввожу верно.

Автор - Yar4i
Дата добавления - 06.12.2016 в 13:44
Yar4i Дата: Вторник, 06.12.2016, 14:16 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
подходит

В данном файле наглядно видно, что в случае с трехзначными исходными данными в столбце "нумерация" формула почему-то не выводит итог. Т.е. начиная с ячейки I13 листа "ГрандСмета" и ниже.
***
Ой разобрался по 500ую же работает. Простите
К сообщению приложен файл: 00.xlsx (76.2 Kb)


Сообщение отредактировал Yar4i - Вторник, 06.12.2016, 14:27
 
Ответить
Сообщение
подходит

В данном файле наглядно видно, что в случае с трехзначными исходными данными в столбце "нумерация" формула почему-то не выводит итог. Т.е. начиная с ячейки I13 листа "ГрандСмета" и ниже.
***
Ой разобрался по 500ую же работает. Простите

Автор - Yar4i
Дата добавления - 06.12.2016 в 14:16
Мир MS Excel » Вопросы и решения » Вопросы по VBA » если ячейкаA листа1=ячейкеB листа2, то скопировать ячейкуC (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!