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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2011, 19:19   #1
thefair
Новичок
Джуниор
 
Регистрация: 15.05.2011
Сообщений: 4
Печаль Составление цикла в VBA Excle

Здравствуйте, я уже года как три не занимался (если занятия с выводом сообщений и не большой работой с массивами можно вообще назвать занятием, я больше пхп полюбил =)) VB 6.0, а VBA Excel вообще в глаза не видел Я не удивлюсь если никто не откликнется на мою просьбу, но все же может кому не лень будет написать небольшой код для простого алгоритма который я опишу ниже:

Есть документ, к примеру Книга1.xls, в ней есть два листа: Лист1 и Лист2 соответсвенно.

В первом листе есть пять колонок: Артикул | Наименование | Количество | Цена | Разница
Во втором листе две колонки: Артикул | Цена

A теперь суть алгоритма: Если ячейка в колонке Артикул первого листа равняется ячейке в колонке Артикул второго листа, то ячейка данной строки в колонке Разница первого листа должна равняться ячейке Цена из первого листа минус ячейка Цена из второго листа умноженная на ячейку колонки Количество первого листа и так для каждой строки.

Вот что по-идеи должно получиться:

Лист1


Лист2


После алгоритма
Лист1


Если не понятно, готов попытаться объяснить более подробно. Буду очень благодарен за каждый ответ, я бы отблагодарил финансово, но на WebMoney у меня осталось только пол доллара, если поможет отправлю тому кто напишет мне код работающего цикла (выполнение такого алгоритма я себе представляю выполнением цикла)
Изображения
Тип файла: jpg list1.jpg (35.7 Кб, 146 просмотров)
Тип файла: jpg list2.jpg (12.7 Кб, 145 просмотров)
Тип файла: jpg list1_after.jpg (36.8 Кб, 143 просмотров)

Последний раз редактировалось thefair; 15.05.2011 в 19:42.
thefair вне форума Ответить с цитированием
Старый 15.05.2011, 19:22   #2
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Цитата:
Если не понятно,
Конечно мало что понятно))
Вы бы лучше пример файла прикрепили
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 15.05.2011, 19:24   #3
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

А насчет циклов, посмотрите здесь Управляющие структуры ... Циклы
Очень тольково расписано и с примерами
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 15.05.2011, 19:47   #4
thefair
Новичок
Джуниор
 
Регистрация: 15.05.2011
Сообщений: 4
По умолчанию

Цитата:
Сообщение от VictorM Посмотреть сообщение
Конечно мало что понятно))
Вы бы лучше пример файла прикрепили
Пример экселевского файла я не прикрепляю, так как даже базу для составления цикла не могу написать, ну в упор я не знаю VBA, а именно как обращаться к той или иной ячейке определенной строки того или иного листа (Писал только на php и чуть-чуть на VB 6.0), а сейчас по работе понадобилось сделать такой макрос для упрощения работы. А вот скрины с тем, что должно получится я прикрепил в первом посте. и большое спасибо за линк!

Последний раз редактировалось thefair; 15.05.2011 в 19:54.
thefair вне форума Ответить с цитированием
Старый 15.05.2011, 20:02   #5
Depressive
Пользователь
 
Регистрация: 09.05.2011
Сообщений: 22
По умолчанию

Зачем именно нужен цикл?
не проще ли просто формулой?
Например, если второй лист называется "Лист2", то вставить в ячейку E2 на таблице "Лист1" такую формулу:
Код:
=(D2-Лист2!B2)*C2
затем размножить эту формулу копированием по столбцу "E"
Depressive вне форума Ответить с цитированием
Старый 15.05.2011, 20:11   #6
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Цитата:
Зачем именно нужен цикл?
не проще ли просто формулой?
Вот и я так подумал)))
Кстати, согласно Вашего алгоритма, в Е3 будет 1,5 а не 1 как у Вас на скрине
Вложения
Тип файла: zip Артикул.zip (1.6 Кб, 13 просмотров)
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499

Последний раз редактировалось VictorM; 15.05.2011 в 20:13.
VictorM вне форума Ответить с цитированием
Старый 15.05.2011, 20:37   #7
thefair
Новичок
Джуниор
 
Регистрация: 15.05.2011
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Depressive Посмотреть сообщение
Зачем именно нужен цикл?
не проще ли просто формулой?
Например, если второй лист называется "Лист2", то вставить в ячейку E2 на таблице "Лист1" такую формулу:
Код:
=(D2-Лист2!B2)*C2
затем размножить эту формулу копированием по столбцу "E"
все было бы хорошо, если бы не одно НО, во втором листе будет не две записи, а около 3000 и с кучей артикулов, и мне нужно, чтобы эта формула применялась только к тем строкам в которых совпадает артикул в первой колонке
Что-то типо:
Если ячейка A2 (Лист1) равняется Ячейке A2 (Лист2), то применяем формулу, если нет, то сравниваем ячейку А2 (Лист1) с ячейкой A3 (лист2) и т.д. пока формула не выполниться и точно такая же процедура с ячейкой А3 (Лист1)

Цитата:
Сообщение от VictorM Посмотреть сообщение
Кстати, согласно Вашего алгоритма, в Е3 будет 1,5 а не 1 как у Вас на скрине
Блин, хотел в скрине вписать не 0,5, а 0,6, получилось вверх знаний арифметики
thefair вне форума Ответить с цитированием
Старый 15.05.2011, 20:57   #8
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

можно SQL вообще без циклов
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 15.05.2011, 21:51   #9
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Код:
Sub start_sql()
Dim cn As ADODB.Connection, rs As ADODB.Recordset
Dim sCon As String
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset

  sCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.FullName _
  & ";Extended Properties=""Excel 8.0;HDR=No"";"
 cn.Open sCon
 If Not cn.State = 1 Then Exit Sub

sSql = "SELECT ([Лист1$A2:D65535].F4-[Лист2$A2:B65535].F2)*[Лист1$A2:D65535].F3" _
& " FROM [Лист1$A2:D65535] LEFT JOIN [Лист2$A2:B65535] ON [Лист1$A2:D65535].F1 = [Лист2$A2:B65535].F1"
   
  rs.Open sSql, cn, adOpenStatic, adLockReadOnly
With Worksheets("Лист1")
.Cells(2, 5).CopyFromRecordset rs
End With
rs.Close: cn.Close
Set cn = Nothing: Set rs = Nothing
End Sub
библиотека должна быть подключена
Microsoft ActiveX Data Objects Library
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 15.05.2011, 23:06   #10
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

К чему вообще макросы? ВПР Вам в помощь.
(D2-ВПР(Критерий;Таблица;Столбец;0))*C2
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
из Excle через Delphi в Mysql diman_never БД в Delphi 0 05.05.2011 09:50
Составление таблицы Smerchin Microsoft Office Excel 3 11.02.2011 09:14
Составление программ в VBA! Natalisaw Помощь студентам 2 05.01.2010 19:43
Переход от цикла к циклу не выходя из цикла (без multithreading) Qousio Общие вопросы C/C++ 2 16.05.2009 09:27
Оператор цикла с предусловием While. Оператор цикла с пост условием Repeat McMilin Помощь студентам 7 11.11.2007 14:10