День добрый! Подскажите или ткните, пожалуйста, как можно осуществить добавление строк к массиву, чтобы новые данные размещались на пустой строке? На массив ссылается список и вывод данных ч/з функц. "ГПР". Сохранение сделал через макрос (может есть более удобные или простые варианты ?О_о). Как находить первую или ближайшую пустую строку в массиве не знаю. Тем более нет представлений о проверке на совпадение, чтобы не допустить ввод в базу двух одинаковых имен, т.к. "ГПР" будет не достоверна. Хелп, плиз? Пример во вложении.
День добрый! Подскажите или ткните, пожалуйста, как можно осуществить добавление строк к массиву, чтобы новые данные размещались на пустой строке? На массив ссылается список и вывод данных ч/з функц. "ГПР". Сохранение сделал через макрос (может есть более удобные или простые варианты ?О_о). Как находить первую или ближайшую пустую строку в массиве не знаю. Тем более нет представлений о проверке на совпадение, чтобы не допустить ввод в базу двух одинаковых имен, т.к. "ГПР" будет не достоверна. Хелп, плиз? Пример во вложении.forall
И будет ли разница в скорости если не объявлять переменными рабочие листы? Не будет ли ошибок?:
Так: [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]
_Boroda_, спасибо, долго разбирался. Можно немного разъяснений?..
Рабочий массив будет состоять приблизительно из 30 столбцов и 1500 строчек. Вопросы по скорости:
Вы обозначили именем Масс переменный массив для поиска и вывода данных:
И будет ли разница в скорости если не объявлять переменными рабочие листы? Не будет ли ошибок?:
Так: [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 - лес дремучий, а я даж не знаю как должно выглядеть нужное дерево)..
Проверку данных было бы здорово сделать фоном и только по имени (столбцу А), с невозможностью сохранения и выводом соответствующего сообщения на переименование, чтобы не занимать дополнительный диапазон ячеек, т.к. рабочая область будет весьма ограничена, и пользоваться "калькулятором", наверное, в основном будут люди не умеющие работать в экселе, просто нажмут сохранить, даже если проверка выявит дубликат.
Если у кого-то есть мысли о том как это изобразить, то прошу помощи, для меня VBA - лес дремучий, а я даж не знаю как должно выглядеть нужное дерево)..forall
Сообщение отредактировал forall - Четверг, 10.11.2016, 15:58
Не уверен. В первом случае мы тратимся на создание динамического массива, а во втором мы считаем все строки. Попробуйте оба метода и посмотрите на скорость.
Не уверен. В первом случае мы тратимся на создание динамического массива, а во втором мы считаем все строки. Попробуйте оба метода и посмотрите на скорость.