|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
в каждом листе(всего их 4) в первой ячейке стойт число "1" в след(нижний) ячейке "2" и т.д ... до 20, но среди них встречается еще одна "2". Нужно ее "переставить"(в соседний столбец) из списка. как написать используя sheets(i) и findnext help(из excel.xls) хорошо прочитал, но трудно через неё составить свой код и там не указан "второй по счету findnext" если решу, напишу... заранее спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2011, 16:01 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
justice85там не указан "второй по счету findnext" если запустить два раза - будет второй по счету. а вообще - давай конкретику, что не получается, а то писать за тебя всю программу, как видно, ни у кого желание не возникло. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2011, 20:06 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
Shocker.Pro="если запустить два раза - будет второй по счету" нужно именно без "запустить два раза " то что есть: Worksheets(i).Range("a1:a10").FindNext(2, LookIn:=xlValues). ' must be findnext(2-ой по счету) Set x = found.Row 'must be ~ foundnext.adress Set y = found.Column 'must be ~ foundnext.column Cells(x, y).Cut Cells(B1).Paste _______________ правильные(работающие) коды: Range("a1:a10").Find("2", LookIn:=xlFormulas).Activate Cells.FindNext(After:=ActiveCell).Activate __ comment: при "бегущем" Worksheets(i) наш activate не уместен ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2011, 08:23 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
justice85нужно именно без "запустить два раза "это что, такое условие задачи? Почему нельзя? justice85правильные(работающие) коды: Range("a1:a10").Find("2", LookIn:=xlFormulas).Activate Cells.FindNext(After:=ActiveCell).Activate __ comment: при "бегущем" Worksheets(i) наш activate не уместен Ну правильно - так правильно. Просто не надо использовать Activate Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2011, 09:22 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
Спасибо за After:=found "Shocker.Pro как теперь понимать то что он находит т.е. как понимать found (англ.перевод знаю) как скорректировать?: found.cut found.Paste Destination:=Worksheets(i).Range("B1") еррор: object required ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2011, 10:21 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
justice85Спасибо за After:=found "Shocker.Pro как теперь понимать то что он находит т.е. как понимать found (англ.перевод знаю) как скорректировать?: found.cut found.Paste Destination:=Worksheets(i).Range("B1") еррор: object required Может следовало бы сначала изучить основы программирования и языка? found - это переменная, которую я сам и объявил. Я мог назвать ее "хрен" - это не меняет сути дела. Тип этой переменной диапазон ячеек. В данном случае - найденный. Copy/Paste не стоит использовать для таких целей - зачем буфер обмена забивать? Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2011, 10:25 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
по поводу found, вообще хотел написать: "как глубже понять объект found, что можно с ней "натворить" "(ну ладно, я сам ее точнее изучу) мне таки нужно узнать при, скажем, findnext(четвертый по счету) то будет так?: Set found = Worksheets(i).Range("a1:a10").Find("2", LookIn:=xlFormulas) Set found = Worksheets(i).Cells.FindNext(After:=found) Set found = Worksheets(i).Cells.FindNext(After:=found) Set found = Worksheets(i).Cells.FindNext(After:=found) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2011, 13:06 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
justice85по поводу found, вообще хотел написать: "как глубже понять объект found, что можно с ней "натворить" "(ну ладно, я сам ее точнее изучу) еще раз - found - это произвольное название переменной. Изучать надо Range - это основной объект при работе с экселем. Он представляет собой диапазон ячеек (в частном случае - одну ячейку). В данном случае ссылку на ячейку возвращает метод Find[Next] - то есть после выполнения Find[Next] в переменной оказывается ссылка на найденную ячейку. justice85мне таки нужно узнать при, скажем, findnext(четвертый по счету) то будет так?: Set found = Worksheets(i).Range("a1:a10").Find("2", LookIn:=xlFormulas) Set found = Worksheets(i).Cells.FindNext(After:=found) Set found = Worksheets(i).Cells.FindNext(After:=found) Set found = Worksheets(i).Cells.FindNext(After:=found) да, в простом случае можно использовать всякие изощрения, но в данном случае в них нет смысла ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2011, 13:22 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
Sub SP() Dim found As Range Set found = Worksheets(1).Range("a1:a10").Find("2", LookIn:=xlFormulas) Set found = Worksheets(1).Cells.FindNext(After:=found) Worksheets(1).Range("B1") = found End Sub F5 run-time error 5 invalid procedure call or argument причем если этот же 4-х строчный код запустить в новом 1.xls файле, то действительно переставляет в B1 вторую двойку ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2011, 13:44 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
justice85Sub SP() Dim found As Range Set found = Worksheets(1).Range("a1:a10").Find("2", LookIn:=xlFormulas) Set found = Worksheets(1).Cells.FindNext(After:=found) Worksheets(1).Range("B1") = found End Sub А не пора ли уже прочитать правила форума и наконец начать оформлять правильно код (ну хотя бы посмотреть, как я это делаю) justice85F5 run-time error 5 invalid procedure call or argument причем если этот же 4-х строчный код запустить в новом 1.xls файле, то действительно переставляет в B1 вторую двойку Стало быть код правильный. при F5 курсор должен стоять внутри процедуры ну или выложи файл, в котором не работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2011, 14:04 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
src файл src ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2011, 14:21 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
Так это. В твоем файле двойки нет вообще. Первый поиск ее не находит. Соответственно, на втором поиске возникает ошибка, так как found=Nothing в этот момент. Если предполагаются такие ситуации, естественно, нужно вводить проверки после поисков, а нашлось ли чего либо. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2011, 15:05 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
Верно. на счет "after:=found" в хелпе то же есть, просто там выражение "Set c = .FindNext(c)" казалось как бесконечный цикл. Ну все вроде: Dim found As Range For i = 1 To 3 With i Set found = Worksheets(i).Range("a1:a10").Find("2", LookIn:=xlFormulas) Set found = Worksheets(i).Cells.FindNext(After:=found) Set found = Worksheets(i).Cells.FindNext(After:=found) Set found = Worksheets(i).Cells.FindNext(After:=found) Worksheets(i).Range("B1") = found End With Next i thanks ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2011, 15:33 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
justice85Ну все вроде: Ну не все. Код так и не научился правильно оформлять, неужели так сложно нажать кнопку "цитировать"? justice85 Код: plaintext
Оригинальный ход. А для чего это, поделись опытом )) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2011, 15:45 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
авторtop encryption secret ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2011, 16:33 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
Shocker.Pro, Ну правильно - так правильно. Просто не надо использовать Activate Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2011, 20:25 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
В самом первом посту я хотел автор"переставить"(в соседний столбец) ShockerPro решил "коротко"авторWorksheets(i).Range("B1")=found Я еще дополнил свою прогу: авторWorksheets(i).Cells(a, b).Cut Worksheets(i).Range("B1").Select ActiveSheet.Paste т.к. мне в действительности нужно через параметры a,b где(a = found.Row, b = found.Column) еще один вопрос:как поставить на "B1" при "бегущем" Worksheets(i) ? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2011, 12:49 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
justice85авторWorksheets(i).Cells(a, b).Cut Worksheets(i).Range("B1").Select ActiveSheet.Paste т.к. мне в действительности нужно через параметры a,b где(a = found.Row, b = found.Column) ну и кто мешает? Код: plaintext
justice85еще один вопрос:как поставить на "B1" при "бегущем" Worksheets(i) ? что поставить? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2011, 12:54 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
Shocker.Pro, загляни под крышечку спойлер ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2011, 13:44 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
скукотищаShocker.Pro, загляни под крышечку спойлер заглядывал, это не прояснило мне суть вопроса автора. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2011, 14:26 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
Shocker.Pro, а суть своего ответа прояснило? поиск отработат неправильно -если искомое значение встречается в диапазоне один раз; -если искомое значение встречается более одного раза и одно из вхождений - первая ячейка диапазона. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2011, 14:44 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
Ты меня вообще запутал. Я оставил на совести автора доделки, дав ему только удочку (ибо я - не Скукотища) Ты ему сделал нормальную законченную функцию, которая возвращает Row. Но что ТЫ хотел сказать МНЕ я не понял. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2011, 15:24 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
Shocker.Proсложно нажать кнопку "цитировать"? почему после цитирования не большой как бы абзац. место много "берет". Shocker.ProWorksheets(i).Range("B1")=Worksheets(i).Cells(a, b) сначала показалось как трамвай запихнули в автобус. вообще то там наверно так должно быть: Range("B1").value = Cells(a, b).value лично "объект" Range, я так понимал скукотищазагляни под спойлер проверил. код после F5 ничего не изменил со списком(визуально (или как там?)) что делать с whatfound? вызываю ФУНКЦИЮ так: call FoundSecond((WhatFound)) или по другому лучше? WhatFound=2 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2011, 15:24 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
Огромное спасибо Shocker.Pro ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2011, 15:33 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
Shocker.ProТы ему сделал нормальную законченную функцию, которая возвращает RowФункция не нормальная. Тот топик был исключительно для тебя. Shocker.ProНо что ТЫ хотел сказать МНЕ я не понял.Хотел сказать, что с .Find не всё так просто, как кажется. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2011, 15:41 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
justice85, вызываю ФУНКЦИЮ так: call FoundSecond((WhatFound)) или по другому лучше? Лучше ею не пользоваться. Т.к. в некоторых случаях она возвращает не то, что ожидаешь. Вызов: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2011, 16:04 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
justice85Shocker.Proсложно нажать кнопку "цитировать"? почему после цитирования не большой как бы абзац. место много "берет". Я просил нажать "цитировать", чтобы ты посмотрел наконец и научился оформлять код на форуме. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2011, 17:22 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
скукотищаПростой код, который "должен" найти строку последнего вхождения двойки в заданном диапазоне, сваливается в бесконечный цикл а, ну я кому-то здесь решал уже такую задачку. просто проверял условие CurrentRow<PreviousRow ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2011, 17:25 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
1,2,... до A13=13 при a=12, b=1 авторWorksheets(i).Range("B1")=Worksheets(i).Cells(a, b) b1- пустая, до F5. после F5 равна 12 и A12=12 но при авторSet found = Worksheets(i).Range("a1:a10").Find("2", LookIn:=xlFormulas) Set found = Worksheets(i).Cells.FindNext(After:=found) a = found.Row'=12 b = found.Column'=1 Worksheets(i).Range(Cells(1, 1), Cells(a, b)) = Worksheets(i).Range(Cells(1, 2), Cells(12, 2)) F5 -> A1:A12 опустошается из за [B1:B12] = nothing и вижу только 13 почему в первом коде (этого поста) A12 не опустошается? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2011, 10:36 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
justice85почему в первом коде (этого поста) A12 не опустошается? 1) Worksheets(i).Range("B1")= 2) Worksheets(i).Range(Cells(1, 1), Cells(a, b)) = разницу видищь? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2011, 10:43 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
Вижу.Имею ввиду: Ячейки прировнять можно "B1 = Cell(a, b)". 'в итоге после F5, Cell(a, b) - не пустеет А вот насчет диапазона "Cells(1, 2), Cells(12, 2) = Cells(1, 1), Cells(a, b)". 'F5, Cells(1, 1), Cells(a, b) - пустеет ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2011, 12:43 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
Не верю. либо там еще формулы, либо еще код, либо что-то еще ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2011, 12:55 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
White OwlНикогда не делай Cells() или Range(), всегда делай somesheet.Cells() или somesheet.Range() где somesheet.Cells() - "на первый взгляд" для ячейки как написать его же для ячеек? Код: авторDim found As Range For i = 1 To 1 Set found = Worksheets(i).Range("a1:a10").Find("2", LookIn:=xlFormulas) Set found = Worksheets(i).Cells.FindNext(After:=found) a = found.Row: b = found.Column Worksheets(i).Range(Cells(1, 1), Cells(a, b)) = Worksheets(i).Range(Cells(1, 2), Cells(12, 2)) 'Worksheets(i).Range("B1")=Worksheets(i).Cells(a, b) Next i ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2011, 13:57 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
justice85для ячейки как написать его же для ячеек? Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2011, 15:35 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
вот именно: после F5 кода: Dim found As Range For i = 1 To 1 Set found = Worksheets(i).Range("a1:a10").Find("2", LookIn:=xlFormulas) Set found = Worksheets(i).Cells.FindNext(After:=found) a = found.Row: b = found.Column Worksheets(i).Range(Cells(1, 1), Cells(a, b)) = Worksheets(i).Range(Cells(1, 2), Cells(12, 2)) 'Worksheets(i).Range("B1")=Worksheets(i).Cells(a, b) Next i Cells(1, 1), Cells(a, b) - пустеет т.е. на екселе ячейки А1:А12 - пустеют. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2011, 15:48 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
justice85Cells(1, 1), Cells(a, b) - пустеет т.е. на екселе ячейки А1:А12 - пустеют. ну правильно, ты же копируешь в них содержимое ячеек B1:B12 - а в тех пусто. Чего ты ожидал? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2011, 15:50 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
И заметь - до этого ты привел другой код: justice85А вот насчет диапазона "Cells(1, 2), Cells(12, 2) = Cells(1, 1), Cells(a, b)". 'F5, Cells(1, 1), Cells(a, b) - пустеет вот на него я сказал - не верю. А с последним - все так и должно быть ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2011, 15:53 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
Shocker.Pro до этого ты привел другой код да авторпри Worksheets(i).Range(Cells(1, 2), Cells(12, 2)) = Worksheets(i).Range(Cells(1, 1), Cells(a, b)) и при Worksheets(i).Cells(a, b) = Worksheets(i).Range("B1") одинаковые проблемы invalid procedure call or arg-nt но мне интересно почему B1 не опустошает А12? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2011, 10:25 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
justice85но мне интересно почему B1 не опустошает А12? блин Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2011, 22:02 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
авторКак по твоему, чему будет равна переменная b после выполнения этого кода? b=7 строка Worksheets(i).Range("B1")=Worksheets(i).Cells(a, b) "по сути" равна ***Worksheets(i).Range(Cells(1, 2), Cells(1, 2)) = Worksheets(i).Range(Cells(a, b), Cells(a, b)) строка *** тоже работает, но авторWorksheets(i).Range(Cells(1, 2), Cells(12, 2)) = Worksheets(i).Range(Cells(1, 1), Cells(a, b)) НЕ работает. для диапазона ячеек - помогите ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2011, 08:00 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
justice85авторКак по твоему, чему будет равна переменная b после выполнения этого кода? b=7 ну то есть никакого "опустошения" b не происходит. Почему же должен "опустошаться" диапазон? авторWorksheets(i).Range(Cells(1, 2), Cells(12, 2)) = Worksheets(i).Range(Cells(1, 1), Cells(a, b)) НЕ работает. для диапазона ячеек - помогите 1) подставь вместо a, b конкретные значения 2) напиши уже, наконец, что именно не работает в этой строке (никакого "опустошения" диапазона из правой части происходить не должно) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2011, 09:10 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
****Dim found As Range For i = 1 To 1 Set found = Worksheets(i).Range("a1:a10").Find("2", LookIn:=xlFormulas) Set found = Worksheets(i).Cells.FindNext(After:=found) a = 12: b = 1 Worksheets(i).Range(Cells(1, 2), Cells(12, 2)) = Worksheets(i).Range(Cells(1, 1), Cells(a, b)) Next i до Ф5 второй стобец пуст после Ф5 должно быть: В1=1, В2=2, ... , В12=12 но код **** ничего не вставляет/меняет/работает ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2011, 09:43 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
justice85, 10548425 Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2011, 10:03 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
С 22 апр. [10551516] из-за всешо лишь слова value (когда сам "страдал" этим правописанием). хм-хм блин. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2011, 10:25 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2011, 13:38 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
если после строки *** поставить строку Код: plaintext
то код first_1_3 не работает ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2011, 17:00 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
justice85код first_1_3 не работает Надо угадать, что не работает? файл выкладывай. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2011, 18:08 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
justice85если после строки *** поставить строку... Можно подумать, что если не поставить, то работает Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2011, 20:49 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
скукотищаМожно подумать, что если не поставить, то работает а ведь я давал автору ссылку ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2011, 00:42 |
|
findnext(второй по счету?)
|
|||
---|---|---|---|
#18+
Код: plaintext
Код: plaintext
просто пока я в форуме спеша редактировал. а так у меня в коде было Код: plaintext
я уже сам решил вопрос с (10569678]) и этот код и без option explicit корректно работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2011, 16:12 |
|
|
start [/forum/topic.php?all=1&fid=60&tid=2158758]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
1ms |
others: | 324ms |
total: | 474ms |
0 / 0 |