Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2014, 14:44   #1
immortal12388
Пользователь
 
Регистрация: 28.11.2010
Сообщений: 16
По умолчанию Копирование диапазоново строк и столбцов

Добрый день.
Просьба помочь в решении проблемы с VBA.
Написал скрипт, который должен пробегаться по строке до тех пор пока не встретиться пустая ячейка-окончание основного цикла.
В цикле сделал проверку по условию значения, и если оно меньше 8000, то снова загоняю уже в другой цикл, чтобы найти последнее значение из диапазона, в котором не встречаются значения 8000.

При запуске скрипта приложение зависает.

Sub SayHello()
Const MaxDistance As Integer = 8000
Dim NumberColumn As Integer
Dim NumberRow As Integer
Dim DistanceValue As Integer


NumberColumn = 4
NumberRow = 4
Sheets("Лист1").Range("C4:C186").Co py Sheets("Лист2").Range("C4:C186")
Do While Cells(NumberRow, NumberColumn) <> 0
If Cells(NumberRow, NumberColumn) < MaxDistance Then
Do While Cells(NumberRow, NumberColumn) < MaxDistance
DistanceValue = Cells(NumberRow, NumberColumn).Value
NumberRow = NumberRow + 1
Loop
NumberRow = NumberRow - 1
Worksheets("Лист2").Cells(NumberRow , NumberColumn) = DistanceValue
NumberRow = NumberRow + 1
End If
Loop
End Sub
immortal12388 вне форума Ответить с цитированием
Старый 14.12.2014, 14:54   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

пробуйте так:
Код:
NumberColumn = 4
NumberRow = 4
Sheets("Лист1").Range("C4:C186").Co py Sheets("Лист2").Range("C4:C186")
Do While Cells(NumberRow, NumberColumn) <> 0
  Do While Cells(NumberRow, NumberColumn) < MaxDistance
    DistanceValue = Cells(NumberRow, NumberColumn).Value
    NumberRow = NumberRow + 1
  Loop
  Worksheets("Лист2").Cells(NumberRow-1 , NumberColumn) = DistanceValue
  NumberRow = NumberRow + 1
Loop
и должен Вас огорчить - С это 3-я колонка, а не 4-я.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 14.12.2014, 17:37   #3
immortal12388
Пользователь
 
Регистрация: 28.11.2010
Сообщений: 16
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
пробуйте так:
Код:
NumberColumn = 4
NumberRow = 4
Sheets("Лист1").Range("C4:C186").Co py Sheets("Лист2").Range("C4:C186")
Do While Cells(NumberRow, NumberColumn) <> 0
  Do While Cells(NumberRow, NumberColumn) < MaxDistance
    DistanceValue = Cells(NumberRow, NumberColumn).Value
    NumberRow = NumberRow + 1
  Loop
  Worksheets("Лист2").Cells(NumberRow-1 , NumberColumn) = DistanceValue
  NumberRow = NumberRow + 1
Loop
и должен Вас огорчить - С это 3-я колонка, а не 4-я.
А колонка С у меня не перебирается, это просто некий набор значений который нужно скопироваться на лист 2.
Писк значений как раз осуществляется по столбцу D. Но далее мне нужно сделать так чтобы при этом и перебирать не один столбец, а все которые не пустые.


Попробовал ваш вариант, вылетает ошибка 6 Overflow.
Причем как то странно получается, переменная NumberRow содержит значение 32767, хотя максимальное значение должно быть не более 400.
immortal12388 вне форума Ответить с цитированием
Старый 14.12.2014, 17:45   #4
immortal12388
Пользователь
 
Регистрация: 28.11.2010
Сообщений: 16
По умолчанию

Цитата:
Сообщение от immortal12388 Посмотреть сообщение
А колонка С у меня не перебирается, это просто некий набор значений который нужно скопироваться на лист 2.
Писк значений как раз осуществляется по столбцу D. Но далее мне нужно сделать так чтобы при этом и перебирать не один столбец, а все которые не пустые.


Попробовал ваш вариант, вылетает ошибка 6 Overflow.
Причем как то странно получается, переменная NumberRow содержит значение 32767, хотя максимальное значение должно быть не более 400.
По сути происходит переполнение данного типа -Integer. Но почему цикл не останавливается когда встречаются пустые значения.
immortal12388 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование столбцов aBro Microsoft Office Excel 7 07.10.2014 23:33
Для матрицы из 3 столбцов и 7 строк отпечатать номера тех строк, в которых третий элемент больше суммы двух других элементов строк abramov Помощь студентам 2 03.12.2013 10:15
копирование строк, соответствующих условию фильтра и копирование на новый лист xorek Microsoft Office Excel 0 09.07.2012 18:13
Копирование данных из одной таблицы в другую согласно названиям строк и столбцов Анастасия Дмитриев Microsoft Office Excel 2 26.12.2011 09:50
Матрица A состоит из 8 строк и 6 столбцов. вычесть из всех её строк, начиная со второй, первую строку Dimak24 Помощь студентам 1 19.12.2008 15:45