Доброго времени суток уважаемые форумчане!!! Прошу Вашей помощи в решении задачи: есть файл с листами "Форма" и "База" В лист "Форма" вносятся данные которые при нажатии кнопки "Кнопка №3", форматируются определенным стилем и переносятся на лист "База" и очищаются ячейки на листе "Форма". Дальше столкнулся с проблемой: При переносе данных нужно чтобы данные с листа "Форма" сравнивались с уже внесенными на лист "База" в столбец "А" если дубликатов нет, то переносились на лист "База" и очищались ячейки на листе "Форма". Если дубликаты найдены, то данные не переносятся и выскакивает сообщение что: "такой-то номер уже внесен в базу"
Доброго времени суток уважаемые форумчане!!! Прошу Вашей помощи в решении задачи: есть файл с листами "Форма" и "База" В лист "Форма" вносятся данные которые при нажатии кнопки "Кнопка №3", форматируются определенным стилем и переносятся на лист "База" и очищаются ячейки на листе "Форма". Дальше столкнулся с проблемой: При переносе данных нужно чтобы данные с листа "Форма" сравнивались с уже внесенными на лист "База" в столбец "А" если дубликатов нет, то переносились на лист "База" и очищались ячейки на листе "Форма". Если дубликаты найдены, то данные не переносятся и выскакивает сообщение что: "такой-то номер уже внесен в базу"werty456
Здравствуйте. Первое что посетило меня при прочтении названия темы, это восторг. Как кратко и главное "понятно" что нужно сделать. Ведь в правилах прописано
Цитата
При создании темы, давайте теме название, отражающее суть Вашей проблемы
Суть это "База данных", а не то что с ней нужно делать.
Здравствуйте. Первое что посетило меня при прочтении названия темы, это восторг. Как кратко и главное "понятно" что нужно сделать. Ведь в правилах прописано
Цитата
При создании темы, давайте теме название, отражающее суть Вашей проблемы
Суть это "База данных", а не то что с ней нужно делать.gling
Добрый день. Самый простой вариант, после вставки в "базу" удалить дубликаты Worksheets("База").Range("$A:$A").RemoveDuplicates Columns:=1, Header:=xlNo
Не должно происходить удаление дубликатов. Если дубликаты найдены, то данные не переносятся и выскакивает сообщение что: "такой-то номер уже внесен в базу"
Добрый день. Самый простой вариант, после вставки в "базу" удалить дубликаты Worksheets("База").Range("$A:$A").RemoveDuplicates Columns:=1, Header:=xlNo
Не должно происходить удаление дубликатов. Если дубликаты найдены, то данные не переносятся и выскакивает сообщение что: "такой-то номер уже внесен в базу"werty456
Допустим: на лист "Форма" ввели четыре значения, нажали кнопку, два значения есть в листе "База", а двух нет. Которых нет - переносить в лист "База"?InExSu
Разработчик Битрикс24 php, Google Apps Script, VBA Excel Windows/Mac
For r = 1 To 10 Set f = Worksheets("База").Range("$A:$A").Find(what:=Worksheets("Форма").Range("A" & r), lookat:=xlWhole) If Not f Is Nothing Then MsgBox "Значение уже есть " & Worksheets("Форма").Range("A" & r) Exit Sub End If Next
[/vba]
Тогда можно добавить цикл с проверкой [vba]
Код
For r = 1 To 10 Set f = Worksheets("База").Range("$A:$A").Find(what:=Worksheets("Форма").Range("A" & r), lookat:=xlWhole) If Not f Is Nothing Then MsgBox "Значение уже есть " & Worksheets("Форма").Range("A" & r) Exit Sub End If Next
Тогда можно добавить цикл с проверкой For r = 1 To 10 Set f = Worksheets("База").Range("$A:$A").Find(what:=Worksheets("Форма").Range("A" & r), lookat:=xlWhole) If Not f Is Nothing Then MsgBox "Значение уже есть " & Worksheets("Форма").Range("A" & r) Exit Sub End If Next
Спасибо большое!!! Наберусь смелости спрошу: а если повторяется не одно, а 2, 3,4..... значения как их вывести в сообщения
Тогда можно добавить цикл с проверкой For r = 1 To 10 Set f = Worksheets("База").Range("$A:$A").Find(what:=Worksheets("Форма").Range("A" & r), lookat:=xlWhole) If Not f Is Nothing Then MsgBox "Значение уже есть " & Worksheets("Форма").Range("A" & r) Exit Sub End If Next
Спасибо большое!!! Наберусь смелости спрошу: а если повторяется не одно, а 2, 3,4..... значения как их вывести в сообщенияwerty456
Dim shDest As Worksheet, shSour As Worksheet Set shDest = ActiveWorkbook.Worksheets("База") Set shSour = ActiveWorkbook.Worksheets("Форма")
Dim sTxt As String, r As Range, x As Long With shSour For x = .UsedRange.Row To _ .UsedRange.Row + .UsedRange.Rows.Count - 1 Set r = shDest.Cells.Find(what:=.Cells(x, 1).Value, lookat:=xlWhole) If Not r Is Nothing Then _ sTxt = sTxt & ", " & r.Value Next End With
If Len(sTxt) > 0 Then MsgBox "Номера уже внесены в базу " & sTxt Else shSour.UsedRange.Copy
With shDest .Cells(.UsedRange.Row + .UsedRange.Rows.Count, 1).PasteSpecial _ Paste:=xlValues End With
shSour.UsedRange.ClearContents End If End Sub
[/vba]
[vba]
Код
Option Explicit
Sub ПереносБезПовторов()
Dim shDest As Worksheet, shSour As Worksheet Set shDest = ActiveWorkbook.Worksheets("База") Set shSour = ActiveWorkbook.Worksheets("Форма")
Dim sTxt As String, r As Range, x As Long With shSour For x = .UsedRange.Row To _ .UsedRange.Row + .UsedRange.Rows.Count - 1 Set r = shDest.Cells.Find(what:=.Cells(x, 1).Value, lookat:=xlWhole) If Not r Is Nothing Then _ sTxt = sTxt & ", " & r.Value Next End With
If Len(sTxt) > 0 Then MsgBox "Номера уже внесены в базу " & sTxt Else shSour.UsedRange.Copy
With shDest .Cells(.UsedRange.Row + .UsedRange.Rows.Count, 1).PasteSpecial _ Paste:=xlValues End With
можно так например убрать exit, собрать все значения в результирующую строку, потом проверить строку на длину и вывести сообщение с выходом или продолжить работу макроса
можно так например убрать exit, собрать все значения в результирующую строку, потом проверить строку на длину и вывести сообщение с выходом или продолжить работу макросаsboy
Dim shDest As Worksheet, shSour As Worksheet Set shDest = ActiveWorkbook.Worksheets("База") Set shSour = ActiveWorkbook.Worksheets("Форма")
Dim sTxt As String, r As Range, x As Long With shSour For x = .UsedRange.Row To _ .UsedRange.Row + .UsedRange.Rows.Count - 1 Set r = shDest.Cells.Find(what:=.Cells(x, 1).Value, lookat:=xlWhole) If Not r Is Nothing Then _ sTxt = sTxt & ", " & r.Value Next End With
If Len(sTxt) > 0 Then MsgBox "Номера уже внесены в базу " & sTxt Else shSour.UsedRange.Copy
With shDest .Cells(.UsedRange.Row + .UsedRange.Rows.Count, 1).PasteSpecial _ Paste:=xlValues End With
shSour.UsedRange.ClearContents End If End Sub
При переносе из Листа "Форма" переносится все что на нем есть, а необходимо чтобы только указанные столбцы, При переносе из Листа "Форма" на Лист "База" необходимо сравнивать только один столбец. К примеру А. А остальные переносить как есть
Dim shDest As Worksheet, shSour As Worksheet Set shDest = ActiveWorkbook.Worksheets("База") Set shSour = ActiveWorkbook.Worksheets("Форма")
Dim sTxt As String, r As Range, x As Long With shSour For x = .UsedRange.Row To _ .UsedRange.Row + .UsedRange.Rows.Count - 1 Set r = shDest.Cells.Find(what:=.Cells(x, 1).Value, lookat:=xlWhole) If Not r Is Nothing Then _ sTxt = sTxt & ", " & r.Value Next End With
If Len(sTxt) > 0 Then MsgBox "Номера уже внесены в базу " & sTxt Else shSour.UsedRange.Copy
With shDest .Cells(.UsedRange.Row + .UsedRange.Rows.Count, 1).PasteSpecial _ Paste:=xlValues End With
shSour.UsedRange.ClearContents End If End Sub
При переносе из Листа "Форма" переносится все что на нем есть, а необходимо чтобы только указанные столбцы, При переносе из Листа "Форма" на Лист "База" необходимо сравнивать только один столбец. К примеру А. А остальные переносить как естьwerty456
Файл пример в сообщении №5, там данные заносятся со столбца А листа "Форма" на лист "База" но нет сравнения одинаковых номеров. В базу заносится все подряд
Файл пример в сообщении №5, там данные заносятся со столбца А листа "Форма" на лист "База" но нет сравнения одинаковых номеров. В базу заносится все подрядwerty456