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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.11.2010, 16:17   #1
Verano naranjo
Пользователь
 
Регистрация: 24.02.2010
Сообщений: 25
По умолчанию Сравнение значений в 2 массивах

Народ, посмотрите, плз, что у меня с синтаксисом. Я не сильна в vba

Нужно сделать такую вещь:
1) На стр EI столбец B- необходимо перемещаться по столбцу вниз до последнего значения и при этом проверять, сколько раз каждое значение из этого столбца встречается в столбце A на стр DPS.
2) В случае, когда искомое значение наконец-то попадается в столбце A стр DPS, необходимо проверять, соответствует ли месяц (указан в соотв. ячейке справа от [j,A] стр DPS) месяцу, заданному из текстбокса.
3) Если месяц соответствует, то значение счетчика нужно записать в ячейку quantity напроотив соответствующего Enditem

нехитрая задача на перебор массива. На паскале я такое запросто напишу, а вот с vba хуже.

С вложениеями что-то странно происходит, напишите адрес-я скину файл, если нужно.

Пример кода:

PHP код:
Private Sub CommandButton1_Click()
Dim ijmonthScompeicompmonth As Integer
TextBox1
.Value month
Worksheets
("EI").Activate
ActiveSheet
.Range("B2").Activate
For 1 To 34
Cells
(iB).Value compei
0
Worksheets
("DPS").Activate
ActiveSheet
.Range("A2").Activate
    
For 1 To Endxl.Down
    
If Cells(jA) = compei Then
        
