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

Вход

Регистрация

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

 

= Мир MS Excel/Цикличность проверки ячейки по признаку #Н/Д - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Цикличность проверки ячейки по признаку #Н/Д (Макросы/Sub)
Цикличность проверки ячейки по признаку #Н/Д
ASM_0408 Дата: Среда, 11.04.2018, 16:28 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 214
Репутация: 0 ±
Замечаний: 0% ±

2016
Приветствую всех участников форума!
Создал файл для расчета, но в процессе работы с ним нашел место которое позволит ускорить время расчета и повысить точность. В столбце расходный материал основного файла из других листов сваливаются данные эти данные сопоставляются со справочником цен этой же книги, и через ВПР подставляет необходимые данные. Но случается так что появляется материал который еще не участвовал еще в расчетах и в связи с этим в ячейках появляется признак Н/Д. Для упрощения работы решил создать единый справочник материалов для всех расчетов (это отдельный файл) и по нему вопрос сформирую в отдельной теме. Написал макрос который по признаку Н/Д в столбце "О" запускается процедура передачи такого материала в файл открывающийся по определенному пути и встает в первую свободную строку в конце списка, таким образом получаю накапливаемый справочник материалов. Но столкнулся с проблемой и не могу ее разрешить макрос на перенос срабатывает только по первой позичии с признаком Н/Д и только эта позиция переносится в справочник. Подскажите пожалуйста решение такое, что бы макрос срабатывал на каждый признак Н/Д и следовательно переносил все материалы с признаком Н/Д. Возможно что я очень намудрил с макросом, выслушаю и приму все замечания. Благодарю!
К сообщению приложен файл: -2-.xlsm(24.5 Kb)
 
Ответить
СообщениеПриветствую всех участников форума!
Создал файл для расчета, но в процессе работы с ним нашел место которое позволит ускорить время расчета и повысить точность. В столбце расходный материал основного файла из других листов сваливаются данные эти данные сопоставляются со справочником цен этой же книги, и через ВПР подставляет необходимые данные. Но случается так что появляется материал который еще не участвовал еще в расчетах и в связи с этим в ячейках появляется признак Н/Д. Для упрощения работы решил создать единый справочник материалов для всех расчетов (это отдельный файл) и по нему вопрос сформирую в отдельной теме. Написал макрос который по признаку Н/Д в столбце "О" запускается процедура передачи такого материала в файл открывающийся по определенному пути и встает в первую свободную строку в конце списка, таким образом получаю накапливаемый справочник материалов. Но столкнулся с проблемой и не могу ее разрешить макрос на перенос срабатывает только по первой позичии с признаком Н/Д и только эта позиция переносится в справочник. Подскажите пожалуйста решение такое, что бы макрос срабатывал на каждый признак Н/Д и следовательно переносил все материалы с признаком Н/Д. Возможно что я очень намудрил с макросом, выслушаю и приму все замечания. Благодарю!

Автор - ASM_0408
Дата добавления - 11.04.2018 в 16:28
sboy Дата: Среда, 11.04.2018, 17:02 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 2124
Репутация: 609 ±
Замечаний: 0% ±

Excel 2010
Добрый день.
Т.к. данных в файле не хватает (в макросе много ссылок на пустые ячейки, вероятно в оригинале они чем-то заполнены)
Поэтому всю логику понять не удалось. Но цикл Вы сами заканчиваете после первого раза вот тут
[vba]
Код
            If IsNumeric(Лист1.Cells(x1, "O")) Then
            Else
             x4(x2) = Лист1.Cells(x1, "A")
             x2 = x2 + 1
            End If
             If x2 > Лист1.Cells(4, "D") Then 'вот тут цикл и заканчивается, по крайней мере в примере, ячейка эта пуста 1>0
             x1 = 1000
             End If
[/vba]
в файле еще пару комментариев, но надо видеть видеть больше данных, чтобы помочь конкретней
К сообщению приложен файл: -2-1-.xlsm(25.1 Kb)
 
Ответить
СообщениеДобрый день.
Т.к. данных в файле не хватает (в макросе много ссылок на пустые ячейки, вероятно в оригинале они чем-то заполнены)
Поэтому всю логику понять не удалось. Но цикл Вы сами заканчиваете после первого раза вот тут
[vba]
Код
            If IsNumeric(Лист1.Cells(x1, "O")) Then
            Else
             x4(x2) = Лист1.Cells(x1, "A")
             x2 = x2 + 1
            End If
             If x2 > Лист1.Cells(4, "D") Then 'вот тут цикл и заканчивается, по крайней мере в примере, ячейка эта пуста 1>0
             x1 = 1000
             End If
[/vba]
в файле еще пару комментариев, но надо видеть видеть больше данных, чтобы помочь конкретней

Автор - sboy
Дата добавления - 11.04.2018 в 17:02
ASM_0408 Дата: Среда, 11.04.2018, 17:08 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 214
Репутация: 0 ±
Замечаний: 0% ±

2016
но надо видеть видеть больше данных, чтобы помочь конкретней

Полный файл весит 2,3 Мб, тут такой не выложить архив сильно не ужмет его. Как можно предоставить вам его на обозрение?
 
