|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
14.12.2010, 15:38 | #1 |
Пользователь
Регистрация: 12.11.2010
Сообщений: 83
|
Вывод данных на другой лист в рабочей книге
Суть программы в том, что есть лист (Лист4), в
этом листе 3 столбца, 1-й код клиента, 2-й стомость покупки, 3-й сумму которую клиент заплатил. Необходимо на другой лист (Лист5) перенести код клентов, у которых задолженность более 1000 руб (2 столбец -3 столбец). Вот код программы, которую я написал, у меня программа переносит клиентов у которых задолженность более 1000 руб., однако есть пробелы между клиентами, которых быть не должно, а также если задолженность равна 0, то код клиента все равно отражается, почему не понятно. Public Sub Пример12() Dim Kodklienta As Integer, i As Integer, j As Integer With Worksheets("Лист4").Range("A3") Kodklienta = Range(.Offset(1, 0), .End(xlDown)).Rows.Count Dolg = 0 For i = 1 To Kodklienta Dolg = .Offset(i, 1) - .Offset(i, 2) For j = 1 To Kodklienta kod = .Offset(i, 0) Next j With Worksheets("Лист5").Range("A3") Ostatok = Range(.Offset(0, 1), .End(xlToRight)).Columns.Count If Dolg > 1000 Then .Offset(i, Ostatok) = Dolg If .Offset(i, Ostatok) = Dolg Then .Offset(i, 0) = kod End With Next i End With End Sub Последний раз редактировалось Palomnik1096; 14.12.2010 в 15:43. |
14.12.2010, 16:30 | #2 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Вот это точно лишний цикл
Код:
webmoney: E265281470651 Z422237915069 R418926282008
Последний раз редактировалось Hugo121; 14.12.2010 в 16:33. |
14.12.2010, 20:15 | #3 |
Форумчанин
Регистрация: 02.02.2009
Сообщений: 842
|
А если так?
С уважением, Алексей.
Последний раз редактировалось tae1980; 14.12.2010 в 20:25. |
15.12.2010, 02:32 | #4 |
Пользователь
Регистрация: 12.11.2010
Сообщений: 83
|
спасибо, так намного понятнее и видимо правильнее!!!
|
16.12.2010, 09:28 | #5 |
Пользователь
Регистрация: 12.11.2010
Сообщений: 83
|
Сделал сам с помощью цикла For ... Next
Public Sub Пример12() Dim Kodklienta As Integer, Stoimost As Integer, Vyplata As Integer With Worksheets("Лист4").Range("A3") kod = Range(.Offset(1, 0), .End(xlDown)).Rows.Count qwe = 0 For i = 1 To kod Stoimost = .Offset(i, 1) Vyplata = .Offset(i, 2) Dolg = Stoimost - Vyplata kodkl = .Offset(i, 0) If Dolg > 1000 Then qwe = qwe + 1 Worksheets("Лист5").Range("B3").Off set(qwe, 0) = Dolg Worksheets("Лист5").Range("A3").Off set(qwe, 0) = kodkl End If Next i End With End Sub |
16.12.2010, 23:42 | #6 | |
Форумчанин
Регистрация: 02.02.2009
Сообщений: 842
|
Цитата:
Система координат (СК). Существуют два типа СК: абсолютные и относительные. Относительные СК - это те которые ведет отсчет от каких либо ближайших ориентиров, а изменения координат записываются любим способ описывающим смещением объектов от ориентиров, или раннее описанных объектов. Они удобны для локальных пространств, и как правило применяются для сильно ограниченных объектов (содержащих ограниченное число точек (объектов)). Их преимущество в гибкости, объекты записанные (описанные) в подобных СК без особых проблем и потери точности можно привязать к любым абсолютным СК и связать между собой (если при описании объектов соблюдались ряд правил). Минус в том, что любое изменение влияет на ВЕСЬ объект (зачастую фатально) и как следствие нужно пересчитывать ВСЕ с нулю. Если объект большой (или это огромная цепочка объектов) то подобный пересчет весьма затруднителен, даже с использованием ЭВМ. А так же велика вероятность ошибки, так их очень ТРУДНО отслеживать. Абсолютные СК - имеет одну единую точку взятую за ноль, а координаты объектов записываются в некой мере смещений от нулевой точки. Это глобальные системы, любая крупная сеть объектов должна иметь абсолютную СК. Минус систем в том, что перевод из одной СК в другую, может быть весьма проблематичен, и иметь в сложных случаях коэффициент не точности. Плюс же в том, что можно создавать единый СК. Что позволяет без каких либо дополнительных расчетов объединять неограниченное количество совершенно разных объектов и информации. Обработка данных становиться более легкой и наглядной, а алгоритмы упрощаются. Появляется понятие - стандарт. Ты упорно используешь относительную СК ".Offset(i, 1)". Тогда как я стараюсь всегда стараюсь работать в абсолютной СК "cells(1,1)". В первую очередь из-за наглядности кода, поиск ошибок значительно упрощается, система ведет себя предсказуемо, тогда как при относительной СК заранее быть уверенным в результате нельзя - появляются факторы которые ты не контролируешь. Range("B3") - относится к абсолютной СК, но следует избегать использования такой адресации, так как подобные вид кода труднее воспринимается человеком, и сложнее поддает модернизации. Прекрати использовать обращение вида "Worksheets("Лист5")". Обращайся к листу в текущей книге по кодовому имени, это даст независимость от пользователя, будет занимать меньше места, что благоприятно скажется на читаемости когда (строки бывают ох какие длинные и мудреные). Упростить модернизацию кода в будущем, да и это проще для восприятия, что так же не мало важно. Константы вместо цифр. ВЕЗДЕ где можно следует заменять цифры константами, и описывать их в начале когда. Это сделает код гибче, и позволит вносить изменения без серьезных исправлений самого кода. А так же повысится его читаемость. Например, что ты будешь делать если потребуется выявить клиентов с задолженностью в 2000 или 900 рублей? :)) Имена переменных. Переменным лучше давать сложные составные имена. Так как простые имена не отображаются всех особенностей содержащейся в переменной информации. Например: "Stoimost" Это стоимость чего? Или "Dolg" - это чей долг (фирмы, партнера, банка или долг по зарплате)? Переменные следует разбивать на группы, объединяя их по главному общему признаку, при это общий признак должен находиться в начале названия переменной. Например: КлиентСтоимость, КлиентДолг, КлиентТоварКолво, ФирмаДолг, СкладТоварКолво СкладТоварСтоимость и т.п. Соблюдение этого правили будет особенно полезно, если ты собираешься развивать программу и код. В отдельных случаях удобно отображать в имени переменной ее тип, ставя первым знаком английскую букву - первую букву типа переменной (s, b, d, i и т.п.) Все описанное я отразил в приведенном выше примере.
С уважением, Алексей.
Последний раз редактировалось tae1980; 16.12.2010 в 23:55. |
|
17.12.2010, 07:02 | #7 |
Пользователь
Регистрация: 12.11.2010
Сообщений: 83
|
Огромное спасибо за разъяснения, теперь стало намного понятнее, в чем отличие Аб.ссылок от От. ссылок. Дело в том, что я программированием в VBA занимаюсь всего 4 месяца (программированием вообще никаким ранее не занимался). Учусь по книге Кристиана Олбрайта,видимо просто стиль программирования указанный в книге сильно влияет на меня (он в основном работает через offset), поэтому это отражается в написании программ. Есть еще одна книга по которой учусь автор Мак-Федрис, вот у него стиль более похож на твой, у него в основном используется Cells. Но поскольку начал обучение с первой книги, то пока видимо придется работать с offset, одновременно учась использовать cells.
Общая разница в наших программах я так понял в том, что мою можно применить только к конкретным листам книги, твою можно использоать в любой открытой книге и листе. Поскольку изучаю все сам, а подсказать, как всегда некому, то приходится мучиться, чтобы родить что-то хорошее похожее на программу. Я только меся назад понял чем метод от свойства отличается, поэтому не все так хорошо. Еще раз огромное спасибо!!! PS в твоем коде к сожалению так и не разобрался(( |
17.12.2010, 07:38 | #8 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
Данную задачу можно решить существенно проще, без использования каких либо циклов и переменных. Например, так:
Код:
Чем шире угол зрения, тем он тупее.
|
17.12.2010, 14:58 | #9 |
Форумчанин
Регистрация: 02.02.2009
Сообщений: 842
|
Интересный способ. Но через циклы мне как-то привычнее, так сказать ближе к телу. :))
С уважением, Алексей.
|
18.12.2010, 04:42 | #10 |
Пользователь
Регистрация: 12.11.2010
Сообщений: 83
|
дело в том, что по условиям задания требуется использовать цикл, а также чтобы не было формул, в выводимых ячейках!
однако за другой вариант все рвно спасибо! |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
перенос данных на другой лист | Jonny B | Microsoft Office Excel | 15 | 26.04.2011 09:16 |
Выбор и перенос данных в другой лист | sergey77 | Microsoft Office Excel | 6 | 17.08.2010 17:10 |
Поиск и вывод результата на другой лист!!! | Ilnour1986 | Microsoft Office Excel | 12 | 23.10.2009 11:38 |
по ткущему дню найти столбец, по месяцу - лист в другой книге | trochn | Microsoft Office Excel | 5 | 30.09.2009 19:28 |
Переброс данных на другой лист в таблицу | vodvorezlaya | Microsoft Office Excel | 1 | 06.06.2007 14:07 |