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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.09.2011, 08:24   #11
0creator0
Пользователь
 
Регистрация: 13.05.2010
Сообщений: 94
По умолчанию

Hugo121 спасибо Боьшое ,сам бы не понл что надо убрать Offset(0, 1) , сейчас буду разбераться как это влияет. Огромное спасибо!
0creator0 вне форума Ответить с цитированием
Старый 14.09.2011, 09:29   #12
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Да оффсет при стирании ни при чём, это всего лишь сдвиг на один столбец правее.
Там вина в том, что стираете до взятия в массив, и ориентируетесь не по тому столбцу.
Вообще, как я понял, Вы брали чужой код, где оффсет использовался потому, что крайний справа столбец не имел данных в последней строке нужного диапазона. Поэтому низ диапазона определяли по одному столбцу, а стирали (и брали в массив) область на 1 столбец правее.
В Вашем примере оффсет ни к чему, вообще строку
x = Range([A2], Cells(Rows.Count, 8).End(xlUp).Offset(0, 1))
можно записать так:
x = Range([A2], Cells(Rows.Count, 9).End(xlUp))
Оставил просто потому, что не мешает - вдруг всёже на реальных данных важно?
Т.е. тут диапазон получается одинаковый, но последняя строка определяется по разным столбцам. А в примере эти оба столбца по количеству данных одинаковы.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 14.09.2011, 23:05   #13
0creator0
Пользователь
 
Регистрация: 13.05.2010
Сообщений: 94
По умолчанию

И снова с нелегким вопросом обращаюсь за помощью, пол дня промучился, не пойму где засела ошибка :
Цитата:
ReDim c(1 To unique.Count, 1 To 6):
Application.ScreenUpdating = False
On Error Resume Next
For n = 1 To unique.Count
For m = 1 To UBound(b)

Происходит перебор там где есть знак «=» :
Цитата:
If InStr(b(m, 3), "l=") > 0 Then
Все правильно происходит, кроме одного одинаковые строчки, но с разными c(n, 4) - почему то не суммируются. c(n, 5) и (n, 6) отсутствуют так как эти ячейки где был знак равно должны быть пусты.
Цитата:
If unique(n) = b(m, 2) & "\" & b(m, 3) Then c(n, 1) = Trim(Split(b(m, 3), "l=")(0)) & _
Chr(10) & b(m, 5): c(n, 2) = b(m, 2): c(n, 4) = c(n, 4) + (Trim(Split(b(m, 3), "l=")(1)) / 1000) * b(m, 4)
А там где нету знака равно, все происходит правильно, одинаковые строчки друг с другом суммируются
Цитата:
Else
If unique(n) = b(m, 2) & "\" & b(m, 3) Then c(n, 1) = b(m, 3) & _
Chr(10) & b(m, 5): c(n, 2) = b(m, 2): c(n, 4) = c(n, 4) + b(m, 4): _
c(n, 5) = b(m, 6): c(n, 6) = c(n, 6) + b(m, 7)
End If
Next m: Next n
Подскажите что здесь я на мудрил???
0creator0 вне форума Ответить с цитированием
Старый 14.09.2011, 23:16   #14
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Так непонятно, в чём причина. Давайте код в файле.
Да и читать так оформленный код невозможно - я в редактор закинул, чтоб понять. Вроде правильно...
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 14.09.2011, 23:34   #15
0creator0
Пользователь
 
Регистрация: 13.05.2010
Сообщений: 94
По умолчанию

Происходит все действие на листе «Сумма»
Вложения
Тип файла: rar Лист Сумма.rar (70.9 Кб, 11 просмотров)
0creator0 вне форума Ответить с цитированием
Старый 14.09.2011, 23:38   #16
0creator0
Пользователь
 
Регистрация: 13.05.2010
Сообщений: 94
По умолчанию

Я уже и c(n, 5) =0: c(n, 6) =0 дал нули но все равно, не хочет складывать значение из которых извлекался знак «=».
0creator0 вне форума Ответить с цитированием
Старый 15.09.2011, 10:16   #17
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Ну навернули...
Мне кажется, что суммирование можно проще сделать, вообще всё проще...
На словаре можно сделать без цикла в цикле - будет быстрее.
Но нужно вникать, может быть и не прав.
Ну а с суммированием может быть так нужно?

Код:
    For n = 1 To unique.Count
        For m = 1 To UBound(b)
         If InStr(b(m, 3), "l=") > 0 Then
                    If unique(n) = b(m, 2) & "\" & b(m, 3) Then
                    c(n, 1) = Trim(Split(b(m, 3), "l=")(0)) & Chr(10) & b(m, 5)
                    c(n, 2) = b(m, 2)
                    c(n, 4) = c(n, 4) + (Trim(Split(b(m, 3), "l=")(1)) / 1000) * b(m, 4)
                    c(n, 5) = 0
                    c(n, 6) = 0
                    End If
            Else
                    If unique(n) = b(m, 2) & "\" & b(m, 3) Then
                    c(n, 1) = b(m, 3) & Chr(10) & b(m, 5)
                    c(n, 2) = b(m, 2)
                    c(n, 4) = c(n, 4) + b(m, 4)
                    c(n, 5) = c(n, 5) + b(m, 6)
                    c(n, 6) = c(n, 6) + b(m, 7)
                    End If
                  End If
        Next m, n
P.S. Сейчас цитирование кода курсивом выглядит терпимо, но на моём домашнем мониторе читать было невозможно... вероятно стоит поменять монитор....
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 15.09.2011 в 10:19.
Hugo121 вне форума Ответить с цитированием
Старый 15.09.2011, 10:52   #18
0creator0
Пользователь
 
Регистрация: 13.05.2010
Сообщений: 94
По умолчанию

Ну да с кодом наворочено, согласен, но когда смотришь вроде все правильно, но все равно не хочет считать
Там где одинаковые строчки, он почему-то не складывает, хотя код написан почти такой же
Цитата:
c(n, 1) = Trim(Split(b(m, 3), "l=")(0)) & Chr(10) & b(m, 5)
c(n, 2) = b(m, 2)
c(n, 4) = c(n, 4) + (Trim(Split(b(m, 3), "l=")(1)) / 1000) * b(m, 4)
c(n, 5) = 0
c(n, 6) = 0
Как и во втором но, во втором случае он складывает одинаковые строчки,
Цитата:
c(n, 1) = b(m, 3) & Chr(10) & b(m, 5)
c(n, 2) = b(m, 2)
c(n, 4) = c(n, 4) + b(m, 4)
c(n, 5) = b(m, 6)
c(n, 6) = c(n, 6) + b(m, 7)
Получается, что в эту функцию вставлять Split вставлять нельзя что ли?
Изображения
Тип файла: jpg Untitled.jpg (136.1 Кб, 144 просмотров)
0creator0 вне форума Ответить с цитированием
Старый 15.09.2011, 11:06   #19
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Так Вы же сами задаёте:
Код:
         If InStr(b(m, 3), "l=") > 0 Then
...
...
               c(n, 5) = 0: c(n, 6) = 0
Хотя полностью "въехать" не могу... работа...
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 15.09.2011 в 11:08.
Hugo121 вне форума Ответить с цитированием
Старый 15.09.2011, 11:16   #20
0creator0
Пользователь
 
Регистрация: 13.05.2010
Сообщений: 94
По умолчанию

Ну я их и убирал т. е записывал
Цитата:
ReDim c(1 To unique.Count, 1 To 6):
и интервал делал другим

Цитата:
(1 To unique.Count, 1 To 4):
Цитата:
Application.ScreenUpdating = False
On Error Resume Next
For n = 1 To unique.Count
For m = 1 To UBound(b)
If InStr(b(m, 3), "l=") > 0 Then
If unique(n) = b(m, 2) & "\" & b(m, 3) Then
c(n, 1) = Trim(Split(b(m, 3), "l=")(0)) & Chr(10) & b(m, 5)
c(n, 2) = b(m, 2)
c(n, 4) = c(n, 4) + (Trim(Split(b(m, 3), "l=")(1)) / 1000) * b(m, 4)
End If
Else
If unique(n) = b(m, 2) & "\" & b(m, 3) Then
c(n, 1) = b(m, 3) & Chr(10) & b(m, 5)
c(n, 2) = b(m, 2)
c(n, 4) = c(n, 4) + b(m, 4)
End If
End If
Next m, n
Все равноне хочте складывать там где работает функция Split
0creator0 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Аналог Split в Delphi? apromix Помощь студентам 6 21.09.2010 22:17
Split Text ZuBy Общие вопросы Delphi 6 27.06.2010 01:47
Split(); Alex_sim Общие вопросы .NET 2 08.05.2010 20:03
Расширенная версия функции Split Aent Microsoft Office Excel 0 07.05.2010 01:40