Приветствую вас, знатоки и любители! Сам я, можно сказать, только вчера узнал о существовании такой вещи как Excel. Ну да ближе к делу. Есть документ с двумя листами в нём, первый лист источник данных для второго. Как бы я не выделывался с формулами результата ноль, по силе своих возможностей конечно.
Задумка такова: 1) Счёт матча из массива с выпадающими списками на первом листе переносится на лист второй в массив "B2:AW25", самая левая таблца. Данные на первом листе будут постоянно меняться (счёт матчей и название команд). При заполнении второго листа в массиве "B2:AW25" к уже имеющимся данным будут дополняться вновь введённы с листа первого, в соответствующие ячейки. В смысле таблица на втором листе будет наполняться всё больше и больше. 2) Теперь операции только со вторым листом. Как только левая таблица получает новые данные они заполняют следующие свободные ячейки (вслед за уже заполненными) в правой таблице. Принцып- "Саутгемптон 1-0 Лутон Таун", в строке для Саутгемптон в правой таблице, в следующих свободных ячейках (сразу после уже заполненных), появится пара 1 0. В строке для Лутон Таун вводится зеркальное отображение счёта в матче, т.е. 0 1.
Четвёртый день мозг гну, отчаянние одолевает. Вразумите тугодума.
Приветствую вас, знатоки и любители! Сам я, можно сказать, только вчера узнал о существовании такой вещи как Excel. Ну да ближе к делу. Есть документ с двумя листами в нём, первый лист источник данных для второго. Как бы я не выделывался с формулами результата ноль, по силе своих возможностей конечно.
Задумка такова: 1) Счёт матча из массива с выпадающими списками на первом листе переносится на лист второй в массив "B2:AW25", самая левая таблца. Данные на первом листе будут постоянно меняться (счёт матчей и название команд). При заполнении второго листа в массиве "B2:AW25" к уже имеющимся данным будут дополняться вновь введённы с листа первого, в соответствующие ячейки. В смысле таблица на втором листе будет наполняться всё больше и больше. 2) Теперь операции только со вторым листом. Как только левая таблица получает новые данные они заполняют следующие свободные ячейки (вслед за уже заполненными) в правой таблице. Принцып- "Саутгемптон 1-0 Лутон Таун", в строке для Саутгемптон в правой таблице, в следующих свободных ячейках (сразу после уже заполненных), появится пара 1 0. В строке для Лутон Таун вводится зеркальное отображение счёта в матче, т.е. 0 1.
Четвёртый день мозг гну, отчаянние одолевает. Вразумите тугодума.zegor
Я бы вел базу всех матчей (как в "не том пальто"), тур за туром. В этом случае возможно решение этой задачки на формулах. Плюс к этому преимуществу (а это преимущество) мне было бы жалко собственных затраченных усилий на ввод очередного тура. Т.е. я бы не стал затирать результаты предыдущего тура новыми результатами, а просто располагал бы их всё ниже и ниже.
Ваш подход, конечно, тоже имеет право на жизнь. Но в этом случае без макросов не обойтись. Риском является момент ошибочного ввода, не замеченного сразу. При ошибке выковыривание неверного результата из "шахматки" после отработки макроса может быть достаточно утомительным, в то время как в формульном решении на первом листе просто редактируется ошибочная ячейка, после чего на втором листе всё "исправляется" автоматически.
Я бы вел базу всех матчей (как в "не том пальто"), тур за туром. В этом случае возможно решение этой задачки на формулах. Плюс к этому преимуществу (а это преимущество) мне было бы жалко собственных затраченных усилий на ввод очередного тура. Т.е. я бы не стал затирать результаты предыдущего тура новыми результатами, а просто располагал бы их всё ниже и ниже.
Ваш подход, конечно, тоже имеет право на жизнь. Но в этом случае без макросов не обойтись. Риском является момент ошибочного ввода, не замеченного сразу. При ошибке выковыривание неверного результата из "шахматки" после отработки макроса может быть достаточно утомительным, в то время как в формульном решении на первом листе просто редактируется ошибочная ячейка, после чего на втором листе всё "исправляется" автоматически.Gustav
Gustav, спасибо и вам за внимание к теме, плюсую в репутацию. Только вся соль таблиц моих именно во введении очередных туров, а затирание результатов предыдущего тура новыми данными происходит только на первом листе в массиве "D2:E13". Второй лист не редактируется никак, только дополняется новыми данными. Про ошибки тоже спасибо, учту. Спасибо за участие, не прошли мимо в смысле.
Gustav, спасибо и вам за внимание к теме, плюсую в репутацию. Только вся соль таблиц моих именно во введении очередных туров, а затирание результатов предыдущего тура новыми данными происходит только на первом листе в массиве "D2:E13". Второй лист не редактируется никак, только дополняется новыми данными. Про ошибки тоже спасибо, учту. Спасибо за участие, не прошли мимо в смысле. zegor
Да, попросите модераторов перенести. И надо продумать, когда переносить данные с 1-го листа на 2-ой? Построчно, т.е. заполнили строчку - перенеслось и т.д., или заполнили очередной тур, например, нажали кнопку - перенеслось?
Да, попросите модераторов перенести. И надо продумать, когда переносить данные с 1-го листа на 2-ой? Построчно, т.е. заполнили строчку - перенеслось и т.д., или заполнили очередной тур, например, нажали кнопку - перенеслось?ShAM
каждый с каждым играет по два раза, раз на выезде и раз дома.
Гы, это 2-круговой. Вы сами себе противоречите Например, Бернли дома с Брайтоном сыграл, в Шахматку записали. А когда Бернли поехал с Брайтоном играть, куда в Шахматку писАть?
каждый с каждым играет по два раза, раз на выезде и раз дома.
Гы, это 2-круговой. Вы сами себе противоречите Например, Бернли дома с Брайтоном сыграл, в Шахматку записали. А когда Бернли поехал с Брайтоном играть, куда в Шахматку писАть?ShAM
Допустим Бёрнли 5-0 Брайтон. Записали в левой таблице так- по горизонтали Бёрнли, а по вертикали Брайтон. На пересечении записываем 5-0, в ячейках будет выглядеть просто как 5 0
Когда Бёрнли едет к Брайтону в гости и играет Брайтон 0-1 Бёрнли то По тому же принцыпу- по горизонтали Брайтон, по вертикали Бёрнли и на пересечении 0-1, по ячейкам 0 1
Файлик приложил
так и быть двукруговой, виноват.
Допустим Бёрнли 5-0 Брайтон. Записали в левой таблице так- по горизонтали Бёрнли, а по вертикали Брайтон. На пересечении записываем 5-0, в ячейках будет выглядеть просто как 5 0
Когда Бёрнли едет к Брайтону в гости и играет Брайтон 0-1 Бёрнли то По тому же принцыпу- по горизонтали Брайтон, по вертикали Бёрнли и на пересечении 0-1, по ячейкам 0 1
Идеально! Просто идеально! Благодарю от всей души. Спасибо огромное. Есть среди людей светлые головы. Мне, поверьте, для повторения вашего результата и года наверняка не хватит. Вы хороший человек
Идеально! Просто идеально! Благодарю от всей души. Спасибо огромное. Есть среди людей светлые головы. Мне, поверьте, для повторения вашего результата и года наверняка не хватит. Вы хороший человек zegor
Были относительно свободные "окошки" в течение дня, повозился с этой задачкой, чтобы показать и формульный вариант решения.
Получилось. За основу взял английский футбольный "Чемпионшип" 2014-2015, который сейчас активно продолжается, сыграно 17 туров из 46. Информацию о турнире можно получить по ссылке: http://www.greatfootball.com.ua/england_ch/eng15-1dk.php .
На лист ЧШ, как и хотел, вместо сомнительного набора полей со списками развернул календарь игр с результатами. Там же можно и продолжать вести дальше, если интересно.
Лист "Шахматка" напичкан формулами. Сама "шахматка" в левой части - готова полностью, а правая часть ("результаты по турам") - до 18-го тура включительно. Это ограничение сделано, чтобы не выйти за размер файла 100 Кб при выкладывании. После скачивания, уже на своем компьютере можно продлить формулы правой части копированием до последнего 46-го тура.
Разных формул на листе "Шахматка" всего четыре: в паре ячеек С2:D2 и в паре ячеек AZ2:BA2. Все остальные ячейки левой "шахматки" и правой части заполнены копированием этих двух пар ячеек. Все формулы - массивовые (Ctrl+Shift+Enter), это следует иметь в виду, если захочется поредактировать и порассматривать формулы "поближе".
Были относительно свободные "окошки" в течение дня, повозился с этой задачкой, чтобы показать и формульный вариант решения.
Получилось. За основу взял английский футбольный "Чемпионшип" 2014-2015, который сейчас активно продолжается, сыграно 17 туров из 46. Информацию о турнире можно получить по ссылке: http://www.greatfootball.com.ua/england_ch/eng15-1dk.php .
На лист ЧШ, как и хотел, вместо сомнительного набора полей со списками развернул календарь игр с результатами. Там же можно и продолжать вести дальше, если интересно.
Лист "Шахматка" напичкан формулами. Сама "шахматка" в левой части - готова полностью, а правая часть ("результаты по турам") - до 18-го тура включительно. Это ограничение сделано, чтобы не выйти за размер файла 100 Кб при выкладывании. После скачивания, уже на своем компьютере можно продлить формулы правой части копированием до последнего 46-го тура.
Разных формул на листе "Шахматка" всего четыре: в паре ячеек С2:D2 и в паре ячеек AZ2:BA2. Все остальные ячейки левой "шахматки" и правой части заполнены копированием этих двух пар ячеек. Все формулы - массивовые (Ctrl+Shift+Enter), это следует иметь в виду, если захочется поредактировать и порассматривать формулы "поближе".Gustav
Вечер добрый. Дабы не открывать новой темы пишу сюда. Я изменил способ заполнения в массиве "Z3:AC12" и код стал выдавать несоответствие типов (если правильно перевёл Type mismatch). Всё на что у меня хватает соображалки- нужен другой оператор или операторы, я скорее всего не прав. Поменял способ заполнения потому что прислушался к совету Gustav, но макрос мне всё же очень необходим. Посмотрите если не сложно, ребят. [vba]
Код
Sub Perenos() Dim a, i%, iLastCol% a = Range("C2:F11").Value With Worksheets("Шахматка") For i = 1 To 10 If a(i, 2) <> "" And a(i, 3) <> "" Then .Cells(a(i, 1) + 1, a(i, 4) * 2) = a(i, 2) .Cells(a(i, 1) + 1, a(i, 4) * 2 + 1) = a(i, 3) iLastCol = .Cells(a(i, 1) + 1, Columns.Count).End(xlToLeft).Column If iLastCol < 44 Then .Cells(a(i, 1) + 1, 43) = a(i, 2) .Cells(a(i, 1) + 1, 44) = a(i, 3) Else .Cells(a(i, 1) + 1, iLastCol + 1) = a(i, 2) .Cells(a(i, 1) + 1, iLastCol + 2) = a(i, 3) End If iLastCol = .Cells(a(i, 4) + 1, Columns.Count).End(xlToLeft).Column If iLastCol < 44 Then .Cells(a(i, 4) + 1, 43) = a(i, 3) .Cells(a(i, 4) + 1, 44) = a(i, 2) Else .Cells(a(i, 4) + 1, iLastCol + 1) = a(i, 3) .Cells(a(i, 4) + 1, iLastCol + 2) = a(i, 2) End If End If Next i End With End Sub
[/vba]
Вечер добрый. Дабы не открывать новой темы пишу сюда. Я изменил способ заполнения в массиве "Z3:AC12" и код стал выдавать несоответствие типов (если правильно перевёл Type mismatch). Всё на что у меня хватает соображалки- нужен другой оператор или операторы, я скорее всего не прав. Поменял способ заполнения потому что прислушался к совету Gustav, но макрос мне всё же очень необходим. Посмотрите если не сложно, ребят. [vba]
Код
Sub Perenos() Dim a, i%, iLastCol% a = Range("C2:F11").Value With Worksheets("Шахматка") For i = 1 To 10 If a(i, 2) <> "" And a(i, 3) <> "" Then .Cells(a(i, 1) + 1, a(i, 4) * 2) = a(i, 2) .Cells(a(i, 1) + 1, a(i, 4) * 2 + 1) = a(i, 3) iLastCol = .Cells(a(i, 1) + 1, Columns.Count).End(xlToLeft).Column If iLastCol < 44 Then .Cells(a(i, 1) + 1, 43) = a(i, 2) .Cells(a(i, 1) + 1, 44) = a(i, 3) Else .Cells(a(i, 1) + 1, iLastCol + 1) = a(i, 2) .Cells(a(i, 1) + 1, iLastCol + 2) = a(i, 3) End If iLastCol = .Cells(a(i, 4) + 1, Columns.Count).End(xlToLeft).Column If iLastCol < 44 Then .Cells(a(i, 4) + 1, 43) = a(i, 3) .Cells(a(i, 4) + 1, 44) = a(i, 2) Else .Cells(a(i, 4) + 1, iLastCol + 1) = a(i, 3) .Cells(a(i, 4) + 1, iLastCol + 2) = a(i, 2) End If End If Next i End With End Sub
Ага, понял я Ваш Type mismatch Попробуйте встать в ячейку В2 и стрелкой вправо перейдите в ячейку, где Liverpool. Вы увидите (в строке формул), что там число восемь. Вот с этими числами мы и работали. Теперь в ячейке Р2 стоит текст "Liverpool". Вот и несоответствие типов: к тексту пытаться что-то прибавить или умножить. Смотрите исправленный вариант, использовал функцию листа ПОИСКПОЗ().
Ага, понял я Ваш Type mismatch Попробуйте встать в ячейку В2 и стрелкой вправо перейдите в ячейку, где Liverpool. Вы увидите (в строке формул), что там число восемь. Вот с этими числами мы и работали. Теперь в ячейке Р2 стоит текст "Liverpool". Вот и несоответствие типов: к тексту пытаться что-то прибавить или умножить. Смотрите исправленный вариант, использовал функцию листа ПОИСКПОЗ().ShAM
Постигла меня беда в виде ошибки 400. Всё что я сделал это заменил данные на листе "Sheet1" на новые. Мне, право, уже неловко писать сюда. При попытке вывести код из кода листа в модуль макросов и таким путём добиться хоть чего-то выдаёт ошибку 1004 и пеняет на эту строчку[vba]
Код
gost = Application.WorksheetFunction.Match(Range("S" & i + 1), [A1:A20], 0)
[/vba]
Постигла меня беда в виде ошибки 400. Всё что я сделал это заменил данные на листе "Sheet1" на новые. Мне, право, уже неловко писать сюда. При попытке вывести код из кода листа в модуль макросов и таким путём добиться хоть чего-то выдаёт ошибку 1004 и пеняет на эту строчку[vba]
Код
gost = Application.WorksheetFunction.Match(Range("S" & i + 1), [A1:A20], 0)