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

Вход

Регистрация

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

 

= Мир MS Excel/Добавление строк в базу и проверка на совпадение. - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Добавление строк в базу и проверка на совпадение. (Формулы/Formulas)
Добавление строк в базу и проверка на совпадение.
forall Дата: Вторник, 08.11.2016, 08:59 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 36
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
День добрый!
Подскажите или ткните, пожалуйста, как можно осуществить добавление строк к массиву, чтобы новые данные размещались на пустой строке?
На массив ссылается список и вывод данных ч/з функц. "ГПР". Сохранение сделал через макрос (может есть более удобные или простые варианты ?О_о). Как находить первую или ближайшую пустую строку в массиве не знаю.
Тем более нет представлений о проверке на совпадение, чтобы не допустить ввод в базу двух одинаковых имен, т.к. "ГПР" будет не достоверна.
Хелп, плиз? Пример во вложении.
К сообщению приложен файл: 111.xlsx.xlsm(19Kb)
 
Ответить
СообщениеДень добрый!
Подскажите или ткните, пожалуйста, как можно осуществить добавление строк к массиву, чтобы новые данные размещались на пустой строке?
На массив ссылается список и вывод данных ч/з функц. "ГПР". Сохранение сделал через макрос (может есть более удобные или простые варианты ?О_о). Как находить первую или ближайшую пустую строку в массиве не знаю.
Тем более нет представлений о проверке на совпадение, чтобы не допустить ввод в базу двух одинаковых имен, т.к. "ГПР" будет не достоверна.
Хелп, плиз? Пример во вложении.

Автор - forall
Дата добавления - 08.11.2016 в 08:59
_Boroda_ Дата: Вторник, 08.11.2016, 10:32 | Сообщение № 2
Группа: Модераторы
Ранг: Экселист
Сообщений: 9348
Репутация: 3922 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Такой вариант
К сообщению приложен файл: 111_2.xlsm(23Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеТакой вариант

Автор - _Boroda_
Дата добавления - 08.11.2016 в 10:32
forall Дата: Четверг, 10.11.2016, 13:03 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 36
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
_Boroda_, спасибо, долго разбирался. Можно немного разъяснений?..

Рабочий массив будет состоять приблизительно из 30 столбцов и 1500 строчек. Вопросы по скорости:

Вы обозначили именем Масс переменный массив для поиска и вывода данных:
Код
=ВПР(A$2;Масс;ПОИСКПОЗ(A4;A$16:A$19;);)
( где Масс
Код
=Лист2!$A$2:ИНДЕКС(Лист2!$D:$D;СЧЁТЗ(Лист2!$A:$A))
)

Так будет быстрее происходить просчет, чем просто
Код
=ВПР(A$2;A:D;2;)
учитывая размер рабочего массива?

И будет ли разница в скорости если не объявлять переменными рабочие листы? Не будет ли ошибок?:

Так:
[vba]
Код
Sub sohr()
Application.ScreenUpdating = 0
With Sheets("Лист2")
r1_ = .Range("A" & Rows.Count).End(xlUp).Row
.Range("A" & r1_ + 1).Resize(, 4) = Application.Transpose(Sheets("Лист1").Range("B16").Resize(4))
Sheets("Лист1").Range("B16").Resize(4).ClearContents
End With
Application.ScreenUpdating = 1
End Sub
[/vba]

Вместо:
[vba]
Код

Sub sohr()
Dim sh1 As Worksheet, sh2 As Worksheet
Application.ScreenUpdating = 0
Set sh1 = Sheets("Лист1")
Set sh2 = Sheets("Лист2")
With sh2
r1_ = .Range("A" & Rows.Count).End(xlUp).Row
.Range("A" & r1_ + 1).Resize(, 4) = Application.Transpose(sh1.Range("B16").Resize(4))
sh1.Range("B16").Resize(4).ClearContents
End With
Application.ScreenUpdating = 1
End Sub
[/vba]


Сообщение отредактировал Pelena - Четверг, 10.11.2016, 14:06
 
Ответить
Сообщение_Boroda_, спасибо, долго разбирался. Можно немного разъяснений?..

Рабочий массив будет состоять приблизительно из 30 столбцов и 1500 строчек. Вопросы по скорости:

Вы обозначили именем Масс переменный массив для поиска и вывода данных:
Код
=ВПР(A$2;Масс;ПОИСКПОЗ(A4;A$16:A$19;);)
( где Масс
Код
=Лист2!$A$2:ИНДЕКС(Лист2!$D:$D;СЧЁТЗ(Лист2!$A:$A))
)

Так будет быстрее происходить просчет, чем просто
Код
=ВПР(A$2;A:D;2;)
учитывая размер рабочего массива?

И будет ли разница в скорости если не объявлять переменными рабочие листы? Не будет ли ошибок?:

Так:
[vba]
Код
Sub sohr()
Application.ScreenUpdating = 0
With Sheets("Лист2")
r1_ = .Range("A" & Rows.Count).End(xlUp).Row
.Range("A" & r1_ + 1).Resize(, 4) = Application.Transpose(Sheets("Лист1").Range("B16").Resize(4))
Sheets("Лист1").Range("B16").Resize(4).ClearContents
End With
Application.ScreenUpdating = 1
End Sub
[/vba]

Вместо:
[vba]
Код

Sub sohr()
Dim sh1 As Worksheet, sh2 As Worksheet
Application.ScreenUpdating = 0
Set sh1 = Sheets("Лист1")
Set sh2 = Sheets("Лист2")
With sh2
r1_ = .Range("A" & Rows.Count).End(xlUp).Row
.Range("A" & r1_ + 1).Resize(, 4) = Application.Transpose(sh1.Range("B16").Resize(4))
sh1.Range("B16").Resize(4).ClearContents
End With
Application.ScreenUpdating = 1
End Sub
[/vba]

Автор - forall
Дата добавления - 10.11.2016 в 13:03
forall Дата: Четверг, 10.11.2016, 14:24 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 36
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Проверку данных было бы здорово сделать фоном и только по имени (столбцу А), с невозможностью сохранения и выводом соответствующего сообщения на переименование, чтобы не занимать дополнительный диапазон ячеек, т.к. рабочая область будет весьма ограничена, и пользоваться "калькулятором", наверное, в основном будут люди не умеющие работать в экселе, просто нажмут сохранить, даже если проверка выявит дубликат.

Если у кого-то есть мысли о том как это изобразить, то прошу помощи, для меня VBA - лес дремучий, а я даж не знаю как должно выглядеть нужное дерево)..


