Ігор Гончаренко, прикрепил новый файл где описал каждое действие в случае W/L рядом(или L/W). В первой ситуации в прикрепленном файле, макрос посчитал правильно. Но во второй и третьей ситуации - не правильно. Так же есть четвертая ситуация чуть чуть ниже, не понятно откуда берется "ДА" в 49 строке.
Ігор Гончаренко, да, совпало, спасибо Вам огромное за это. Но при другом наборе данных, в такой же ситуации макрос почему то пропускает триггер, если Вам не трудно посмотрите пожалуйста файл который прикрепил выше... Единственная ситуация которую он не распознает - там где возле триггера L стоит рядом W.
Ігор Гончаренко, добрый день. Спасибо огромное Вам за быстрый отклик и макрос! Он работает почти идеально, кроме некоторых моментов, когда W/L рядом, не хочет начинать поиск. Прикрепил файл с новым набором данных, где указана ошибка.
Здравствуйте. Прошу помощи в написании формулы, которая определяет триггер, и после этого триггера начинает искать значение в колонке.
Колонки B и C - в них находятся значения в виде "W" и "L". Триггером считается если между двумя "L" по ДИАГОНАЛИ, стоит только 1 "W" или между ними пустые ячейки. Колонка A - в ней значения которые нужно искать после триггера("O" и "U"). 1) Если триггер случился в колонке "B", то ищем значение "U" в колонке "A", если не нашли то в колонке D ставим "НЕТ", если нашли то ставим "ДА", поиск прекращается если наступает новый триггер. 2) Если триггер случился в колонке "С", то ищем значение "O" в колонке "A", если не нашли то в колонке D ставим "НЕТ", если нашли то ставим "ДА", поиск прекращается если наступает новый триггер. 3) Отдельное правило для единственного случая, когда возле триггера "L" рядом стоит "W", тогда должен сработать дополнительный триггер, мы должны искать O или U, только после первого случившегося O или U.
В прикрепленном файле, максимально постарался прокомментировать каждое действие с подробностями.
МатросНаЗебре,здравствуйте, спасибо за формулу, но это не совсем то что нужно. Ваша формула проверяет первое значение после "W", а дальше ей не важно...
Посмотрите на диапазон строк 30-32, так же на диапазон 38-40. Формула должна искать Y пока не найдет его в этом диапазоне. Ну то есть если случилось "W", и первое значение после него "A", там должно стоять "N", переходим к следующего значению, там тоже стоит "A", опять ставим "N" и т.д...
Здравствуйте, помогите пожалуйста написать формулу. Данные в столбце "H" - вводятся в ручную, значения A и B.
ЕСЛИ в колонке J случилось "W", ищем начиная со следующей строки значение "B" в колонке H, если находим, ставим "Y", если не находим, ставим "N". ЕCЛИ находим значение "Y", прекращаем поиск, и переходим к следующему диапазону.
Началом диапазона считается следующая строка после W, колонке J Концом диапазона считается строка в которой находится W или L, в колонке J.
Добрый день! Прошу помощи вот в таком вот задании.
В колонке "H" есть значения A и B в рандомном порядке. На основе этих значений, с помощью формулы подсчитываются значения в колонке J. Каждый новый диапазон начинается в следующей строке после значения "W" или "L" и заканчивается на "W" или "L". И вот собственно условие для колонки "F" которая должна подсчитываться: Если в диапазоне случилось одно "A", то в следующей строке столбца "F" записываем "A" до конца диапазона если условие выполняется. Если в диапазоне случилось два "B", то в следующей строке столбца "F" записываем "B" до конца диапазона если условие выполняется. Если в диапазоне случилось два "B" и одно "A", то в следующей строке столбца "F" записываем "AB"
На примере файла: В J23 начался новый диапазон. В H23 случилось одно "A", в F24 записываем "A". В H24 случилось одно "B", в F25 записываем "A". В H25 стоит B. То есть в диапазоне от J23 до J26 случилось два "B" и одно "A". Значит записываем в F26 "AB".
В J37 начался новый диапазон. В H37 случилось одно "B", пропускаем. В H38 случилось одно "A", в F39 записываем "A". В H39 стоит B. То есть в диапазоне от J37 до J40 случилось два "B" и одно "A". Значит записываем в F40 "AB".
Здравствуйте! Прошу помощи вот в таком вот задании: В колонку "H" вводятся результаты вручную, значения "A" или "B". Колонки "J" и "K" это результаты вычислений колонки "H". Колонка "J" подписана как "A", колонка "K" подписана как "B". Если это поможет, то колонки "J" и "K" вычисляются следующим образом: Для колонки "J" условие: Если в колонке "H" случается 4 "A" (не важно в каком порядке), тогда в колонке "J" значение "W". Если в колонке "H" случается 5 "B" (не важно в каком порядке), тогда в колонке "J", значение "L". После найденного "W", или "L", подсчет начинается заново. Для колонки "K", противоположное условие: Если в колонке "H" случается 4 "B" (не важно в каком порядке), тогда в колонке "K" значение "W". Если в колонке "H" случается 5 "A" (не важно в каком порядке), тогда в колонке "K", значение "L". После найденного "W", или "L", подсчет начинается заново. Но решение для колонок "J" и "K" у меня есть. Нужно решение для колонки "E".
И вот собственно что нужно сделать: Если в колонке "J" случилось "L", ищем 4-ое "B" в колонке "K"(в диапазоне от последнего "W" или "L", до следующего "W" или "L"). Мы думаем что если случилось три "B", то после третьего "B" сразу же тоже будет четвертое "B" в колонке "H" (как бы прогнозируем). И если сразу же после третьего "B", в колонке "H" случается четвертое "B", тогда записываем в колонку "E" значение "BB". Но если сразу же после третьего "B", в колонке "H" случается "A", тогда записываем в колонке "E" значение "A". Если еще раз случится в колонке "H" случится "A", опять записываем в колонке "E" значение "A", и так пока не найдем четвертое "B".
Аналогично проделываем это если в колонке "K" случилось "L". По диагонали в колонке "J", ищем 4-ое "A". В прикрепленном файле есть пример. В J14 случилось "L". В диапазоне от К14 до К19 ищем 4-ое "B" в колонке "H". H14 - первое "B", H15 - второе "B", H18 - третье "B" и после третьего "B" сразу же идет четвертое, значит в E19 записываем "BB". Далее в K27 случилось "L", ищем в диапазоне от J23 до J30, четвертое "A" в колонке "H". H23 - первое "A", H26 - второе "A", H27 - третье "A", мы думаем что после третьего "A" должно быть сразу же четвертое "A", но нет, в H28 стоит "B", значит записываем в E28 значение "B", после него в H29 опять "B", значит опять записываем "B" в E29. И наконец в H30 случилось 4-ое "A", записываем в E30 значение "AA".
Извините за большое кол-во текста, постарался максимально доступно объяснить! Заранее спасибо за помощь!
Здравствуйте, прошу помощи вот в таком задании: В колонке G и H, внесены значения "A" и "B". В колонке J - результат сравнения.
Условие такое: Если G10 равно H11, то J11 = "Равно". Если G10 не равно H11, то J11 = "Не равно". Если G10 =A или B, и H11 = пустота, то J11 = пустота Если G10 = пустота, и H11 = пустота, то J11 = пустота
Условие простое, НО, если в колонке J случаются два "не равно" подряд, то мы пропускаем следующие ячейки, до того как в колонке G появится "A". Чтобы понять эту ситуацию, посмотрите пример, диапазон J22-J25.
Там случилось вот что: G22 не равно H23. Записываем в J23 "Не равно" G23 не равно H24. Записываем в J24 "Не равно" G24 равно H25, но было два случая "Не равно", по этому пропускаем, и ищем в G следующее "A".
artyrH, спасибо за Ваш труд, но это не совсем то что нужно. После первого найденого R или R-R, мы переходим к следующему диапазону(то есть ищем следующее G, в колонке "h". В примере ошибку выделил красным...
Здравствуйте. Прошу помощи решить вот такое вот задание.... Основной столбец "H", в котором в рандомном порядке записаны значения "G" и "R". Есть так же столбцы "D" и "F" в которых записаны такие же значенения "G" и "R" в рандомном порядке. Столбец K - результат следующих вычислений: Когда в столбце H, появляется значение "G", формула должна искать значение "R" в столбцах D и F начиная со следующей строки. Когда в столбце H, появляется значение "R", пропускаем диапазон, ищем следующее "G". Если по пути к "R" встречается "G" (в одной из колонок), тогда в колонке результата "K" должно быть значение "B". Если по пути к "R", в одной строке (В обеих колонках) будут "G" и "G", тогда в колонке "K" должно быть значение "B" Если по пути к "R" , в одной строке (В обеих колонках) будут "R" и "G" одновременно (или "G" и "R"), тогда в колонке "K" пустота. Если находим "R" (в одной из колонок), тогда в колонке "K" должно быть значение "A". Если находим "R" и "R" (в обеих колонках, тогда в колонке "K" должно быть значение "A".
Если найдено "R", переходим к следующему значению в колонке "H".
Ігор Гончаренко, не понял сначала что имел ввиду БМВ, сорри. Оказывается да, если в пустом файле запустить этот макрос то все работает.... К сожалению согласно пункта 2.4 правил форума, не могу прикрепить файл Пытался найти причину, почему выдает ошибку, перелопатил весь файл, так и не понял. Самое интересное что:
Код
Лист3.Rows("1:" & i).Calculate
Не работает а если так:
Код
Лист3.Rows(i).Calculate
то работает без ошибки. Умудрился решить задачу вторым вариантом. Спасибо Ігор Гончаренко, БМВ, за отклик. Тему можно удалить так как она не имеет никакого смыслового характера...
Здравствуйте. Прошу помощи. Есть код который считает очень большой объем информации. Для экономии времени решил воспользоваться отключением пересчета формул на других листах. Но столкнулся с проблемой такого характера: Нужно чтобы пересчет формул включался на определенных листах, в строках, от первой строки до строки заданной переменной "i". Пробовал на подобии:
Код
Лист3.Rows("1:" & i).Calculate
Пробовал так же Range, и еще много вариантов которые находил в интернете. Но чтобы не пробовал, постоянно выдает ошибку "Method Calculate of Object Range Failed".
Вот собственно сам код:
Код
Sub work3()
Application.EnableEvents = False
Dim lr As Long
Dim i As Long
lr = Cells(Rows.Count, 8).End(xlUp).Row
For i = 9 To lr
If Range("H" & i).Value = "U" Then Range("H" & i).Value = "O" Else Range("H" & i).Value = "U"
Application.Calculation = xlCalculationManual
EnableCalculation = True
Лист3.Rows("1:" & i).Calculate
Лист4.Rows("1:" & i).Calculate
Лист5.Rows("1:" & i).Calculate
Лист6.Rows("1:" & i).Calculate
Rows(i).Calculate
Range("AH" & i).Value = Range("AG" & i).Value
Range("CD" & i).Value = Range("CC" & i).Value
Range("DZ" & i).Value = Range("DY" & i).Value
Range("FV" & i).Value = Range("FU" & i).Value
If Range("H" & i).Value = "U" Then Range("H" & i).Value = "O" Else Range("H" & i).Value = "U"
Next i
Application.EnableEvents = True
EnableCalculation = False
Application.Calculation = xlCalculationAutomatic
End Sub
Юрий М написал: По вопросу: что понимать под активной ячейкой?
Значения начинаются в H9, и после каждого ввода значения в следующую ячейку, пересчитываются все старые, и это занимает много времени. А хотелось бы, чтобы пересчитывалась только строка, в которую ввел новое значение. В примере, введите А или B в ячейку H13 и сами всё поймете
Юрий М написал: Про зацикливание: отключайте отслеживание событий перед вызовом процедуры "сцепить2" и включайте его в конце макроса.
Невероятно, но работает! Последовал Вашему совету отключить/включить отслеживание событий, и теперь при изменении ячейки, запускается макрос и ничего не зацикливается. Теперь все отлично работает и правильно считает, но, как всегда бывает столкнулся с новой проблемой. Код который написал Tefra, после каждого ввода в ячейку нового значения, пересчитывает все старые. Объем данных очень большой, и это занимает большое кол-во времени. Как переписать этот код, и сделать так чтобы ячейка подсчитывалась только активная? Вот собственно сам код...
Код
Sub сцепить2()
Application.ScreenUpdating = False
Dim lr As Long
Dim i As Long
lr = Cells(Rows.Count, 8).End(xlUp).Row 'Вычисляет последнюю строку с данными
For i = 9 To lr
If Range("H" & i).Value = "U" Then Range("H" & i).Value = "O" Else Range("H" & i).Value = "U" 'Заменяем значения A на B в столбце H
'Сцепляем значения в заданных столбцах
Range("Q" & i).Value = Range("J" & i).Value & Range("K" & i).Value & Range("T" & i).Value & Range("U" & i).Value & _
Range("AD" & i).Value & Range("AE" & i).Value & Range("AN" & i).Value & Range("AO" & i).Value & _
Range("AX" & i).Value & Range("AY" & i).Value
If Range("H" & i).Value = "U" Then Range("H" & i).Value = "O" Else Range("H" & i).Value = "U" 'Возвращаем исходное значение столбца H
Next i
Application.EnableEvents = True
End Sub
Перед тем как написать, естественно Я проверил. Этот вопрос, просто отсылка к дальнейшему тексту. А вот переписать код, действительно не имею возможности, потому что не достаточно просто изменить "B" на "B с пробелом", там нужно переписать условие.Вот и попросил помощи у Tefra.
кнопка цитирования не для бездумного копирования [МОДЕРАТОР]
Да, все отлично и правильно считает! Спасибо Вам огромное! Я вот что подумал...Я могу изменить свои формулы вычислений на то чтобы они учитывали пробел после A или B, то не важно, будем ли мы вводить "A ", или просто "A".
VBA учитывает пробелы в .Value? Ну например если мы напишем не
Код
.Value = "B"
А
Код
.Value = "B "
Тогда можно будет сделать так: 1) Заменяем значения "B" на "A " (A с пробелом) "A" на "B " (B с пробелом) 2) сцепляем 3) Возвращаем Если "A "(с пробелом) то "B " (с пробелом) Если "B "(с пробелом) то "A " (с пробелом)
И благодаря этому мы сможем использовать вот этот код, который запускает макрос при изменении ячейки
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("H9:H100")) Is Nothing Then
Call сцепить2
End If
End Sub
И тогда по идее, не должно быть зацикливания? Поправьте меня, если Я не прав, ибо в экселе не очень сильно разбираюсь...все по логике у меня Если не тяжело, не могли бы Вы попробовать изменить старый код на новый, потому что Я не знаю как правильно это сделать самому Спасибо!
Посмотрите пожалуйста мой последний прикрепленный файл. Там более четко показано что должно быть при А, и при B. Данные в K-L, N-O, Q-R, T-U, W-X - получаются путем сложных вычислений(практически рандомно), грубо говоря они зависят от определенной последовательности A и B в вышестоящих ячейках. Вот например если мы изменим ячейку H10(в моей последнем прикрепленном файле), то все данные в 10 строке изменятся(формулы которые я вписал в ячеки это просто пример, на самом деле ячейки изменятся хаотично, то есть я не знаю в какой колонке будет Y, а в какой N).
Здравствуйте, Игорь. Немного не понял как это работает...не могли бы Вы объяснить? Вот смотрите, я добавил пример более понятный. Теоретически A противоположное значение, значению B. Если мы вводим в ячейку H10 значение "B", то у нас в сцепке Z10 = "NNNNY". И макрос должен посчитать, что было бы, если бы вместо B, стояло А в ячейке "AA10"(тоже сцепить). А было бы "YYYYY".
Здравствуйте, прошу помощи вот в таком вот задании. Есть колонка куда вводятся значения A или B(в примере колонка H) На основе эти значений, путем моих вычислений в колонках K-L, N-O, Q-R,T-U,W-X, есть значения, которые сцепил в колонке Z. Нужно сделать так, что при вводе в колонку H, значения A, оно само менялось на B(при этом значения в колонках вычислений изменяться), и результат сцепки записать в колонку AA. Далее вернуть значение A. И так же сделать если значение будет B, поменять его на A, сцепить и вернуть B. Значения в H, ввожу в ручную по одному, а так же вставляю путем копирования несколько значений. Как сделать чтобы при вводе значения, автоматически подсчитывалась колонка AA?
Прошу помощи решить такую проблему: В колонке A, есть значения A и B, которые рандомно идут друг за другом. В колонке B, на основе моих вычислений, появляются значения Y и N. И самое важное что нужно автоматизировать, это колонка C для которой такое условие: В каждом диапазоне(первый диапазон B2:B6, второй диапазон B7:B13, третий диапазон B14:B19 и т.д.), то есть начало диапазона в следующей ячейке после Y или N, и конец диапазона на следующей Y или N. Формула должна искать первое встретившееся значение A из первой колонки, и если за ним следует так же A, то на против этого A в колонке C, должно быть YES. Если после нахождения первого A, за ним следует B, то в колонке C, должно быть NO. Если в диапазоне нету ни единого A, тогда пропускаем этот диапазон. После того как найдено какое либо из значений, мы бросаем этот диапазон и переходим к следующему(то есть значение находится один раз в одном диапазоне, и то что в нем идет дальше, нас уже не интересует)
Добрый день! Помогите пожалуйста. Есть таблица в которой 3 столбца со значениями(В примере столбцы A,C,E). Нужно чтобы формула, или макрос находила строки в которых все три столбца совпадают, и на против каждой строки где найдено совпадение, выводила значение которое находится в столбце G, в ячейке столбца "J" повторяющейся строки. В примере 1 строка совпадает с 5, по всем трем столбцам, нужно чтобы в J1, выводилось значение которое находится в G5, и наоборот, в J5 выводилось значение которое находится в G1. Прикрепил пример, спасибо!
БМВ,здравствуйте. Подскажите, а как сделать так как в примере? В колонке "C", должны быть поочередно значения из колонки "A", без пропусков. В колонке "А", значения получаются путем формул. Спасибо!