powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / findnext(второй по счету?)
25 сообщений из 50, страница 1 из 2
findnext(второй по счету?)
    #37222993
justice85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в каждом листе(всего их 4) в первой ячейке стойт число "1" в след(нижний) ячейке "2" и т.д ... до 20, но среди них встречается еще одна "2". Нужно ее "переставить"(в соседний столбец) из списка.

как написать используя sheets(i) и findnext




help(из excel.xls) хорошо прочитал, но трудно через неё составить свой код и там не указан "второй по счету findnext"

если решу, напишу...

заранее спасибо
...
Рейтинг: 0 / 0
findnext(второй по счету?)
    #37223446
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justice85там не указан "второй по счету findnext"
если запустить два раза - будет второй по счету.

а вообще - давай конкретику, что не получается, а то писать за тебя всю программу, как видно, ни у кого желание не возникло.
...
Рейтинг: 0 / 0
findnext(второй по счету?)
    #37223820
justice85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 не уместен
...
Рейтинг: 0 / 0
findnext(второй по счету?)
    #37223870
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justice85нужно именно без "запустить два раза "это что, такое условие задачи? Почему нельзя?

justice85правильные(работающие) коды:
Range("a1:a10").Find("2", LookIn:=xlFormulas).Activate
Cells.FindNext(After:=ActiveCell).Activate
__
comment: при "бегущем" Worksheets(i) наш activate не уместен
Ну правильно - так правильно. Просто не надо использовать Activate
Код: plaintext
1.
2.
3.
Dim found As Range
Set found = Worksheets( 1 ).Range("a1:a10").Find("2", LookIn:=xlFormulas)
Set found = Worksheets( 1 ).Cells.FindNext(After:=found)
found.Interior.ColorIndex =  3 
...
Рейтинг: 0 / 0
findnext(второй по счету?)
    #37223962
justice85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за After:=found "Shocker.Pro

как теперь понимать то что он находит т.е. как понимать found (англ.перевод знаю)
как скорректировать?:
found.cut
found.Paste Destination:=Worksheets(i).Range("B1")

еррор: object required
...
Рейтинг: 0 / 0
findnext(второй по счету?)
    #37223969
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justice85Спасибо за After:=found "Shocker.Pro

как теперь понимать то что он находит т.е. как понимать found (англ.перевод знаю)
как скорректировать?:
found.cut
found.Paste Destination:=Worksheets(i).Range("B1")

еррор: object required

Может следовало бы сначала изучить основы программирования и языка?
found - это переменная, которую я сам и объявил. Я мог назвать ее "хрен" - это не меняет сути дела.
Тип этой переменной диапазон ячеек. В данном случае - найденный.

Copy/Paste не стоит использовать для таких целей - зачем буфер обмена забивать?

Код: plaintext
Worksheets(i).Range("B1")=found
...
Рейтинг: 0 / 0
findnext(второй по счету?)
    #37224367
justice85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по поводу 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)
...
Рейтинг: 0 / 0
findnext(второй по счету?)
    #37224412
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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)
да, в простом случае
можно использовать всякие изощрения, но в данном случае в них нет смысла
...
Рейтинг: 0 / 0
findnext(второй по счету?)
    #37224501
justice85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 вторую двойку
...
Рейтинг: 0 / 0
findnext(второй по счету?)
    #37224551
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 курсор должен стоять внутри процедуры
ну или выложи файл, в котором не работает.
...
Рейтинг: 0 / 0
findnext(второй по счету?)
    #37224590
justice85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
src
файл
src
...
Рейтинг: 0 / 0
findnext(второй по счету?)
    #37224663
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так это.
В твоем файле двойки нет вообще.
Первый поиск ее не находит.
Соответственно, на втором поиске возникает ошибка, так как found=Nothing в этот момент.
Если предполагаются такие ситуации, естественно, нужно вводить проверки после поисков, а нашлось ли чего либо.
...
Рейтинг: 0 / 0
findnext(второй по счету?)
    #37224738
