Здравствуйте. Никогда так плотно не работала с Эксель и теперь приходится буквально экстерном его изучать на конкретных задачах. Одна из них состоит в следующем: Дана табличка, которая заполняется из сторонней программы, поэтому имеет рандомное число строк, НО всегда конкретное количество столбцов. В этой табличке есть три столбца: 1 (на примере столбец AF), где содержатся гиперссылки на файлы. Значения в этом столбце могут повторяться в произвольном порядке. 2, 3 (Столбцы AG, AH сответственно) - Номера доков, соответствующих файлам по гиперссылкам. Значения в столбце 2 также могут повторяться, значения в столбце 3 - уникальны. Требуется вывести на печать табличку из трех столбцов (см. пример на листе два). В первом столбце таблицы содержаться уникальные значения из столбца AF c листа "отчет", во втором - через запятую, значения из столбца AG с листа "отчет" которые соответствуют строкам, где есть повторы по столбцу AF, третий - тоже самое только значения из столбца AG листа "отчет". В приложенном примере на листе "отчет" реальный пример таблицы откуда берутся данные, на листе "Лист1" пример того, что должно получиться в табличке. Помогите плиз, как это лучше всего реализовать?
Здравствуйте. Никогда так плотно не работала с Эксель и теперь приходится буквально экстерном его изучать на конкретных задачах. Одна из них состоит в следующем: Дана табличка, которая заполняется из сторонней программы, поэтому имеет рандомное число строк, НО всегда конкретное количество столбцов. В этой табличке есть три столбца: 1 (на примере столбец AF), где содержатся гиперссылки на файлы. Значения в этом столбце могут повторяться в произвольном порядке. 2, 3 (Столбцы AG, AH сответственно) - Номера доков, соответствующих файлам по гиперссылкам. Значения в столбце 2 также могут повторяться, значения в столбце 3 - уникальны. Требуется вывести на печать табличку из трех столбцов (см. пример на листе два). В первом столбце таблицы содержаться уникальные значения из столбца AF c листа "отчет", во втором - через запятую, значения из столбца AG с листа "отчет" которые соответствуют строкам, где есть повторы по столбцу AF, третий - тоже самое только значения из столбца AG листа "отчет". В приложенном примере на листе "отчет" реальный пример таблицы откуда берутся данные, на листе "Лист1" пример того, что должно получиться в табличке. Помогите плиз, как это лучше всего реализовать?Alara
Сообщение отредактировал Alara - Среда, 26.11.2014, 16:24
уникальные выделять умеете? а дальше - читаем статью, качаем пример и смотрим: http://www.excelworld.ru/board....-1-0-24 будет что конкретно непонятно или не получаться - возвращаемся, показываем, спрашиваем.
уникальные выделять умеете? а дальше - читаем статью, качаем пример и смотрим: http://www.excelworld.ru/board....-1-0-24 будет что конкретно непонятно или не получаться - возвращаемся, показываем, спрашиваем.ikki
помощь по Excel и VBA ikki@fxmail.ru, icq 592842413, skype alex.ikki
Сообщение отредактировал ikki - Среда, 26.11.2014, 16:43
ikki, выкинула в первый столбец на Лист1 уникальные значения макросом. Но как теперь к этим уникальным присобачить все причитающиеся им номера из столбцов AG и AH хоть ты тресни не знаю(
ikki, выкинула в первый столбец на Лист1 уникальные значения макросом. Но как теперь к этим уникальным присобачить все причитающиеся им номера из столбцов AG и AH хоть ты тресни не знаю(Alara
Sub ertert() Dim x, y(), i&, j&, k& With Sheets("отчёт") x = .Range("AF5:AH" & .Cells(Rows.Count, "AF").End(xlUp).Row).Value End With ReDim y(1 To UBound(x), 1 To 3) With CreateObject("Scripting.Dictionary") .CompareMode = 1 For i = 1 To UBound(x) If .Exists(x(i, 1)) Then k = .Item(x(i, 1)) If InStr(y(k, 2), x(i, 2)) = 0 Then y(k, 2) = y(k, 2) & ", " & x(i, 2) y(k, 3) = y(k, 3) & ", " & x(i, 3) Else j = j + 1: .Item(x(i, 1)) = j y(j, 1) = x(i, 1) y(j, 2) = x(i, 2) y(j, 3) = x(i, 3) End If Next i End With Sheets("Лист1").Range("A2:C2").Resize(j) = y End Sub
[/vba]
Привет Alara, попробуйте так [vba]
Код
Sub ertert() Dim x, y(), i&, j&, k& With Sheets("отчёт") x = .Range("AF5:AH" & .Cells(Rows.Count, "AF").End(xlUp).Row).Value End With ReDim y(1 To UBound(x), 1 To 3) With CreateObject("Scripting.Dictionary") .CompareMode = 1 For i = 1 To UBound(x) If .Exists(x(i, 1)) Then k = .Item(x(i, 1)) If InStr(y(k, 2), x(i, 2)) = 0 Then y(k, 2) = y(k, 2) & ", " & x(i, 2) y(k, 3) = y(k, 3) & ", " & x(i, 3) Else j = j + 1: .Item(x(i, 1)) = j y(j, 1) = x(i, 1) y(j, 2) = x(i, 2) y(j, 3) = x(i, 3) End If Next i End With Sheets("Лист1").Range("A2:C2").Resize(j) = y End Sub
А теперь усложним задачу, в столбец D на лист Реестр добавляем сумму разниц ячеек из столбцов T и W, которые соответствуют уникальным ячейкам в столбце AF. На примере в ячейке D2 Листа Реестр будет значение 4650, в ячейке D3 листа Реестр будет значение 37022 и т.д.
А теперь усложним задачу, в столбец D на лист Реестр добавляем сумму разниц ячеек из столбцов T и W, которые соответствуют уникальным ячейкам в столбце AF. На примере в ячейке D2 Листа Реестр будет значение 4650, в ячейке D3 листа Реестр будет значение 37022 и т.д.Alara