Сообщение отредактировал forall - Четверг, 10.11.2016, 15:58
 
Ответить
СообщениеПроверку данных было бы здорово сделать фоном и только по имени (столбцу А), с невозможностью сохранения и выводом соответствующего сообщения на переименование, чтобы не занимать дополнительный диапазон ячеек, т.к. рабочая область будет весьма ограничена, и пользоваться "калькулятором", наверное, в основном будут люди не умеющие работать в экселе, просто нажмут сохранить, даже если проверка выявит дубликат.

Если у кого-то есть мысли о том как это изобразить, то прошу помощи, для меня VBA - лес дремучий, а я даж не знаю как должно выглядеть нужное дерево)..

Автор - forall
Дата добавления - 10.11.2016 в 14:24
forall Дата: Пятница, 11.11.2016, 12:08 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 36
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
_Boroda_, а как вы сделали появление надписи "Уже есть" в области проверки?
 
Ответить
Сообщение_Boroda_, а как вы сделали появление надписи "Уже есть" в области проверки?

Автор - forall
Дата добавления - 11.11.2016 в 12:08
_Boroda_ Дата: Пятница, 11.11.2016, 12:13 | Сообщение № 6
Группа: Модераторы
Ранг: Экселист
Сообщений: 9348
Репутация: 3922 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Так будет быстрее происходить просчет, чем просто
Не уверен. В первом случае мы тратимся на создание динамического массива, а во втором мы считаем все строки. Попробуйте оба метода и посмотрите на скорость.

если не объявлять переменными рабочие листы? Не будет ли ошибок?
Ошибок не будет. Попробуйте оба метода и посмотрите на скорость. Сильно ничего измениться не должно.

а как вы сделали появление надписи "Уже есть" в области проверки?
Посмотрите формат ячейки


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
Так будет быстрее происходить просчет, чем просто
Не уверен. В первом случае мы тратимся на создание динамического массива, а во втором мы считаем все строки. Попробуйте оба метода и посмотрите на скорость.

если не объявлять переменными рабочие листы? Не будет ли ошибок?
Ошибок не будет. Попробуйте оба метода и посмотрите на скорость. Сильно ничего измениться не должно.

а как вы сделали появление надписи "Уже есть" в области проверки?
Посмотрите формат ячейки

Автор - _Boroda_
Дата добавления - 11.11.2016 в 12:13
forall Дата: Пятница, 11.11.2016, 17:19 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 36
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Ухт. Выводит любой текст при вводе чисел.. Еще и цвет можно присвоить.. %)

_Boroda_, спасиб..
 
Ответить
СообщениеУхт. Выводит любой текст при вводе чисел.. Еще и цвет можно присвоить.. %)

_Boroda_, спасиб..

Автор - forall
Дата добавления - 11.11.2016 в 17:19
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Добавление строк в базу и проверка на совпадение. (Формулы/Formulas)
Страница 1 из 11
Поиск:

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