Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2011, 21:28   #1
Dog_DinGo
Пользователь
 
Аватар для Dog_DinGo
 
Регистрация: 16.02.2011
Сообщений: 36
По умолчанию копирование и вставка данных в заданном порядке

Sub ProrisovkaFO()
Sheets.Add
j = ActiveSheet.Name
Worksheets(j).Name = "TEST"
For i = 9 To 80
If Worksheets("ОТЧЁТ").Cells(i, 2) <> 0 Or Worksheets("ОТЧЁТ").Cells(i, 7) <> 0 _
Or Worksheets("ОТЧЁТ").Cells(i, 10) <> 0 Or Worksheets("ОТЧЁТ").Cells(i, 13) <> 0 Then _
Worksheets("ОТЧЁТ").Cells(i, 1).Copy Worksheets("TEST").Cells(i, 1)
Next i
End Sub

Есть такой макрос...
надо сделать так, чтобы в ЛИСТ ТЕСТ данные вставлялись по порядку... придать цикличность вставки данных в лист ТЕСТ

за место i должна быть друггая переменная как я понимаю.. но как это сделать
Dog_DinGo вне форума Ответить с цитированием
Старый 24.03.2011, 21:53   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Два варианта - перед копированием увеличиваете переменную x, и копируете в
Worksheets("TEST").Cells(x, 1)

Или - каждый раз перед копированием определяйте
iLastRow = Worksheets("TEST").Cells(Rows.Count , 1).End(xlUp).Row
и копируете в
Worksheets("TEST").Cells(iLastRow+1 , 1)

Ещё - если в ячейках, где <>0 подразумеваются цифры, то быстрее будет проанализировать на >0 их сумму.

Код:
Sub ProrisovkaFO()
Dim x as Long
    Sheets.Add
    j = ActiveSheet.Name
    Worksheets(j).Name = "TEST"

    With Worksheets("ОТЧЁТ")
        For i = 9 To 80
            If Application.Sum(.Cells(i, 2), .Cells(i, 7), .Cells(i, 10), .Cells(i, 13)) > 0 Then
                x = x + 1
                .Cells(i, 1).Copy Worksheets("TEST").Cells(x, 1)
            End If
        Next i
    End With
End Sub
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 24.03.2011 в 22:14.
Hugo121 вне форума Ответить с цитированием
Старый 24.03.2011, 22:03   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

может так:
r = 1
For i = 9 To 80
If Worksheets("ОТЧЁТ").Cells(i, 2) <> 0 Or Worksheets("ОТЧЁТ").Cells(i, 7) <> 0 _
Or Worksheets("ОТЧЁТ").Cells(i, 10) <> 0 Or Worksheets("ОТЧЁТ").Cells(i, 13) <> 0 Then
Worksheets("ОТЧЁТ").Cells(i, 1).Copy Worksheets("TEST").Cells(r, 1)
r = r+1
end if
Next i
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 24.03.2011 в 22:05.
IgorGO вне форума Ответить с цитированием
Старый 24.03.2011, 22:20   #4
Dog_DinGo
Пользователь
 
Аватар для Dog_DinGo
 
Регистрация: 16.02.2011
Сообщений: 36
По умолчанию

Спасибо, всем...

вариант IgorGo будет оптимальнее... и проще... а я за простые решения =)
Dog_DinGo вне форума Ответить с цитированием
Старый 24.03.2011, 22:25   #5
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

И чем же он проще? 1:1 как мой по сути, только букв больше
Хотя если цифры могут быть отрицательные, или это не цифры - тогда суммировать нельзя.
И кстати вместо Application.Sum() можно просто плюсов понаставлять...
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 24.03.2011 в 22:27.
Hugo121 вне форума Ответить с цитированием
Старый 24.03.2011, 22:40   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
Хотя если цифры могут быть отрицательные, или это не цифры
цифры в десятичной системе это 0, 1, 2 ... 9. Они не бывают отрицательными. отрицательные цифры - это числа.
Hugo121,
эти ифы
If Worksheets("ОТЧЁТ").Cells(i, 2) <> 0 Or Worksheets("ОТЧЁТ").Cells(i, 7) <> 0 _
Or Worksheets("ОТЧЁТ").Cells(i, 10) <> 0 Or Worksheets("ОТЧЁТ").Cells(i, 13) <> 0 Then
Worksheets("ОТЧЁТ").Cells(i, 1).Copy Worksheets("TEST").Cells(r, 1)
и
If Application.Sum(.Cells(i, 2), .Cells(i, 7), .Cells(i, 10), .Cells(i, 13)) > 0 Then

проверяют разные условия.
и потом - я лишь чуть-чуть поправил исходный код автора, а ты его безжалостно покромсал... какой бы вариант ты выбрал будучи на месте Dog_DinGo? ответ довольно очевиден))) это психология...
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 24.03.2011, 22:54   #7
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Ну да - цифры/числа - обычное дело... согласен, неверно выразился.
А по условиям (если положительные числа) - суть одна проверяется: если хоть одно число <>0 (т.е. >0), то копируем.
Но если нужно копировать и тогда, когда вместо 0 есть запись "Злостный должник" - тогда нужно каждую на <>0 проверять...
Ну не нравится мне нагромождение OR... Сам стараюсь избегать.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 24.03.2011, 23:12   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
А по условиям (если положительные числа)
из каких исходных следует это условие?

Cells(i, 2) <> 0 Or Cells(i, 7) <> 0 Or Cells(i, 10) <> 0 Or Cells(i, 13) <> 0
и
Sum(.Cells(i, 2), .Cells(i, 7), .Cells(i, 10), .Cells(i, 13)) > 0
дадут разные разультаты при
Cells(i, 2) = -1
Cells(i, 7) = 0
Cells(i, 10) = 0
Cells(i, 13) = 0
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 24.03.2011, 23:19   #9
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

из каких исходных - предположил исходя из практики
В 90% анализируют положительные числа.
И вполне начинающий может положительные проверять на <>0
Я только предложил, как вариант попрозрачней, с оговоркой (чуть правда запоздалой...)
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 24.03.2011, 23:47   #10
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Dog_DinGo уже уснул, наверное... а мы все еще копья ломаем)))
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переход по нажатию ENTER в заданном порядке Dog_DinGo Microsoft Office Excel 9 28.02.2011 12:18
Поиск значения в заданном диапазоне данных Варвар Microsoft Office Excel 2 21.01.2011 11:23
Копирование и вставка данных как значение. Shkoda Microsoft Office Excel 1 10.07.2010 13:51
Копирование и вставка текста Lemo Общие вопросы Delphi 1 01.07.2010 21:13
Копирование и вставка значений tae1980 Microsoft Office Excel 7 29.05.2009 09:15