Помогите пожалуйста с моей проблемкой в Excel.

Программирование на Visual Basic for Applications
bvitaly
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 16.05.2004 (Вс) 15:05

Помогите пожалуйста с моей проблемкой в Excel.

Сообщение bvitaly » 16.05.2004 (Вс) 15:35

Вообщем попробую по порядку.
Имеется прайс лист в нем более 6000 наименований и 4 вида цен на каждое.
Требуется произвести пересчет цен, допустим увеличить их на 10%,8%,7% и 6%.
Первая проблема в том, что цены в перемешку как в usd так и в руб.
Вторая, необходимо пропускать шапки групп товаров, они цветные и восстанавливать их в ручную долго.
Единожды это можно конечно и вручную сделать, но ассортимент и цены прайса меняются 2 - 3 раза в неделю.
Вобщем в идеале мечтается о макросе который этот прайс автоматом бы переделывал.
Я делал формулу которая при значении менее 30 принимала данные в ячейке за usd и в соответствии переводила их в рубли но это не всегда верно.
Может кто-нибудь посоветовать как это сделать?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.05.2004 (Вс) 16:03

А какая разница, в какой валюте делать пересчет цен?
Что же касается шапки, то способов пропускать ее несколько. Если шапка отличается только цветом, то использовать Cells.Interior.Color (да и вообще Cells.Interior). Но я бы советовал использовать различные стили для шапки и для данных.
Lasciate ogni speranza, voi ch'entrate.

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Сообщение Calvin » 16.05.2004 (Вс) 16:04

Опиши поконкретней, как эти данные расположены????
Видимо так?

Наименование Цена руб. Цена USD

Пиво
Балтика 1________25
Балтика 2________30
НеПиво
НеБалтика 1______35
НеБалтика 2______40

типа так?
И что ты хочешь видеть в содержимом ячейки - формулу, состоящую из предыдущей цены + % или просто уже измененное значение?
-Whose the motocycle, is this? -It`s a chopper, baby! -Whose chopper is this? -Zed`s! -Who is Zed? -Zed`s dead, baby, Zed`s dead! :-D

bvitaly
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 16.05.2004 (Вс) 15:05

Сообщение bvitaly » 16.05.2004 (Вс) 17:57

Расположение такое:
наименование I розн. I опт1 I опт2 I опт3 I
пиво--------------------------------------------------------------------
балтика----------------------------------------------------------------
пиво балтика №1 I 10р I 9р I 8р I 7р I
пиво балтика №3 I 10$ I 9$ I 8$ I 7$ I
пиво балтика №9 I 10р I 9р I 8р I 7р I

Смысл: шеф покупает и продает, я прайс переделываю. Чтоб продать цену надо увеличить :D .

По поводу разници я думаю очень даже ясно, надо чтоб люди знали в какой валюте им платить.

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Сообщение Calvin » 16.05.2004 (Вс) 18:32

Ну попробуй типа так:
(Допустим столбец с наименованием в столбце "А")
и цены нужно увеличить на 7%
Код: Выделить всё
i=2 ' точку отчета поставишь сам, какую нужно
Do while Cells(i,1)<>""
  if Cells(i,2).Value<>"" then
      for j=2 to 5
        Cells(i,j).Value=Cells(i,j).Value+Cells(i,j).Value*0.07
      next
  end if
i=i+1
Loop

правда не проверял, но вроде все нормально.......
Последний раз редактировалось Calvin 17.05.2004 (Пн) 8:12, всего редактировалось 1 раз.
-Whose the motocycle, is this? -It`s a chopper, baby! -Whose chopper is this? -Zed`s! -Who is Zed? -Zed`s dead, baby, Zed`s dead! :-D

bvitaly
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 16.05.2004 (Вс) 15:05

Сообщение bvitaly » 16.05.2004 (Вс) 19:50

:oops:
Последний раз редактировалось bvitaly 16.05.2004 (Вс) 19:52, всего редактировалось 1 раз.

bvitaly
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 16.05.2004 (Вс) 15:05

Сообщение bvitaly » 16.05.2004 (Вс) 19:51