If Cells(jA).Offset(0, -1).Value month(monthThen
        S 
1
        Worksheets
("EI").Activate
        ActiveSheet
.Cells(iB).Offset(0, -1).Value S
        End 
If
    
End If
    
Next j
Next i
End Sub 
Verano naranjo вне форума Ответить с цитированием
Старый 29.11.2010, 16:40   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Cells(i, B) - не вижу чтобы В было присвоено какое-то значение. В = 0 - тут будет ошибка.
Cells(i, B) - это ячейка из i-го ряда, в колонке B. здесь В это не имя колонки, а ее номер, такой же как и номер ряда т.е.число. номера колонок начинаются с 1, а не с 0.
Вам подойдет Cells(i, 2) или Range("B" & i)
это несколько раз есть в коде. исправляйте.

чем реже в коде будет встречаться Activate - тем быстрее будет работать Ваш макрос.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 29.11.2010, 16:53   #3
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Может кавычки забылись?
Код:
Sub tt()
i = 10
Cells(i, "B").Select
End Sub
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 29.11.2010, 16:53   #4
Verano naranjo
Пользователь
 
Регистрация: 24.02.2010
Сообщений: 25
По умолчанию

Спасибо, IgorGo
PHP код:
    For 1 To Endxl.Down 
тормозит на этой штуке: я хотела сказать, с j 1 до последней непустой ячейки. Тоже ошибка?
Verano naranjo вне форума Ответить с цитированием
Старый 29.11.2010, 17:11   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

может со второй строки? в первой не шапка случайно?
for j = 2 to cells(2,1).end(xldown).row

я обычно вместо j R пишу, тогда cells(r,c) - понятно к кому я обращаюсь
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 29.11.2010, 17:27   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

не знаю какой лист активен в момент старта макроса поэтому 1 Activate оставил в коде
Код:
Private Sub CommandButton1_Click()
  Dim i, j, month, S, compei, compmonth As Integer ' удачное решение переменную назвать как стандартную функции, главное - потом все понятно
  TextBox1.Value = month
  Worksheets("EI").Activate
  With Sheets("DPS")
    For i = 1 To 34
      сells(i, 2).Value = compei ' видимо наоборот compei = сells(i, 2).Value
      S = 0
      For j = 2 To .Cells(2, 1).End(xlDown).Row
        If .Cells(j, 1) = compei Then
          If .Cells(j, 1).Offset(0, -1).Value = month(month) Then ' левее колонки А ничего нет - это ошибка. Видимо Offset(0, 1)
            S = S + 1
            Cells(i, B).Offset(0, -1).Value = S
          End If
        End If
      Next j
    Next i
  End With
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 30.11.2010, 11:06   #7
Verano naranjo
Пользователь
 
Регистрация: 24.02.2010
Сообщений: 25
По умолчанию

Private Sub CommandButton1_Click()
Dim i, j, curmonth, S, compmonth As Integer
Dim compei As String
TextBox1.Value = curmonth
Worksheets("EI").Activate
With Sheets("DPS")
For i = 2 To 38
compei = Cells(i, 2).Value
S = 0
Worksheets("DPS").Activate
For j = 2 To .Cells(2, 1).End(xlDown).Row
If .Cells(j, 1).Value = compei Then
.Cells(j, 1).Offset(0, 2).Value = compmonth
If curmonth = compmonth Then
S = S + 1
End If
Cells(i, 2).Offset(0, 1).Value = S
End If
Next j
Next i
End With
End Sub

Пример, как выглядят страницы: т.о. каждую ячейку из столбца Enditem стр EI нужно проверить на наличие в столбце Enditem в стр DPS, затем проверить соответствует ли значение в столбце month той же строки , что и проверенный enditem DPS , значение, вееденному вручную в текстбокс. Если да , то записываем знаение счетчика Quantity напротив проверяемого Enditem в листе EI

Пример страницы EI

Model Enditem Quantity
L42F BLJULHWJ32EQAB-AF-
L42F BLJULHWJ32EQAB-AG-
L42F BLJULHWJ32EQAB----
L42F BDBWLGWJ32EQAA--F-
L42F BLGULGWJ32EQAA--F-
L42F BDBWLGWJ32EQAA--G-
L42F BLGULGWJ32EQAA--G-
L42F BDBWLGWJ32EQA-----
L42F BLGULGWJ32EQA-----
L42F BDBWLEWJ32EQA-----
L42F BLGULEWJ32EQA-----

Пример стр DPS

End Item Actual: Offline Month
TDRNLFZT31EQA2-KDB 09.08.10 15:23 8
TDRNLFZT31EQA2-KDB 09.08.10 15:42 8
TDRNLFZT31EQA2-KDB 09.08.10 15:38 8
TDRNLFZT31EQA2-KDB 09.08.10 14:27 8
TDRNLFZT31EQA2-KDB 09.08.10 14:31 8
TDRNLFZT31EQA2-KDB 09.08.10 14:41 8
TDRNLFZT31EQA2-KDB 09.08.10 14:52 8
TDRNLFZT31EQA2-KDB 09.08.10 14:33 8
TDRNLFZT31EQA2-KDB 09.08.10 15:31 8
TDRNLFZT31EQA2-KDB 09.08.10 15:00 8
TDRNLFZT31EQA2-KDB 09.08.10 15:19 8
TDRNLFZT31EQA2-KDB 09.08.10 15:46 8
TDBNLJWT31EQA2DKDA 09.08.10 17:02 8
TDBNLJWT31EQA2DKDA 09.08.10 17:06 8
TDBNLJWT31EQA2DKDA 09.08.10 16:21 8
TDBNLJWT31EQA2DKDA 09.08.10 16:44 8
TDBNLJWT31EQA2DKDA 09.08.10 16:28 8
Verano naranjo вне форума Ответить с цитированием
Старый 30.11.2010, 11:06   #8
Verano naranjo
Пользователь
 
Регистрация: 24.02.2010
Сообщений: 25
По умолчанию

Код:
Private Sub CommandButton1_Click()
Dim i, j, curmonth, S, compmonth As Integer
Dim compei As String
TextBox1.Value = curmonth
Worksheets("EI").Activate
With Sheets("DPS")
For i = 2 To 38
compei = Cells(i, 2).Value
S = 0
Worksheets("DPS").Activate
For j = 2 To .Cells(2, 1).End(xlDown).Row
If .Cells(j, 1).Value = compei Then
.Cells(j, 1).Offset(0, 2).Value = compmonth
If curmonth = compmonth Then
S = S + 1
End If
Cells(i, 2).Offset(0, 1).Value = S
End If
Next j
Next i
End With
End Sub
Verano naranjo вне форума Ответить с цитированием
Старый 30.11.2010, 11:27   #9
Verano naranjo
Пользователь
 
Регистрация: 24.02.2010
Сообщений: 25
По умолчанию

PHP код:
checkei Cells(j1).Value 
Вот здесь застревает, говорит, несоответствие типов.

Но почему тогда вот здесь он все проглатывает и никаких ошибок не выдает
PHP код:
compei Cells(i2).Value 
Данные выглядят так
TDRNLFZT31EQA2-KDB
BLJULHWJ32EQAB-AG-

и так
TDRNLFZT31EQA2-KDB
TDRNLFZT31EQA2-KDB
TDRNLFZT31EQA2-KDB
TDRNLFZT31EQA2-KDB

тип данных стоит текст в файле, в коде- string
Verano naranjo вне форума Ответить с цитированием
Старый 30.11.2010, 11:36   #10
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Цитата:
Сообщение от Verano naranjo Посмотреть сообщение
PHP код:
checkei Cells(j1).Value 
Вот здесь застревает, говорит, несоответствие типов.

Но почему тогда вот здесь он все проглатывает и никаких ошибок не выдает
PHP код:
compei Cells(i2).Value 

Чему равно j?
Не 0?
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сравнение столбцов в Excel и подстановка значений Oleg77 Помощь студентам 2 06.02.2010 03:09
Сравнение листов в книге, и копирование значений Josser Microsoft Office Excel 10 22.07.2009 08:26
Сравнение значений с сортировкой Al_B Microsoft Office Excel 2 27.03.2009 20:41
Сравнение значений в ячейках и выдача результата в различиях tovruslan Microsoft Office Excel 1 02.12.2008 22:25