Ответить
Сообщение
но надо видеть видеть больше данных, чтобы помочь конкретней

Полный файл весит 2,3 Мб, тут такой не выложить архив сильно не ужмет его. Как можно предоставить вам его на обозрение?

Автор - ASM_0408
Дата добавления - 11.04.2018 в 17:08
sboy Дата: Среда, 11.04.2018, 17:17 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 2124
Репутация: 609 ±
Замечаний: 0% ±

Excel 2010
Полный не надо, надо видеть инфу в тех ячейках, которые участвуют в логике кода
[vba]
Код
Лист2.Cells(1, "H")
Лист2.Cells(1, "I")
Лист1.Cells(4, "D")
[/vba]
 
Ответить
СообщениеПолный не надо, надо видеть инфу в тех ячейках, которые участвуют в логике кода
[vba]
Код
Лист2.Cells(1, "H")
Лист2.Cells(1, "I")
Лист1.Cells(4, "D")
[/vba]

Автор - sboy
Дата добавления - 11.04.2018 в 17:17
ASM_0408 Дата: Среда, 11.04.2018, 17:22 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 214
Репутация: 0 ±
Замечаний: 0% ±

2016
Полный не надо, надо видеть инфу в тех ячейках, которые участвуют в логике кода

Хорошо понял сейчас сделаю
 
Ответить
Сообщение
Полный не надо, надо видеть инфу в тех ячейках, которые участвуют в логике кода

Хорошо понял сейчас сделаю

Автор - ASM_0408
Дата добавления - 11.04.2018 в 17:22
ASM_0408 Дата: Среда, 11.04.2018, 17:31 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 214
Репутация: 0 ±
Замечаний: 0% ±

2016
Лист2.Cells(1, "H") - это ячейка со ссылкой на другой лист для запуска по калькуляте макроса расчет_полотен
Лист2.Cells(1, "I") - это к этомуже относится сверочная ячейка
Лист1.Cells(4, "D") здесь находится вот эта формула =СЧЁТЕСЛИ(O18:P361;"#Н/Д")
 
Ответить
СообщениеЛист2.Cells(1, "H") - это ячейка со ссылкой на другой лист для запуска по калькуляте макроса расчет_полотен
Лист2.Cells(1, "I") - это к этомуже относится сверочная ячейка
Лист1.Cells(4, "D") здесь находится вот эта формула =СЧЁТЕСЛИ(O18:P361;"#Н/Д")

Автор - ASM_0408
Дата добавления - 11.04.2018 в 17:31
sboy Дата: Среда, 11.04.2018, 17:54 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 2124
Репутация: 609 ±
Замечаний: 0% ±

Excel 2010
Вот немного поправил, проверяйте
На сегодня времени нет, пора бежать, но код Ваш еще можно (а в некоторых местах нужно) корректировать
К сообщению приложен файл: 0774758.xlsm(25.2 Kb)
 
Ответить
СообщениеВот немного поправил, проверяйте
На сегодня времени нет, пора бежать, но код Ваш еще можно (а в некоторых местах нужно) корректировать

Автор - sboy
Дата добавления - 11.04.2018 в 17:54
ASM_0408 Дата: Четверг, 12.04.2018, 15:25 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 214
Репутация: 0 ±
Замечаний: 0% ±

2016
Подскажите пожалуйста как тогда получить последнюю строку.
Код
PosStr = ActiveSheet.UsedRange.Rows.Count ' не во всех случаях даёт последнюю строку
           'For x1 = 1 To Лист1.Cells(4, "D")
           ActiveSheet.Cells(PosStr + 1, 1).Resize(UBound(x4), 1).Value = x4


Сообщение отредактировал ASM_0408 - Четверг, 12.04.2018, 15:28
 
Ответить
СообщениеПодскажите пожалуйста как тогда получить последнюю строку.
Код
PosStr = ActiveSheet.UsedRange.Rows.Count ' не во всех случаях даёт последнюю строку
           'For x1 = 1 To Лист1.Cells(4, "D")
           ActiveSheet.Cells(PosStr + 1, 1).Resize(UBound(x4), 1).Value = x4

Автор - ASM_0408
Дата добавления - 12.04.2018 в 15:25
nilem Дата: Четверг, 12.04.2018, 17:34 | Сообщение № 9
Группа: Авторы
Ранг: Старожил
Сообщений: 1478
Репутация: 519 ±
Замечаний: 0% ±

Excel 2013
как тогда получить последнюю строку

для UsedRange
[vba]
Код
Sub ttt()
Dim LastRow As Long
With ActiveSheet.UsedRange
LastRow = .Row + .Rows.Count - 1
End With
MsgBox LastRow
End Sub
[/vba]


Яндекс.Деньги 4100159601573

Сообщение отредактировал nilem - Четверг, 12.04.2018, 17:34
 
Ответить
Сообщение
как тогда получить последнюю строку

для UsedRange
[vba]
Код
Sub ttt()
Dim LastRow As Long
With ActiveSheet.UsedRange
LastRow = .Row + .Rows.Count - 1
End With
MsgBox LastRow
End Sub
[/vba]

Автор - nilem
Дата добавления - 12.04.2018 в 17:34
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Цикличность проверки ячейки по признаку #Н/Д (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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