Извините я попробовал но похоже все таки неразберусь :oops: . Неудобно, но я прилипил небольшой кусочик прайса, помогите пожалуйста. Я вообще то телефонами занимаюсь, поэтому поддерживать знания в разных областях некогда, уже многое забыл да и отстал, по этой же причине и времени нет постоянно над прайсом сидеть :? А очень бы хотелось что б все быстро формировалось :(
Т.Е старые цены прячем, чтоб не восстановить, новые оставляем. Проценты по столбцам разные и могут меняться.
Извините еще раз :oops:
Вложения
кусок.rar
(10 Кб) Скачиваний: 84

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Сообщение Calvin » 17.05.2004 (Пн) 8:12

Ну тогда вроде так:
Код: Выделить всё
i=6
Do while Cells(i,2)<>""
  if Cells(i,3).Value<>"" then
      for j=3 to 9 Step 2
        Cells(i,j).Value=Cells(i,j).Value+Cells(i,j).Value*0.07
      next
  end if
i=i+1
Loop

а если проценты разные по столбцам, то так
Код: Выделить всё
i=6
Do while Cells(i,2)<>""
  if Cells(i,3).Value<>"" then
      for j=3 to 9 Step 2
   if j=3 then
          prots=0.07
     Elseif j=5 then
          prots=0.1
     Elseif j=7 then
          prots=0.15
     Elseif j=9 then
          prots=0.2
   end if
        Cells(i,j).Value=Cells(i,j).Value+Cells(i,j).Value*prots
      next
  end if
i=i+1
Loop
-Whose the motocycle, is this? -It`s a chopper, baby! -Whose chopper is this? -Zed`s! -Who is Zed? -Zed`s dead, baby, Zed`s dead! :-D

bvitaly
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 16.05.2004 (Вс) 15:05

Сообщение bvitaly » 17.05.2004 (Пн) 16:10

Спасибо, почти работает :D
Правда цикл срывается в случайном месте с ошибкой выполнения 13 (несоответствие типа). В принципе программка действительно очень простая, сразу невнимателен был, теперь почти разобрался. Немного непонял следующее, в строке
Cells(i,j).Value=Cells(i,j).Value+Cells(i,j).Value*prots
то что в скобках (i,j) как считается?
Просто отладчик показывает что именно в этой строке происходит сбой.
Еще хотел поинтересоваться, можно ли перевести все цены в рубли, т.е вычислить в каком формате они записаны в ячейке и умножить на 30 если в usd? это необязательно, но так более наглядно.
Огромное спасибо за поддержку, надеюсь предоставится случай и мне в чем-нибудь вам помочь.

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Сообщение Calvin » 17.05.2004 (Пн) 17:02

Ошибка возникает видимо потому, что попадаются пустые ячейки и их формат нечисловой, предлагаю
Код: Выделить всё
        Cells(i, j).Value = Cells(i, j).Value + Cells(i, j).Value * prots

заменить на
Код: Выделить всё
        Cells(i, j).Value = Val(Cells(i, j).Value) + Val(Cells(i, j).Value) * prots

i - это номер строки
j - номер столбца
а чтобы перевести доллары в рубли, то так:
Код: Выделить всё
If Cells(i, j).NumberFormat = "0.00"" USD""" Then
Cells(i, j).Value = Val(Cells(i, j).Value) * 30
Cells(i, j).NumberFormat =  "0.00"" руб."""
end if
-Whose the motocycle, is this? -It`s a chopper, baby! -Whose chopper is this? -Zed`s! -Who is Zed? -Zed`s dead, baby, Zed`s dead! :-D

bvitaly
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 16.05.2004 (Вс) 15:05

Сообщение bvitaly » 17.05.2004 (Пн) 17:17

Да действително только что разобрался, проблема действительно в пустых ячейках. Про i и j то же дошло :D . сейчас попробую внести изменения. Надо же а я думал, что совсем все забыл :D

bvitaly
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 16.05.2004 (Вс) 15:05

Сообщение bvitaly » 17.05.2004 (Пн) 18:44

Cells(i, j).Value = Val(Cells(i, j).Value) + Val(Cells(i, j).Value) * prots
Интересно, но в данном случае все цены менее еденцы превращаются в 0.00 и в ячейках которые были пустыми появляется ноль.

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Сообщение Calvin » 17.05.2004 (Пн) 19:07

Я так подумал, что Val тут не совсем подходит, просто сделай ограничения на пустые ячейки и всё
-Whose the motocycle, is this? -It`s a chopper, baby! -Whose chopper is this? -Zed`s! -Who is Zed? -Zed`s dead, baby, Zed`s dead! :-D

bvitaly
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 16.05.2004 (Вс) 15:05

Сообщение bvitaly » 17.05.2004 (Пн) 20:07

Сделал так
2
i = 14
Do While Cells(i, 2) <> ""
If Cells(i, 3).Value <> "" Then
For j = 3 To 7 Step 2
If Cells(i, j).NumberFormat = "0.00"" USD""" Then
Cells(i, j).Value = (Cells(i, j).Value) * 30
Cells(i, j).NumberFormat = "0.00"" руб."""
End If
Next
End If
i = i + 1
Loop

3
i = 14
Do While Cells(i, 2) <> ""
If Cells(i, 3).Value <> "" Then
For j = 3 To 7 Step 2
If j = 3 Then
prots = 0.07
ElseIf j = 5 Then
prots = 0.1
ElseIf j = 7 Then
prots = 0.15
End If
Cells(i, j).Value = Val(Cells(i, j).Value) + Val(Cells(i, j).Value) * prots
Next
End If
i = i + 1
Loop

End Sub

Копеечных цен слава богу нет, поэтому все проходит отлично.
Огромное человеческое спасибо. :wink:

P.S Я специалист по ремонту GSM трубок, ксли вдруг что надо, обращайтесь буду рад помочь.


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 113

    TopList  
cron