Добрый день. Желание есть, а соображалки не хватает. На листе две таблицы. Одна заполняется по принципу шахмат (g6-h6, c3-d3 и т.д.). Вторая, собственно, является вместилищем данных из первой, но с подвохом. Подвох в том, что ровно в половине случаев вторая таблица заполняется зеркальным отображением парных ячеек из первой (по принципу 6-0 0-6, 1-2 2-1), тоесть данные используются дважды. Критерий заполнения второй таблицы таков- после заполнения первого столбца заполняться должен второй (вновь поступившими данными из первой таблицы), после второго третий (аналогично) и т.д. Предположительно вторая таблица должна заполняться "=БИЗВЛЕЧ", но не могу совладать с критериями. Хотя уверенности в "=БИЗВЛЕЧ" нет никакой. Возможно ли решение вообще или же это нереально даже теоретически?
Добрый день. Желание есть, а соображалки не хватает. На листе две таблицы. Одна заполняется по принципу шахмат (g6-h6, c3-d3 и т.д.). Вторая, собственно, является вместилищем данных из первой, но с подвохом. Подвох в том, что ровно в половине случаев вторая таблица заполняется зеркальным отображением парных ячеек из первой (по принципу 6-0 0-6, 1-2 2-1), тоесть данные используются дважды. Критерий заполнения второй таблицы таков- после заполнения первого столбца заполняться должен второй (вновь поступившими данными из первой таблицы), после второго третий (аналогично) и т.д. Предположительно вторая таблица должна заполняться "=БИЗВЛЕЧ", но не могу совладать с критериями. Хотя уверенности в "=БИЗВЛЕЧ" нет никакой. Возможно ли решение вообще или же это нереально даже теоретически?Свирид
Есть мнение, что Ничего не понятно в Вашем файле и в объяснении чего Вы хотите. Это мнение моё. Думаю, что 24 просмотра и 0 ответов говорят о том, что это мнение разделяют некоторые люди на этом форуме.
Есть мнение, что Ничего не понятно в Вашем файле и в объяснении чего Вы хотите. Это мнение моё. Думаю, что 24 просмотра и 0 ответов говорят о том, что это мнение разделяют некоторые люди на этом форуме.Russel
Нужно чтобы правая табличка заполнялась данными из левой. Каждая строка в правой таблице (там где парные столбцы "зп") заполняется последовательно (как только появляются новые данные в левой таблице). Russel, спасибо за комментарий.
Нужно чтобы правая табличка заполнялась данными из левой. Каждая строка в правой таблице (там где парные столбцы "зп") заполняется последовательно (как только появляются новые данные в левой таблице). Russel, спасибо за комментарий.Свирид
Сообщение отредактировал Свирид - Вторник, 03.06.2014, 17:33
Каждая строка в правой таблице (там где парные столбцы "зп") заполняется последовательно (как только появляются новые данные в левой таблице)
Данные в правой таблице у вас не соответствуют данным в левой. Мне кажется, что Левая таблица должна заполняться из некой другой таблицы "результаты игр": Дата // Хозяева // Гости // Счет // Примечание (например для отметки овертаймов) Принцип заполнения правой таблицы я не понял, поэтому ничем не могу помочь ))
Каждая строка в правой таблице (там где парные столбцы "зп") заполняется последовательно (как только появляются новые данные в левой таблице)
Данные в правой таблице у вас не соответствуют данным в левой. Мне кажется, что Левая таблица должна заполняться из некой другой таблицы "результаты игр": Дата // Хозяева // Гости // Счет // Примечание (например для отметки овертаймов) Принцип заполнения правой таблицы я не понял, поэтому ничем не могу помочь ))Russel
Данные в правой таблице у вас не соответствуют данным в левой.
Может где и ошибся, не суть. Теперь соответствует всё. Принцип заполнения следующий: в матче "Бордо" - "Сент-Этьен" счёт 3:1, двигаем ползунок вправо (пока не скроется левая таблица) и фиксируем данные- Бордо 3:1, Сент-Этьен 1:3.
Данные в правой таблице у вас не соответствуют данным в левой.
Может где и ошибся, не суть. Теперь соответствует всё. Принцип заполнения следующий: в матче "Бордо" - "Сент-Этьен" счёт 3:1, двигаем ползунок вправо (пока не скроется левая таблица) и фиксируем данные- Бордо 3:1, Сент-Этьен 1:3.Свирид
Тоже не понял, как заполняется правая таблица. Но макросом конечно можно делать - при изменении левой, это изменение записывается в правую в эту строку, в первую пустую ячейку (или в какую?) Нужно знать весь процесс подробно - мы не знаем, Вы знаете. Вам и делать значит...
Тоже не понял, как заполняется правая таблица. Но макросом конечно можно делать - при изменении левой, это изменение записывается в правую в эту строку, в первую пустую ячейку (или в какую?) Нужно знать весь процесс подробно - мы не знаем, Вы знаете. Вам и делать значит... Hugo
Hugo, не обязательно в первую. Записывается в соответствующую ей (определяется именем команды). Хозяевам при счёте 3:1 так и записываем, гостям зеркально 1:3. Первый столбец заполнили, переходим ко второму. Хозяева по горизонтали, гости по вертикали в левой таблице.
Hugo, не обязательно в первую. Записывается в соответствующую ей (определяется именем команды). Хозяевам при счёте 3:1 так и записываем, гостям зеркально 1:3. Первый столбец заполнили, переходим ко второму. Хозяева по горизонтали, гости по вертикали в левой таблице.Свирид
Сообщение отредактировал Свирид - Вторник, 03.06.2014, 18:02
Ну тогда думаю так - при изменении ячейки в левой таблице -если не пусто --если цвет левее совпадает с цветом изменившейся -в этой строке в правую таблицу копируем данные (куда именно - вопрос? в первую свободную ячейку?) --опеределяем заголовок этой пары значений, ищем его в первом столбце (хотя можно не искать, а брать номер столбца и вычислять) ---в эту строку в правую таблицу пишем обратную пару -куда именно?
Заполнять таблицу нужно слева направо (ну как обычно) - иначе этот алгоритм рухнет. Но можно это учесть - проверять значение и цвет и вправо - но головоломно... Реализовывать сейчас/сегодня некогда...
Ну тогда думаю так - при изменении ячейки в левой таблице -если не пусто --если цвет левее совпадает с цветом изменившейся -в этой строке в правую таблицу копируем данные (куда именно - вопрос? в первую свободную ячейку?) --опеределяем заголовок этой пары значений, ищем его в первом столбце (хотя можно не искать, а брать номер столбца и вычислять) ---в эту строку в правую таблицу пишем обратную пару -куда именно?
Заполнять таблицу нужно слева направо (ну как обычно) - иначе этот алгоритм рухнет. Но можно это учесть - проверять значение и цвет и вправо - но головоломно... Реализовывать сейчас/сегодня некогда...Hugo
--опеределяем заголовок этой пары значений, ищем его в первом столбце (хотя можно не искать, а брать номер столбца и вычислять)
Проще. Если заголовок пары "Бордо" - "Сент-Этьен" (результат 3:1), то в строке для "Бордо" 3:1, а в строке для "Сент-Этьен" 1:3. В следующем туре (в следующий раз) "Ланс" - "Бордо" 1:2, вот теперь уже в строке для "Бордо" после 3:1 запишем 2:1 (строка для "Бордо" теперь будет выглядеть так 3:1 2:1), а "Лансу", соответственно, 1:2.
--опеределяем заголовок этой пары значений, ищем его в первом столбце (хотя можно не искать, а брать номер столбца и вычислять)
Проще. Если заголовок пары "Бордо" - "Сент-Этьен" (результат 3:1), то в строке для "Бордо" 3:1, а в строке для "Сент-Этьен" 1:3. В следующем туре (в следующий раз) "Ланс" - "Бордо" 1:2, вот теперь уже в строке для "Бордо" после 3:1 запишем 2:1 (строка для "Бордо" теперь будет выглядеть так 3:1 2:1), а "Лансу", соответственно, 1:2.
Заполнять всё равно как - но сперва левую ячейку, затем правую. Удаления не обрабатываются, при исправлении - скопирует исправленное как новое! Код в модуль листа: [vba]
Код
Option Explicit
'http://www.excelworld.ru/forum/2-11149-1 '- при изменении "второй" ячейки в левой таблице '-если не пусто '--если цвет левее совпадает с цветом изменившейся '---в этой строке в правую таблицу копируем данные в первую свободную ячейку '-опеределяем заголовок этой пары значений, ищем его в первом столбце '--в эту строку в правую таблицу пишем обратную пару в первую свободную ячейку ' 'Заполнять таблицу нужно слева направо (ну как обычно) - иначе результата не будет 'на удаление исходных данных не реагирует!
Private Sub Worksheet_Change(ByVal Target As Range) Dim lr As Range, pr As Range, r As Range, tr As Range, t As String If Target.Cells.Count > 1 Then Exit Sub
Set lr = Range("B2:AO21"): Set pr = Range("AQ2:DN21")
If Not Intersect(Target, lr) Is Nothing Then If Len(Target.Value) Then If Target.Offset(, -1).Interior.ColorIndex = Target.Interior.ColorIndex Then If Len(Target.Offset(, -1).Value) Then Set r = Union(Target.Offset(, -1), Target) With pr Application.EnableEvents = False
Set tr = .Cells(Target.Row - 1, .Columns.Count).End(xlToLeft).Offset(, 1) If Intersect(pr, tr) Is Nothing Then Set tr = pr.Rows(Target.Row - 1).Cells(1) tr(1) = r(1): tr(1, 2) = r(2)
t = Cells(1, r.Column) Set tr = Intersect(Rows(Columns(1).Find(t, , xlValues, xlWhole).Row), pr) Set tr = .Cells(tr.Row - 1, .Columns.Count).End(xlToLeft).Offset(, 1) If Intersect(pr, tr) Is Nothing Then Set tr = pr.Rows(tr.Row - 1).Cells(1) tr(1, 2) = r(1): tr(1) = r(2)
Application.EnableEvents = True End With
End If: End If: End If: End If End Sub
[/vba]
Заполнять всё равно как - но сперва левую ячейку, затем правую. Удаления не обрабатываются, при исправлении - скопирует исправленное как новое! Код в модуль листа: [vba]
Код
Option Explicit
'http://www.excelworld.ru/forum/2-11149-1 '- при изменении "второй" ячейки в левой таблице '-если не пусто '--если цвет левее совпадает с цветом изменившейся '---в этой строке в правую таблицу копируем данные в первую свободную ячейку '-опеределяем заголовок этой пары значений, ищем его в первом столбце '--в эту строку в правую таблицу пишем обратную пару в первую свободную ячейку ' 'Заполнять таблицу нужно слева направо (ну как обычно) - иначе результата не будет 'на удаление исходных данных не реагирует!
Private Sub Worksheet_Change(ByVal Target As Range) Dim lr As Range, pr As Range, r As Range, tr As Range, t As String If Target.Cells.Count > 1 Then Exit Sub
Set lr = Range("B2:AO21"): Set pr = Range("AQ2:DN21")
If Not Intersect(Target, lr) Is Nothing Then If Len(Target.Value) Then If Target.Offset(, -1).Interior.ColorIndex = Target.Interior.ColorIndex Then If Len(Target.Offset(, -1).Value) Then Set r = Union(Target.Offset(, -1), Target) With pr Application.EnableEvents = False
Set tr = .Cells(Target.Row - 1, .Columns.Count).End(xlToLeft).Offset(, 1) If Intersect(pr, tr) Is Nothing Then Set tr = pr.Rows(Target.Row - 1).Cells(1) tr(1) = r(1): tr(1, 2) = r(2)
t = Cells(1, r.Column) Set tr = Intersect(Rows(Columns(1).Find(t, , xlValues, xlWhole).Row), pr) Set tr = .Cells(tr.Row - 1, .Columns.Count).End(xlToLeft).Offset(, 1) If Intersect(pr, tr) Is Nothing Then Set tr = pr.Rows(tr.Row - 1).Cells(1) tr(1, 2) = r(1): tr(1) = r(2)
В списке макросов и не будет - это макрос обработки события. Вы в модуль правильного листа поместили код? И вообще в модуль ли листа? Свой файл сейчас показать не могу.
В списке макросов и не будет - это макрос обработки события. Вы в модуль правильного листа поместили код? И вообще в модуль ли листа? Свой файл сейчас показать не могу.Hugo
Hugo, либо пришлите свой файл когда сможете, либо поясните как пользоваться этим монстром тогда. Мои действия: Разработчик + Visual Basic + Лист1 + Insert + module + Ctrl V + Ctrl S .
Hugo, либо пришлите свой файл когда сможете, либо поясните как пользоваться этим монстром тогда. Мои действия: Разработчик + Visual Basic + Лист1 + Insert + module + Ctrl V + Ctrl S .Свирид
Hugo, человечище! Прости дурака. Всё работает идеально. Ещё раз прошу прощения за назойливость, ну и за тупость. Парень, ты лучший! Я в восторге. Спасибо спасибо спасибо.
Hugo, человечище! Прости дурака. Всё работает идеально. Ещё раз прошу прощения за назойливость, ну и за тупость. Парень, ты лучший! Я в восторге. Спасибо спасибо спасибо.Свирид