Здравствуйте! Сама суть задачи достаточно простая, но получается очень много условий. Плюс, не могу понять, как будут копироваться объединенные ячейки... Пожалуйста, помогите с написанием! В программировании кое-что понимаю, но синтаксис VBA не знаю Вот примерный алгоритм (рассмотрен для примера со старта на ячейке А1): 0) ищем на листе 2 по порядку сверху вниз все гиперссылки в столбце A, копируем 1ую из них (потом - вторую и т.д.) 1) ищем скопированное значение на Листе 1 Если есть совпадение: 2) на листе 2 двигаемся на 2 ячейки ниже (А3) и копируем значение до запятой 3) на листе 1 вставляем это значение в ячейку (столбец L, строка в которой нашли значение из п.1) 4) на листе 2 двигаемся на 1 ячейку правее, копируем 5) на листе 1 вставляем это значение в ячейку (столбец S, строка в которой нашли значение из п.1) 6) на листе 2 двигаемся на 1 ячейку правее 6.1) если ячейка объединена - то 6.1.1) скопировать ее и вставить это значение в ячейку листа 1 (столбец X, строка в которой нашли значение из п.1) 6.1.2) вставить это же значение в ячейку листа 1 (столбец Y, строка в которой нашли значение из п.1) 6.1.3) вставить значение "private" в ячейку листа 1 (столбец T, строка в которой нашли значение из п.1) 6.2) если ячейка не объединена - то 6.2.1) скопировать ее и вставить это значение в ячейку листа 1 (столбец X, строка в которой нашли значение из п.1) 6.2.2) переместиться на 4 ячейки ниже, скопировать значение и вставить это значение в ячейку листа 1 (столбец Y, строка в которой нашли значение из п.1) 6.2.3) вставить значение "public" в ячейку листа 1 (столбец T, строка в которой нашли значение из п.1) 7) на листе 2 двигаемся на 1 ячейку правее, копируем 8) на листе 1 вставляем это значение в ячейку (столбец W, строка в которой нашли значение из п.1) 9) на листе 2 двигаемся на 1 ячейку правее, копируем 10) на листе 1 вставляем это значение в ячейку (столбец AA, строка в которой нашли значение из п.1) 11) повторяем к п. 0: переходим к следующей гиперссылке.
Здравствуйте! Сама суть задачи достаточно простая, но получается очень много условий. Плюс, не могу понять, как будут копироваться объединенные ячейки... Пожалуйста, помогите с написанием! В программировании кое-что понимаю, но синтаксис VBA не знаю Вот примерный алгоритм (рассмотрен для примера со старта на ячейке А1): 0) ищем на листе 2 по порядку сверху вниз все гиперссылки в столбце A, копируем 1ую из них (потом - вторую и т.д.) 1) ищем скопированное значение на Листе 1 Если есть совпадение: 2) на листе 2 двигаемся на 2 ячейки ниже (А3) и копируем значение до запятой 3) на листе 1 вставляем это значение в ячейку (столбец L, строка в которой нашли значение из п.1) 4) на листе 2 двигаемся на 1 ячейку правее, копируем 5) на листе 1 вставляем это значение в ячейку (столбец S, строка в которой нашли значение из п.1) 6) на листе 2 двигаемся на 1 ячейку правее 6.1) если ячейка объединена - то 6.1.1) скопировать ее и вставить это значение в ячейку листа 1 (столбец X, строка в которой нашли значение из п.1) 6.1.2) вставить это же значение в ячейку листа 1 (столбец Y, строка в которой нашли значение из п.1) 6.1.3) вставить значение "private" в ячейку листа 1 (столбец T, строка в которой нашли значение из п.1) 6.2) если ячейка не объединена - то 6.2.1) скопировать ее и вставить это значение в ячейку листа 1 (столбец X, строка в которой нашли значение из п.1) 6.2.2) переместиться на 4 ячейки ниже, скопировать значение и вставить это значение в ячейку листа 1 (столбец Y, строка в которой нашли значение из п.1) 6.2.3) вставить значение "public" в ячейку листа 1 (столбец T, строка в которой нашли значение из п.1) 7) на листе 2 двигаемся на 1 ячейку правее, копируем 8) на листе 1 вставляем это значение в ячейку (столбец W, строка в которой нашли значение из п.1) 9) на листе 2 двигаемся на 1 ячейку правее, копируем 10) на листе 1 вставляем это значение в ячейку (столбец AA, строка в которой нашли значение из п.1) 11) повторяем к п. 0: переходим к следующей гиперссылке.lmln
Было бы здорово, если бы все пользователи форума так хорошо описывали, чего они хотят.
Задача действительно не самая сложная, но потребует некоторой усидчивости. Если меня никто не перехватит - попробую завтра найти время. В задаче всего два "хитрых" момента - проверка на наличие гиперссылки и проверка на объединённость ячейки. Самое сложное я нашёл и пока просто положу тут до востребования. Если возвращает 0 - ссылок нет.
[vba]
Код
Range("A1").Hyperlinks.Count
[/vba]
lmln, здравствуйте.
Было бы здорово, если бы все пользователи форума так хорошо описывали, чего они хотят.
Задача действительно не самая сложная, но потребует некоторой усидчивости. Если меня никто не перехватит - попробую завтра найти время. В задаче всего два "хитрых" момента - проверка на наличие гиперссылки и проверка на объединённость ячейки. Самое сложное я нашёл и пока просто положу тут до востребования. Если возвращает 0 - ссылок нет.
В добрый путь! Я с утра хотел написать, что один раз увидеть... Но отвлекли. Описано конечно хорошо, спору нет. Как и желания разбираться, что, куда, и как, сравнивая, что есть файле, и что описано на форуме.
В добрый путь! Я с утра хотел написать, что один раз увидеть... Но отвлекли. Описано конечно хорошо, спору нет. Как и желания разбираться, что, куда, и как, сравнивая, что есть файле, и что описано на форуме.RAN
Вообще-то я предпочитаю подробное описание нужного результата, и пример со всеми возможными вариантами исходных данных. А уж как делать - сам продумаю. Но такое подробное описание тоже может пригодиться, в этой задаче точно иначе не разобраться Кажется похожий файл уже видел, но давно.
Вообще-то я предпочитаю подробное описание нужного результата, и пример со всеми возможными вариантами исходных данных. А уж как делать - сам продумаю. Но такое подробное описание тоже может пригодиться, в этой задаче точно иначе не разобраться Кажется похожий файл уже видел, но давно.Hugo
Алгоритм реализован, код цепляется за листы с названиями "Data" для 1-го листа и "Chest" для второго. Декоративные листы: "Start" - шаблон изначальных данных, "Result" - результат работы макроса. Сочная кнопа с макросом в самом начале, мимо не пройти.
[vba]
Код
Sub Cruel_data_management()
Dim shtX As Worksheet 'For Chest list Dim strX As String 'For string operations Dim X As Long 'To run through Chest list Dim A As Long 'How much rows do we have in Data list Dim B As Long 'Where is our value on Data list
'Author: Roman Rioran Voronov 'Date: the 1-st of August, 2014 'Feedback: voronov_rv@mail.ru
'Purpose: Realisation of algorithm for excel-world.ru user ' http://www.excelworld.ru/forum/10-12229-1#104720
Set shtX = ThisWorkbook.Sheets("Chest")
Application.ScreenUpdating = False With ThisWorkbook.Sheets("Data") On Error Resume Next
A = .Cells(.Rows.Count, 1).End(xlUp).Row
For X = 1 To shtX.Cells(shtX.Rows.Count, 1).End(xlUp).Row If shtX.Cells(X, 1).Hyperlinks.Count Then B = .Range(.Cells(1, 3), .Cells(A, 3)).Find(shtX.Cells(X, 1).Value).Row If B > 0 Then strX = shtX.Cells(X + 2, 1).Value strX = Left(strX, InStr(1, strX, ",", 1) - 1) .Cells(B, 12).Value = strX .Cells(B, 19).Value = shtX.Cells(X, 2).Value .Cells(B, 24).Value = shtX.Cells(X, 3).Value If shtX.Cells(X, 3).MergeCells Then .Cells(B, 25).Value = shtX.Cells(X, 3).Value .Cells(B, 20).Value = "private" Else .Cells(B, 25).Value = shtX.Cells(X + 4, 3).Value .Cells(B, 20).Value = "public" End If .Cells(B, 23).Value = shtX.Cells(X, 4).Value .Cells(B, 27).Value = shtX.Cells(X, 5).Value B = 0 End If End If Next X
End With Application.ScreenUpdating = True End Sub
[/vba]
На анализ, решение и написание ушло почти 2 часа. Пойду крутить в своей голове три слова: "Я", "Благотворительность" и "Зачем?".
Интересно, а для каких целей будет использоваться это творение? Содержание интригующе отличается от обычных табелей учёта времени, товара и продаж. Если секрет - можно в личку.
Алгоритм реализован, код цепляется за листы с названиями "Data" для 1-го листа и "Chest" для второго. Декоративные листы: "Start" - шаблон изначальных данных, "Result" - результат работы макроса. Сочная кнопа с макросом в самом начале, мимо не пройти.
[vba]
Код
Sub Cruel_data_management()
Dim shtX As Worksheet 'For Chest list Dim strX As String 'For string operations Dim X As Long 'To run through Chest list Dim A As Long 'How much rows do we have in Data list Dim B As Long 'Where is our value on Data list
'Author: Roman Rioran Voronov 'Date: the 1-st of August, 2014 'Feedback: voronov_rv@mail.ru
'Purpose: Realisation of algorithm for excel-world.ru user ' http://www.excelworld.ru/forum/10-12229-1#104720
Set shtX = ThisWorkbook.Sheets("Chest")
Application.ScreenUpdating = False With ThisWorkbook.Sheets("Data") On Error Resume Next
A = .Cells(.Rows.Count, 1).End(xlUp).Row
For X = 1 To shtX.Cells(shtX.Rows.Count, 1).End(xlUp).Row If shtX.Cells(X, 1).Hyperlinks.Count Then B = .Range(.Cells(1, 3), .Cells(A, 3)).Find(shtX.Cells(X, 1).Value).Row If B > 0 Then strX = shtX.Cells(X + 2, 1).Value strX = Left(strX, InStr(1, strX, ",", 1) - 1) .Cells(B, 12).Value = strX .Cells(B, 19).Value = shtX.Cells(X, 2).Value .Cells(B, 24).Value = shtX.Cells(X, 3).Value If shtX.Cells(X, 3).MergeCells Then .Cells(B, 25).Value = shtX.Cells(X, 3).Value .Cells(B, 20).Value = "private" Else .Cells(B, 25).Value = shtX.Cells(X + 4, 3).Value .Cells(B, 20).Value = "public" End If .Cells(B, 23).Value = shtX.Cells(X, 4).Value .Cells(B, 27).Value = shtX.Cells(X, 5).Value B = 0 End If End If Next X
End With Application.ScreenUpdating = True End Sub
[/vba]
На анализ, решение и написание ушло почти 2 часа. Пойду крутить в своей голове три слова: "Я", "Благотворительность" и "Зачем?".
Интересно, а для каких целей будет использоваться это творение? Содержание интригующе отличается от обычных табелей учёта времени, товара и продаж. Если секрет - можно в личку.Rioran