justice85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Верно. на счет "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
...
Рейтинг: 0 / 0
findnext(второй по счету?)
    #37224768
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justice85Ну все вроде:
Ну не все. Код так и не научился правильно оформлять, неужели так сложно нажать кнопку "цитировать"?

justice85
Код: plaintext
With i

Оригинальный ход.
А для чего это, поделись опытом ))
...
Рейтинг: 0 / 0
findnext(второй по счету?)
    #37224892
justice85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторtop encryption secret
...
Рейтинг: 0 / 0
findnext(второй по счету?)
    #37225441
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
Ну правильно - так правильно. Просто не надо использовать Activate
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Function FoundSecond(WhatFound As String) as Long
Dim found As Range
Set found = Worksheets( 1 ).Range("a1:a10").Find(WhatFound, LookIn:=xlFormulas)
If found Is Nothing Then
  FoundSecond =  0 
  Exit Function ' emergency exit
End If
Set found = Worksheets( 1 ).Cells.FindNext(After:=found)
FoundSecond = found.Row
End Function
Worksheets(1)A1122334455667788991010

Код: plaintext
1.
?FoundSecond( 2 )
  2  
...
Рейтинг: 0 / 0
findnext(второй по счету?)
    #37226431
justice85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В самом первом посту я хотел автор"переставить"(в соседний столбец)

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) ?
...
Рейтинг: 0 / 0
findnext(второй по счету?)
    #37226442
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justice85авторWorksheets(i).Cells(a, b).Cut
Worksheets(i).Range("B1").Select
ActiveSheet.Paste

т.к. мне в действительности нужно через параметры a,b где(a = found.Row, b = found.Column)

ну и кто мешает?
Код: plaintext
Worksheets(i).Range("B1")=Worksheets(i).Cells(a, b)

justice85еще один вопрос:как поставить на "B1" при "бегущем" Worksheets(i) ?
что поставить?
...
Рейтинг: 0 / 0
findnext(второй по счету?)
    #37226588
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
findnext(второй по счету?)
    #37226716
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скукотищаShocker.Pro,
загляни под крышечку спойлер
заглядывал, это не прояснило мне суть вопроса автора.
...
Рейтинг: 0 / 0
findnext(второй по счету?)
    #37226793
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
а суть своего ответа прояснило?
поиск отработат неправильно
-если искомое значение встречается в диапазоне один раз;
-если искомое значение встречается более одного раза и одно из вхождений - первая ячейка диапазона.
...
Рейтинг: 0 / 0
findnext(второй по счету?)
    #37226912
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты меня вообще запутал.
Я оставил на совести автора доделки, дав ему только удочку (ибо я - не Скукотища)
Ты ему сделал нормальную законченную функцию, которая возвращает Row.

Но что ТЫ хотел сказать МНЕ я не понял.
...
Рейтинг: 0 / 0
findnext(второй по счету?)
    #37226917
justice85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 ?
...
Рейтинг: 0 / 0
findnext(второй по счету?)
    #37226932
justice85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Огромное спасибо Shocker.Pro
...
Рейтинг: 0 / 0
findnext(второй по счету?)
    #37226948
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProТы ему сделал нормальную законченную функцию, которая возвращает RowФункция не нормальная. Тот топик был исключительно для тебя.
Shocker.ProНо что ТЫ хотел сказать МНЕ я не понял.Хотел сказать, что с .Find не всё так просто, как кажется.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
' Простой код, который "должен" найти строку последнего вхождения двойки в заданном диапазоне, сваливается в бесконечный цикл
Dim r As Range,f As Range, mRow&

Worksheets( 1 ).Cells( 1 , 1 ) =  1 
Worksheets( 1 ).Cells( 2 , 1 ) =  2 
Worksheets( 1 ).Cells( 3 , 1 ) =  3 
Set r = Worksheets( 1 ).Range("A1:A3")

Set f = r.Find( 2 , ,xlValues, xlWhole)
Do Until f Is Nothing
  mRow = f.Row
  Set f = r.FindNext(f)
Loop
Debug.Print mRow
...
Рейтинг: 0 / 0
25 сообщений из 50, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / findnext(второй по счету?)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]