Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
2 / 2 / 0
Регистрация: 01.01.2010
Сообщений: 189
1

Подсчитать количество шагов от одной фразы до другой

04.08.2014, 11:35. Показов 2741. Ответов 54
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
была задача такая. высчитать дельту
например в моем первом файле есть столбец Y продвижение сайта в поисковых системах и есть столбец V seo продвижение. от фразы продвижение сайта в поисковых системах до фразы seo продвижение 5 шагов, а от фразы seo продвижение до фразы продвижение сайта в поисковых системах 8
надо высчитать было разницу по модулю 8-5=3.
потом создать симметричную матрицу, куда эти цифры заполняются. вот этот файл с макросом
а - копия.rar
он работает на этих данных.

Но анализировать приходится много данных, но они также оформлены, при новой порции данных возникает ошибка
new.rar

сам код
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
Sub CalcDist()
    Dim iCl1%, iCl2%, iRw1%, iRw2%, sNmCl1$, sNmCl2$
    Dim lLr%, i%
 
    Dim oDict: Set oDict = CreateObject("Scripting.Dictionary"): oDict.CompareMode = vbBinaryCompare
 
    [COLOR="Yellow"]With Worksheets(2)[/COLOR]
        lLr = .Cells(.Rows.Count, "A").End(xlUp).Row
        For i = 2 To lLr
            oDict.Item(.Cells(i, 1).Value) = i
        Next i
    End With
    
    For iCl1 = 1 To Cells(1, Columns.Count).End(xlToLeft).Column - 3 Step 3  ' направо
        iCl2 = iCl1 + 3
        sNmCl1 = Cells(1, iCl1).Value
        sNmCl2 = Cells(1, iCl2).Value
        iRw1 = 0: iRw2 = 0
        
        For i = 2 To Cells(Rows.Count, iCl1).End(xlUp).Row
            If sNmCl2 = Cells(i, iCl1).Value Then
                iRw1 = i
            End If
        Next i
        For i = 2 To Cells(Rows.Count, iCl2).End(xlUp).Row
            If sNmCl1 = Cells(i, iCl2).Value Then
                iRw2 = i
            End If
        Next i
 
        If iRw1 <> 0 And iRw2 <> 0 Then
            Worksheets(2).Cells(oDict.Item(sNmCl1), oDict.Item(sNmCl2)) = Application.Max(iRw1, iRw2) - Application.Min(iRw1, iRw2)
        Else
             Worksheets(2).Cells(oDict.Item(sNmCl1), oDict.Item(sNmCl2)).Interior.ColorIndex = 6
        End If
 
 
    Next iCl1
 
    For iCl1 = Cells(1, Columns.Count).End(xlToLeft).Column - 1 To 2 Step -3    ' налево
        iCl2 = iCl1 - 3
        sNmCl1 = Cells(1, iCl1).Value
        sNmCl2 = Cells(1, iCl2).Value
        iRw1 = 0: iRw2 = 0
        For i = 2 To Cells(Rows.Count, iCl1).End(xlUp).Row
            If sNmCl2 = Cells(i, iCl1).Value Then
                iRw1 = i
            End If
        Next i
        For i = 2 To Cells(Rows.Count, iCl2).End(xlUp).Row
            If sNmCl1 = Cells(i, iCl2).Value Then
                iRw2 = i
            End If
        Next i
 
        If iRw1 <> 0 And iRw2 <> 0 Then
            Worksheets(2).Cells(oDict.Item(sNmCl1), oDict.Item(sNmCl2)) = Application.Max(iRw1, iRw2) - Application.Min(iRw1, iRw2)
        Else
             Worksheets(2).Cells(oDict.Item(sNmCl1), oDict.Item(sNmCl2)).Interior.ColorIndex = 6
        End If
    Next iCl1
End Sub

желтым при дебаге подсвечивается это With Worksheets(2)
мне сказали, что там отсутствует второй лист , но я не знаю как его добавить. Подскажите, пожалуйста, как?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.08.2014, 11:35
Ответы с готовыми решениями:

Вывод всего с одной таблице + если есть в другой то подсчитать записи
Доброго времени суток, Подскажите пожалуйста, составить запрос. Есть таблицы product(id, name и...

Подсчитать количество записей в другой таблице
Существуют две таблицы - t1 и t2 со следующей структурой: t1: , , t2: , Задача: Получить...

Количество дней от одной даты до другой
Здравствуйте. Подскажите пожалуйста как найти количество дней от одной даты до другой?

Подсчитать количество букв "О" в текстовом файле, и записать это количество в другой текстовый файл
2)Записать программу которая считает количество букв &quot;О&quot; в текстовом файле, и записать это...

54
Заблокирован
04.08.2014, 16:15 21
Author24 — интернет-сервис помощи студентам
Можно так попробовать:

Visual Basic
1
2
3
4
5
6
7
8
9
10
        For i = 2 To vMax
            If sNmCl2 = Cells(i, iCl1).Value Then
                iRw1 = i
            End If
        Next i
        For i = 2 To vMax
            If sNmCl1 = Cells(i, iCl2).Value Then
                iRw2 = i
            End If
        Next i
1
2 / 2 / 0
Регистрация: 01.01.2010
Сообщений: 189
04.08.2014, 16:18  [ТС] 22
в какую часть кода вставляется, где вы пометили
Visual Basic
1
Здесь нужно задать полученное vMax
0
Заблокирован
04.08.2014, 16:28 23
Вот предположение:

Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
Sub CalcDist()
    Dim iCl1&, iCl2&, iRw1&, iRw2&, sNmCl1$, sNmCl2$
    Dim lLr&, i&
    Dim vMax&, v& 'Скорее всего ошибку вызвало то необъявленна эта переменная
    
    Dim oDict: Set oDict = CreateObject("Scripting.Dictionary"): oDict.CompareMode = vbBinaryCompare
 
    With Worksheets(2)
        lLr = .Cells(.Rows.Count, "A").End(xlUp).Row
        For i = 2 To lLr
            oDict.Item(.Cells(i, 1).Value) = i
        Next i
    End With
    
    For iCl1 = 1 To Cells(1, Columns.Count).End(xlToLeft).Column - 3 Step 3  ' направо
        iCl2 = iCl1 + 3
        sNmCl1 = Cells(1, iCl1).Value
        sNmCl2 = Cells(1, iCl2).Value
        iRw1 = 0: iRw2 = 0
        
        For i = 2 To Cells(Rows.Count, iCl1).End(xlUp).Row
            If sNmCl2 = Cells(i, iCl1).Value Then
                iRw1 = i
            End If
        Next i
        For i = 2 To Cells(Rows.Count, iCl2).End(xlUp).Row
            If sNmCl1 = Cells(i, iCl2).Value Then
                iRw2 = i
            End If
        Next i
 
        If iRw1 <> 0 And iRw2 <> 0 Then
            v = Application.Max(iRw1, iRw2) - Application.Min(iRw1, iRw2)
            If v > vMax Then vMax = v
            Worksheets(2).Cells(oDict.Item(sNmCl1), oDict.Item(sNmCl2)) = v
        Else
             Worksheets(2).Cells(oDict.Item(sNmCl1), oDict.Item(sNmCl2)).Interior.ColorIndex = 6
        End If
 
 
    Next iCl1
    '
    'Здесь нужно задать полученное vMax ,,, как-то так :)
    '
    For iCl1 = Cells(1, Columns.Count).End(xlToLeft).Column - 1 To 2 Step -3    ' налево
        iCl2 = iCl1 - 3
        sNmCl1 = Cells(1, iCl1).Value
        sNmCl2 = Cells(1, iCl2).Value
        iRw1 = 0: iRw2 = 0
 
        For i = 2 To vMax
            If sNmCl2 = Cells(i, iCl1).Value Then
                iRw1 = i
            End If
        Next i
        For i = 2 To Cells(Rows.Count, iCl2).End(xlUp).Row
            If sNmCl1 = Cells(i, iCl2).Value Then
                iRw2 = i
            End If
        Next i
        
 
        If iRw1 <> 0 And iRw2 <> 0 Then
            Worksheets(2).Cells(oDict.Item(sNmCl1), oDict.Item(sNmCl2)) = Application.Max(iRw1, iRw2) - Application.Min(iRw1, iRw2)
        Else
             Worksheets(2).Cells(oDict.Item(sNmCl1), oDict.Item(sNmCl2)).Interior.ColorIndex = 6
        End If
    Next iCl1
End Sub


Добавлено через 2 минуты
тоесть ранее, там цикл передвигался до конца строк,
теперь должен просматриваеться квадрат с максимальным значением

проверьте, это будет работать ? (еще поправил через 2 минуты)
1
2 / 2 / 0
Регистрация: 01.01.2010
Сообщений: 189
04.08.2014, 16:29  [ТС] 24
пробую, но сейчас 9 ошибка запуска.
With Worksheets(2)
Миниатюры
Подсчитать количество шагов от одной фразы до другой  
0
Заблокирован
04.08.2014, 16:32 25
Цитата Сообщение от psychologist Посмотреть сообщение
пробую, но сейчас 9 ошибка запуска
Странно.. откуда Вы их берете эти ошибки, у меня показывает все ок..

попробуйте перезапустить лист, с тем вариантом который работал и изменить на тот код
0
2 / 2 / 0
Регистрация: 01.01.2010
Сообщений: 189
04.08.2014, 16:36  [ТС] 26
я пробую на 2013 экселе

