Страницы: 1
RSS
VBA. Определение конца столбца по условию
 
Добрый день.
Имеется следующий код:
Код
Range("BF11").Select
    Range(Selection, Selection.End(xlDown)).Copy
    Range("BG11").PasteSpecial Paste:=xlPasteValues, SkipBlanks:=False

Он успешно копирует данные, все хорошо. В данном столбце имеется два типа данных: до какого-то момента план, после - факт. Все нормально, менять не планируется и не надо, но хотелось бы в данном коде внести изменение - не конец столбика, а слово "стоп", которое будет стопором для копирования первой части. Как необходимо изменить код, помогите пожалуйста?
 
Цитата
Валерий Кишин написал:
Как необходимо изменить код,
полностью
и чтобы код выполнил нужные вам действия (решил поставленную задачу) нужно описание этой задачи, а не пример бесполезного кода
Изменено: Ігор Гончаренко - 20.07.2021 12:32:34
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Валерий Кишин написал:
слово "стоп"
используйте find например
а хотите конкретного прислушайтесь:
Цитата
и чтобы код выполнил нужные вам действия (решил поставленную задачу) нужно описание этой задачи, а не пример бесполезного кода
Изменено: Mershik - 20.07.2021 12:37:01
Не бойтесь совершенства. Вам его не достичь.
 
Цитата
Валерий Кишин написал:
В данном столбце имеется два типа данных: до какого-то момента план, после - факт.
После ПЛАНА перед ФАКТОМ вставьте пустую ячейку.
PS А Вы пробовали, запускать макрос, если у Вас после ячейки BF11 будут все пустые ячейки?
Изменено: msi2102 - 20.07.2021 13:09:32
 
Окей, дельные советы, я ожидал, что все будет проще и можно решить данную задачу одной строкой

Цитата
После ПЛАНА перед ФАКТОМ вставьте пустую ячейку.
Нет, там формула которая может использоваться и в следующих итерациях копируются все данные

В таком случае пример и желаемый результат в приложении. Идея с файнд хорошая, можно поставить отметку по которой будет искаться последняя строка и задаваться массив копирования, но я не понял как втащить переменную в массив.
P.s. план не всегда план, там иногда странные написания и нужен весь столбец данных до факта
Изменено: Валерий Кишин - 21.07.2021 09:44:01
 
Получите. Распишитесь.
Код
Sub zzz()
    НомерСтроки = 2
    Do While Cells(НомерСтроки, 1) <> "" And Cells(НомерСтроки + 2, 1) <> ""
        Cells(НомерСтроки, 3) = Cells(НомерСтроки, 2)
    НомерСтроки = НомерСтроки + 2
    Loop
    Cells(НомерСтроки, 3) = Cells(НомерСтроки, 2)
    
End Sub

Компьютер никогда не заменит человека (©️ Hannibal Lecter)
 
Получил, расписался, но задача скопировать часть "план", которая может становиться больше или меньше, а не весь столбец, в этом и проблема.
 
Сделаю, чуть позже, ежели никто не опередит. Сейчас на телефоне. Неудобно )
Изменено: Сергей Евдокимов - 21.07.2021 10:53:37
Компьютер никогда не заменит человека (©️ Hannibal Lecter)
 
Цитата
Валерий Кишин написал:
что все будет проще и можно решить данную задачу одной строкой
Вы бы приложили файл формат которого соответствовал куску кода из первого сообщения, также в первом сообщении можно было сообщить, что данные идут через строку и было бы, проще. Так что все претензии к Вам.
Для того файла, что приложили в сообщении 5
Код
Sub Макрос2()
Dim x As Range
    For Each x In Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row)
        If LCase(x.Value) = "план" Then x.Offset(0, 2).Value = x.Offset(0, 1).Value
    Next
End Sub
 
Цитата
нужен весь столбец данных до факта
Для примера из сообщения #5
Сумма по столбцу В
Код
Sub SummaPlanFact()
Dim iLastRow As Long
iLastRow = Cells(Rows.Count, "A").End(xlUp).Row
Dim StrokaPlan As Long
Dim SummaPlan As Double
Dim SummaFact As Double
  StrokaPlan = Columns("A").Find("факт", , xlValues, xlWhole).Row
  SummaPlan = WorksheetFunction.Sum(Range("B1:B" & StrokaPlan - 2))
  SummaFact = WorksheetFunction.Sum(Range("B" & StrokaPlan & ":B" & iLastRow))
End Sub
 
Цитата
Для того файла, что приложили в сообщении 5
Как писал выше "P.s. план не всегда план, там иногда странные написания и нужен весь столбец данных до факта", поэтому вариант с задачей конца range по слову стоп наверно самый удобный
Цитата

Для примера из сообщения #5
Сумма по столбцу В
Так же не предусматривает изменение слова факт
Изменено: Валерий Кишин - 21.07.2021 10:34:35
 
Цитата
Валерий Кишин написал: задача скопировать часть "план", которая может становиться больше или меньше, а не весь столбец, в этом и проблема
т.е., если я правильно понял задачу, условия два:
1. Копируем только "план"
и
2. Копируем до слова "стоп" (в первой мессаге сие пожелание)
Верно ?
Код
Sub zzz()
    НомерСтроки = 2
    Do While Cells(НомерСтроки, 1) <> "стоп"
    If Cells(НомерСтроки, 1) = "план" Then
        Cells(НомерСтроки, 3) = Cells(НомерСтроки, 2)
    End If
    НомерСтроки = НомерСтроки + 1
    Loop
End Sub
Компьютер никогда не заменит человека (©️ Hannibal Lecter)
 
Сергей Евдокимов, получил второй раз и данный код отрабатывает свою задачу быстро и хорошо, спасибо большое

Код
Sub zzz()
    НомерСтроки = 2
    Do While Cells(НомерСтроки, 1) <> "стоп"
    If Cells(НомерСтроки, 1) <> "" Then
        Cells(НомерСтроки, 3) = Cells(НомерСтроки, 2)
    End If
    НомерСтроки = НомерСтроки + 1
    Loop
End Sub
 
Цитата
Сергей Евдокимов написал:
Копируем до слова "стоп"
Главное не забудьте поставить слово "стоп", а то может надолго повиснуть
Так без "стоп" до первого "факт"
Код
Sub Макрос2()
Dim x As Range
    For Each x In Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row)
        If LCase(x.Value) = "факт" Then Exit Sub
        If LCase(x.Value) <> "" Then x.Offset(0, 2).Value = x.Offset(0, 1).Value
    Next
End Sub
Страницы: 1
Наверх