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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 01.10.2013, 05:46   #61
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

Цитата:
Хотя почему не используете UDF?
СцепитьЕсли() что-то не доверяю уже...а вот почему забыл про VLOOKUPCOUPLE даже и не знаю. Только вот все равно опять придется таблицу сортировать прежде чем вызывать VLOOKUPCOUPLE.
Получается выгружать,сортировать,загружать и искать соответствие.
Ах да, и вот почему я от них отказался. Мне на листе нужны значения в ячейках,а не формулы,при копировании которых у меня все и падало. Получается если я запущу UDF функцию на листе,то вернусь к тому,от чего ушел. Если канеш не вызвать ее в макросе..... *ушел использовать VLOOKCPL в своем нубо-коде*
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!
SaLoKiN вне форума
Старый 01.10.2013, 06:38   #62
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

Я снова все переиграл >_<
Цитата:
Алгоритм таков:
-Выбор диапазона
-сборочка массива
-сортировка(наверно нужна,потому что иначе очередь формируется по мере нахождения маршрута)
-склейка
-вывод в нужную строку таблицы нужной строки склейки
Т.к. я выбираю диапазон у меня идет цикл по его границам, при каждой итерации я ищу только один маршрут. А кто не дает мне в рамках одного маршрута отсортировать как мне нужно,склеить и сразу вывести? никто! так и сделаю!!! тогда алгоритм таков:

*Выбор диапазона
*В пределах каждой итерации :
-Сборка,
-сортировка
- склейка
- вывод
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!
SaLoKiN вне форума
Старый 01.10.2013, 08:16   #63
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

Ура! Победа! Спасибо всем за помощь!
Вот мое детище...
Код:
Function CoolSort(Arr As Variant, ByVal N As Integer, ByVal Down As Integer, ByVal Up As Integer) As Variant
    ' сортировка двумерного массива по столбцу N
    Dim Check As Boolean, iCount As Integer, jCount As Integer, nCount As Integer
    ReDim tmpArr(1 To UBound(Arr, 2), 1 To 2) As Variant
            
        For i = Down To Up - 1
        For j = Down To Up - 2
         If Arr(j, N) < Arr(j + 1, N) Then
          'tmpArr(j) = SArr(iCount, jCount)
                tmpArr(1, 1) = Arr(j, N)
                tmpArr(1, 2) = Arr(j, 2)
                Arr(j, N) = Arr(j + 1, N)
                Arr(j, 2) = Arr(j + 1, 2)
                Arr(j + 1, N) = tmpArr(1, 1)
                Arr(j + 1, 2) = tmpArr(1, 2)
               End If
        Next
    Next
    CoolSort = Arr
End Function
Function CoolPlus(Arr As Variant, ByVal N As Integer, ByVal Down As Integer, ByVal Up As Integer) As Variant
      Dim Str As String
      Str = ""
      For i = Down To Up - 1
      Str = Str & Arr(i, 2) & ";"
       Next
     CoolPlus = Str
End Function
Sub Testing()

Dim НТК As Worksheet
Set НТК = ActiveWorkbook.Worksheets("НТК 1 ")
Dim i As Long, S As Long, j As Long, iLastRow As Long, ii As Long
Dim a, b, Strok

Application.ScreenUpdating = False


Str1 = 99 ' строки.
Str2 = 144 ' строки.

' X столбец Y строка
x = Selection.Column ' чисто для
y = Selection.Row    ' координаты
' конечные координаты
x1 = x + Selection.Columns.Count - 1
y1 = y + Selection.Rows.Count - 1



If (x = 10) And (x1 = 10) Then     ' проверка границ выбора
    If y >= Str1 And y1 <= Str2 Then ' проверка границ выбора
    
    
'загрузить массив а значениями А3 J96
With Sheets("НТК 1 ")
iLastRow = .Cells(1, 1).End(xlDown).Row 'до первой пустой строки в А или ставь 98
a = НТК.Range(.Cells(3, 1), .Cells(iLastRow, 12)) ' загрузили массив
End With


' создали массив  B для результата
ReDim b(1 To UBound(a, 1), 1 To 4)


j = 1  ' нижняя часть таблицы
j1 = 1 ' для сортировки

For ii = y To y1 ' по выбранному диапазону

'подгрузили условия
    With Sheets("НТК 1 ")
        compared1 = .Cells(ii, 4) ' marshrut
        compared2 = .Cells(ii, 6) ' nomer avto
    End With


'начинаем поиск
j1 = j
    For i = 1 To UBound(a) ' 96 грубая привязка к адресу

        If a(i, 8) = compared1 Then
            If (a(i, 11) = 1) Or (a(i, 11) = 2) Then ' своя 1 или наемн  2
                b(j, 1) = compared1 'marshrut
                b(j, 2) = a(i, 1) 'Nomer magazina
                b(j, 3) = a(i, 10) 'poryadok razgruzki
                j = j + 1
            End If
        End If

Next
' сортируем по убыванию
CoolSort b, 3, j1, j


ThisWorkbook.ActiveSheet.Range(Cells(ii, x), Cells(ii, x)) = CoolPlus(b, 3, j1, j)
Next
'ThisWorkbook.Sheets(5).Range(Cells(3, 1), Cells(j + 2, 3)) = b

 
Else: MsgBox ("Неверный диапазон по строке!Нужный адрес ячеек J99:J144")
End If
Else: MsgBox ("Неверный диапазон по столбцу!Нужный адрес ячеек J99:J144")
End If
 
End Sub
P.S. Больше всего радует что я ушел от лишних выгрузок на листы -___-
Вложения
Тип файла: zip Играем реестр.zip (62.2 Кб, 5 просмотров)
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!

Последний раз редактировалось SaLoKiN; 01.10.2013 в 09:09.
SaLoKiN вне форума
Старый 01.10.2013, 12:14   #64
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

Йо-хо-хо и тема закрыта!
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!
SaLoKiN вне форума
Старый 31.10.2013, 07:45   #65
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

Подниму тему, чтобы не создавать новую.
Мой воспаленный моск все ищет и ищет новые пути для упрощения жизни... в очередной раз идея посетила его и вот чего не могу додумать... находясь на листе 1, пытаюсь выгрузить из массива данные в лист 2. а оно ругается и пытается выгрузить на лист 1.
запускаю макрос с листа1. кусочек кода,который отвечает за выгрузку
Код:
With Sheets(2)
.Range(Cells(3, 1), Cells(j + 2, 10)) = b
End With
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!
SaLoKiN вне форума
Старый 31.10.2013, 07:50   #66
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

2 точки еще перед Cells поствить и готово.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума
Старый 31.10.2013, 07:53   #67
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

Цитата:
2 точки еще перед Cells поствить и готово.
ай-яяяй =)
спасибо)

а почему вот так нельзя обращаться с другого листа?

Код:
 ActiveWorkbook.Worksheets(2).Range(Cells(3, 1), Cells(j + 1, 9)).Select
простите за, возможно, не грамотный вопрос >_<
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!

Последний раз редактировалось SaLoKiN; 31.10.2013 в 07:56.
SaLoKiN вне форума
Старый 31.10.2013, 08:01   #68
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
а почему вот так нельзя обращаться с другого листа?
потому что VBA, как и любой другой язык программирования, имеет свои правила и синтаксис.

Вопрос равносилен такому:
Цитата:
а почему вот так нельзя выделить диапазон?
Select ActiveWorkbook.Range
вот, в самом деле, почему нельзя, а?


По теме:
ActiveWorkbook.Worksheets(2).Range - ссылается на один лист,
Cells(3, 1) - совсем на другой

Получаем: Лист.Диапазон (ДругойЛист.ячейка1, ДругойЛист.ячейка2).Выделить
Вот и как Excel должен интерпретировать данную запись?
EducatedFool вне форума
Старый 31.10.2013, 08:09   #69
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

именно по этому я и отметил, что вопрос может быть неграмотным.
Просто VBA изучаю самостоятельно и не так уж долго. и я думал что если написано так ActiveWorkbook.Worksheets(2), тогда все что под этим считается обращением к этому листу... т.е. Книга.Лист.Диапазон.Выделить
как скажем обращение к структурам на С++


тогда каким образом я могу через range-cells обратиться к тому листу?
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!

Последний раз редактировалось SaLoKiN; 31.10.2013 в 08:12.
SaLoKiN вне форума
Старый 31.10.2013, 09:44   #70
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Цитата:
тогда каким образом я могу через range-cells обратиться к тому листу?
Как обратится к ячейке (плюс несколько нестандартных методов выделения ячейки)
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Qt] Вылет при изменении параметров QTableWidgetItem WarAngel-alk Qt и кроссплатформенное программирование С/С++ 4 31.01.2013 17:58
вылет программы при выводе простого числа (cout) Ciberal Общие вопросы C/C++ 7 27.09.2011 01:51
Вылет программы после завершение kloffelin Общие вопросы C/C++ 3 17.04.2010 20:18
Ошибка при использовании copyfile The Best Общие вопросы Delphi 20 22.07.2009 13:26
Проблемка при использовании регрессии 500_pinguins Microsoft Office Excel 0 16.06.2009 08:17