Добавлено через 1 минуту
или может прикрепите мой файлик с макросом?
0
Заблокирован
04.08.2014, 16:37 27
в 51-ю сточку внес только это изменение For i = 2 To vMax
0
Заблокирован
04.08.2014, 16:39 28
Прикрепил
Вложения
Тип файла: xls а - копия.xls (93.0 Кб, 3 просмотров)
0
2 / 2 / 0
Регистрация: 01.01.2010
Сообщений: 189
04.08.2014, 16:40  [ТС] 29
да мне кажется, будет проще, если вы сам уже файлик прикрепите я сравню что у меня там.

Добавлено через 14 секунд
ага вижу
0
2 / 2 / 0
Регистрация: 01.01.2010
Сообщений: 189
04.08.2014, 16:42  [ТС] 30
так вы прикрепили старый файл, нужно, чтобы работало на этом. вот на нем не работает
Вложения
Тип файла: xls new.xls (92.5 Кб, 7 просмотров)
0
Заблокирован
04.08.2014, 16:47 31
Ясно !, ну теперь зато проще будет разобраться
для меня ваши листы как родные уже стали (шутка)
1
2 / 2 / 0
Регистрация: 01.01.2010
Сообщений: 189
04.08.2014, 16:49  [ТС] 32
и мне неловко, что ваше время трачу.
файл а-копия это хороший файл на нем код работает и со своей задачей. которую я расписал справляется.
а вот файл new -плохой файл ,т.к. на нем код не работает не смотря на то, что данные также оформлены, просто их больше что по столбцам, что по строкам.
0
Антихакер32
04.08.2014, 16:58
  #33

Не по теме:

Цитата Сообщение от psychologist Посмотреть сообщение
и мне неловко, что ваше время трачу
не переживайте, мне самому интересно решать подобные задачи,
иначе тоже был бы, не айс... если я бы не хотел то не отвечал бы вам, логично ?

0
2 / 2 / 0
Регистрация: 01.01.2010
Сообщений: 189
04.08.2014, 17:03  [ТС] 34
аа ясно тогда не буду мешать творческому процессу)
0
Заблокирован
04.08.2014, 17:10 35
Итак: есть такой момент,
там у вас нужно было получить данные с листа 2 таким способом With Worksheets(2)

может целесообразнее сразу использовать Лист4 ?
Visual Basic
1
2
3
4
5
6
7
    With Worksheets("Лист4")
 
        lLr = .Cells(.Rows.Count, "A").End(xlUp).Row
        For i = 2 To lLr
            oDict.Item(.Cells(i, 1).Value) = i
        Next i
    End With
1
2 / 2 / 0
Регистрация: 01.01.2010
Сообщений: 189
04.08.2014, 17:19  [ТС] 36
у меня к Вам как к эксперту, одна просьба. Киньте весь готовый код)
0
Заблокирован
04.08.2014, 17:23 37
Цитата Сообщение от psychologist Посмотреть сообщение
у меня к Вам как к эксперту, одна просьба. Киньте весь готовый код)
Позже скину, хочу вас обрадовать тем что у меня уже все работает,
и я понимаю что должно получиться, сейчас внимательно просматриваю возможные ошибки
1
2 / 2 / 0
Регистрация: 01.01.2010
Сообщений: 189
04.08.2014, 17:25  [ТС] 38
договорились. А код потом будет работать на других данных
0
Заблокирован
04.08.2014, 17:35 39
По идее код должен получиться суперским, вот как-раз с типами и работаю
чтоб программа не останавливалась,
там есть длинные строчки, приходиться пошагово смотреть что делает та или иная инструкция
1
2 / 2 / 0
Регистрация: 01.01.2010
Сообщений: 189
04.08.2014, 19:07  [ТС] 40
Этот код очень облегчит мне задачу. Уже маломальски разобрались?
0
04.08.2014, 19:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.08.2014, 19:07
Помогаю со студенческими работами здесь

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

Найти количество ходов конем из одной точки до другой.
Нужно найти самый краткий путь конем из одной точки до другой. Для этого нужно ещё написать функцию...

Макросом посчитать количество знаков от одной ссылки до другой
Посчитать количество знаков от одной ссылки (желтый восклицательный знак ! ) до такой же ссылки....

В заданной строке подсчитать количество слов, состоящих только из одной буквы
4)В заданной строке подсчитать количество слов, состоящих только из одной буквы.

Подсчитать количество слов в тексте, начинающихся и заканчивающихся одной и той же буквой
Помогите плз! Надо создать программу, которая подсчитывала количество слов в тексте, начинающихся и...

Подсчитать количество слов, которые начинаются и заканчиваются одной и той же буквой.
Прога1 &quot;Слова в строке отделены пробелами. Подсчитать количество слов, которые начинаются и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru