Всем доброго!!!!! Поставил босс задачу автоматического переноса долгов производства на новый лист. Думал, что сделаю быстро. и обломался на методе Find. Он как и ПОИСКПОЗ ищет только первое вхождение. А на большее пока не хватает знаний. В общем вопрос в чем: Необходимо данные из столбца 1 февраля( столбец AF) листа "контроль выполнения графика" перенести долги на лист "Февраль" в столбец F . критерий столбец С на обоих листах. С учетом того, что детали повторяются и расположение их на листах может меняться. [p.s.] формулами я это бы уже сделал, но нельзя там формулы.....
Всем доброго!!!!! Поставил босс задачу автоматического переноса долгов производства на новый лист. Думал, что сделаю быстро. и обломался на методе Find. Он как и ПОИСКПОЗ ищет только первое вхождение. А на большее пока не хватает знаний. В общем вопрос в чем: Необходимо данные из столбца 1 февраля( столбец AF) листа "контроль выполнения графика" перенести долги на лист "Февраль" в столбец F . критерий столбец С на обоих листах. С учетом того, что детали повторяются и расположение их на листах может меняться. [p.s.] формулами я это бы уже сделал, но нельзя там формулы.....китин
Sub DOLG() Dim Id&, POSLStr& Dim c As Range Dim firstResult$ POSLStr = Sheets("контроль выполнения графика").Cells(Rows.Count, 3).End(xlUp).Row
For Id = 11 To POSLStr If Cells(Id, 32) <> "" Then With Worksheets("Февраль").Range("C11:C1250") Set c = .Find(Cells(Id, 3), LookIn:=xlValues, lookat:=xlWhole) If Not c Is Nothing Then firstResult = c.Address Do c.Font.Bold = True c(1, 4) = Cells(Id, 32) '** Set c = .FindNext(c) '** Loop While Not c Is Nothing And c.Address <> firstResult End If
End With End If Next Id End Sub
[/vba]
Справка пишет: [vba]
Код
Loop While Not c Is Nothing And c.Address <> firstResult
[/vba]
мне кажется, достаточно этого: [vba]
Код
Loop While c.Address <> firstResult
[/vba]
мож так?
[vba]
Код
Sub DOLG() Dim Id&, POSLStr& Dim c As Range Dim firstResult$ POSLStr = Sheets("контроль выполнения графика").Cells(Rows.Count, 3).End(xlUp).Row
For Id = 11 To POSLStr If Cells(Id, 32) <> "" Then With Worksheets("Февраль").Range("C11:C1250") Set c = .Find(Cells(Id, 3), LookIn:=xlValues, lookat:=xlWhole) If Not c Is Nothing Then firstResult = c.Address Do c.Font.Bold = True c(1, 4) = Cells(Id, 32) '** Set c = .FindNext(c) '** Loop While Not c Is Nothing And c.Address <> firstResult End If
End With End If Next Id End Sub
[/vba]
Справка пишет: [vba]
Код
Loop While Not c Is Nothing And c.Address <> firstResult
данные из столбца 1 марта( столбец AF) листа "контроль выполнения графика" перенести долги на лист "Февраль" в столбец F . критерий столбец С на обоих лис
Игорь, в пояснялке ничего не напутал? И что делать, когда одинаковые в С? В общих чертах можно пробежаться по "контроль", засунуть в словарик в ключи сцепку из жирных и нежирных значений в С, в элементы - значения из AF Потом также пробегаемся по листу Февраль и вынимаем значения из словаря по сцепке жарных и нежирных, но уже листа Февраль
* Не, по жирным как-то не так получится. Поясни, из какой ячейки листа "Контроль..." нужно тянеть значения в ячейку F120 для значения ФКГП 334.01.00.000. С учетом того, что таких значений в листе Февраль 3, а в листе Контроль - 6
данные из столбца 1 марта( столбец AF) листа "контроль выполнения графика" перенести долги на лист "Февраль" в столбец F . критерий столбец С на обоих лис
Игорь, в пояснялке ничего не напутал? И что делать, когда одинаковые в С? В общих чертах можно пробежаться по "контроль", засунуть в словарик в ключи сцепку из жирных и нежирных значений в С, в элементы - значения из AF Потом также пробегаемся по листу Февраль и вынимаем значения из словаря по сцепке жарных и нежирных, но уже листа Февраль
* Не, по жирным как-то не так получится. Поясни, из какой ячейки листа "Контроль..." нужно тянеть значения в ячейку F120 для значения ФКГП 334.01.00.000. С учетом того, что таких значений в листе Февраль 3, а в листе Контроль - 6_Boroda_
да вроде не напутал. в этих двух листах практически две одинаковые( по столбцу С) таблицы. но в лист Февраль данные могут только добавляться. и поэтому простым копастом не пройдет надо к этим одинаковым подставлять свои значения из Контроля, если они там есть, конечно ха ха ха все не так просто ....... в F120 никакую... AF20 заполнена след. надо ее перенести в F20. в тот же комплект ФКГП 185.00.00.000-03 AF32 заполнена след. надо ее перенести в F32. в тот же комплект ФКГП 185.00.00.000-25 пипец как запутано
да вроде не напутал. в этих двух листах практически две одинаковые( по столбцу С) таблицы. но в лист Февраль данные могут только добавляться. и поэтому простым копастом не пройдет надо к этим одинаковым подставлять свои значения из Контроля, если они там есть, конечно ха ха ха все не так просто ....... в F120 никакую... AF20 заполнена след. надо ее перенести в F20. в тот же комплект ФКГП 185.00.00.000-03 AF32 заполнена след. надо ее перенести в F32. в тот же комплект ФКГП 185.00.00.000-25 пипец как запутанокитин
Не судите очень строго:я пытаюсь научиться ЯД 41001877306852
Поясни, из какой ячейки листа "Контроль..." нужно тянеть значения в ячейку F120 для значения ФКГП 334.01.00.000. С учетом того, что таких значений в листе Февраль 3, а в листе Контроль - 6
Поясни, из какой ячейки листа "Контроль..." нужно тянеть значения в ячейку F120 для значения ФКГП 334.01.00.000. С учетом того, что таких значений в листе Февраль 3, а в листе Контроль - 6
А где значение из ячейки С76? К чему относятся значения С77-79 - к "ФКГП 185.00.00.000-20"? Для всех жирных в столбце С рядом в столбце D текст начинается с "К-т"? Что делать с уже имеющимися значениями столбца F листа Февраль? Если они там могут быть, конечно Почему в строках 112 и 129 одинаковые значения? Они оба относятся к ФКГП 185.00.00.000-28 или нет? Почему одинаковые значения в С16 и С30? Получается, что все-таки нужно смотреть на столбец D еще?
А где значение из ячейки С76? К чему относятся значения С77-79 - к "ФКГП 185.00.00.000-20"? Для всех жирных в столбце С рядом в столбце D текст начинается с "К-т"? Что делать с уже имеющимися значениями столбца F листа Февраль? Если они там могут быть, конечно Почему в строках 112 и 129 одинаковые значения? Они оба относятся к ФКГП 185.00.00.000-28 или нет? Почему одинаковые значения в С16 и С30? Получается, что все-таки нужно смотреть на столбец D еще?_Boroda_
Короче, вот макрос. Заполняет вроде, но мне не очень нравится. Вопросы см. в моем предыдущем посте [vba]
Код
Sub tt() r0_ = 11 'первая строка c1_ = 3 'столбец обозначений c2_ = "AF" 'столбец с данными With Sheets("контроль выполнения графика") 'работаем с листом контроль n1_ = .Cells(.Rows.Count, c1_).End(3).Row - r0_ + 1 'кол-во строк в обозначениях ar1 = .Cells(r0_, c1_).Resize(n1_, 2) 'массив обозначение-наименование ar2 = .Cells(r0_, c2_).Resize(n1_) ' массив из столбца AF End With Set slov = CreateObject("Scripting.Dictionary") 'обозначаем словарь With slov 'работаем с ним For i = 1 To n1_ 'цикл по строкам If Left(ar1(i, 2), 3) = "К-т" Then 'если наименование начинается с К-т x1_ = ar1(i, 1) 'в переменную запоминаем соответствующее обозначение End If ' If ar2(i, 1) <> "" Then 'если в AF не пусто .Item(x1_ & ar1(i, 1)) = ar2(i, 1) 'в словаре ключ = х1 сцепить с обозначением соотв строки 'элемент = значению из AF End If Next i c2_ = "F" 'столбец куда With Sheets("Февраль") 'работаем с листом Февраль n1_ = .Cells(.Rows.Count, c1_).End(3).Row - r0_ + 1 ''кол-во строк в обозначениях ar1 = .Cells(r0_, c1_).Resize(n1_, 2) ' массив обозначение-наименование ar2 = .Cells(r0_, c2_).Resize(n1_) ' пустой массив End With For i = 1 To n1_ 'цикл по строкам If Left(ar1(i, 2), 3) = "К-т" Then 'если наименование начинается с К-т x1_ = ar1(i, 1) 'в переменную запоминаем соответствующее обозначение End If z_ = x1_ & ar1(i, 1) 'ключ = х1 сцепить с обозначением соотв строки If .exists(z_) Then 'если z есть в словаре ar2(i, 1) = .Item(z_) 'в пустой массив в соотв строку пишем элемент из словаря для ключа z End If Next i End With Sheets("Февраль").Cells(r0_, c2_).Resize(n1_) = ar2 'выгружаем данные на лист End Sub
[/vba]
Короче, вот макрос. Заполняет вроде, но мне не очень нравится. Вопросы см. в моем предыдущем посте [vba]
Код
Sub tt() r0_ = 11 'первая строка c1_ = 3 'столбец обозначений c2_ = "AF" 'столбец с данными With Sheets("контроль выполнения графика") 'работаем с листом контроль n1_ = .Cells(.Rows.Count, c1_).End(3).Row - r0_ + 1 'кол-во строк в обозначениях ar1 = .Cells(r0_, c1_).Resize(n1_, 2) 'массив обозначение-наименование ar2 = .Cells(r0_, c2_).Resize(n1_) ' массив из столбца AF End With Set slov = CreateObject("Scripting.Dictionary") 'обозначаем словарь With slov 'работаем с ним For i = 1 To n1_ 'цикл по строкам If Left(ar1(i, 2), 3) = "К-т" Then 'если наименование начинается с К-т x1_ = ar1(i, 1) 'в переменную запоминаем соответствующее обозначение End If ' If ar2(i, 1) <> "" Then 'если в AF не пусто .Item(x1_ & ar1(i, 1)) = ar2(i, 1) 'в словаре ключ = х1 сцепить с обозначением соотв строки 'элемент = значению из AF End If Next i c2_ = "F" 'столбец куда With Sheets("Февраль") 'работаем с листом Февраль n1_ = .Cells(.Rows.Count, c1_).End(3).Row - r0_ + 1 ''кол-во строк в обозначениях ar1 = .Cells(r0_, c1_).Resize(n1_, 2) ' массив обозначение-наименование ar2 = .Cells(r0_, c2_).Resize(n1_) ' пустой массив End With For i = 1 To n1_ 'цикл по строкам If Left(ar1(i, 2), 3) = "К-т" Then 'если наименование начинается с К-т x1_ = ar1(i, 1) 'в переменную запоминаем соответствующее обозначение End If z_ = x1_ & ar1(i, 1) 'ключ = х1 сцепить с обозначением соотв строки If .exists(z_) Then 'если z есть в словаре ar2(i, 1) = .Item(z_) 'в пустой массив в соотв строку пишем элемент из словаря для ключа z End If Next i End With Sheets("Февраль").Cells(r0_, c2_).Resize(n1_) = ar2 'выгружаем данные на лист End Sub
With Worksheets(1).Range("a1:a500") Set c = .Find(2, lookin:=xlValues) If Not c Is Nothing Then firstAddress = c.Address Do c.Value = 5 Set c = .FindNext(c) Loop While Not c Is Nothing And c.Address <> firstAddress End If End With
[/vba]
В моей оффлайн (2010) так [vba]
Код
With Worksheets(1).Range("a1:a500") Set c = .Find(2, lookin:=xlValues) If Not c Is Nothing Then firstAddress = c.Address Do c.Value = 5 Set c = .FindNext(c) Loop While Not c Is Nothing And c.Address <> firstAddress End If End With
[/vba] при таком варианте? На мой медвежий взгляд ошибки в справке нет. Мне не понятно зачем проверять на то чего там оказаться не может или я что-то упускаю.
sboy, спасибо. InExSu, Ну и как окажется [vba]
Код
c Is Nothing
[/vba] при таком варианте? На мой медвежий взгляд ошибки в справке нет. Мне не понятно зачем проверять на то чего там оказаться не может или я что-то упускаю.bmv98rus
Замечательный Временно просто медведь , процентов на 20.
Сообщение отредактировал bmv98rus - Среда, 22.05.2019, 12:07
Do c.Value = 5 Set c = .FindNext(c) 'когда-нибудь c станет Nothing, говорю как краевед ' и тогда строка ниже даст ошибку Loop While Not c Is Nothing And c.Address <> firstAddress
Do c.Value = 5 Set c = .FindNext(c) 'когда-нибудь c станет Nothing, говорю как краевед ' и тогда строка ниже даст ошибку Loop While Not c Is Nothing And c.Address <> firstAddress