Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
2 / 2 / 0
Регистрация: 09.02.2013
Сообщений: 100

Копирование значений ячеек

07.11.2013, 12:30. Показов 5947. Ответов 57
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Данный макрос копирует содержимое диапазона ячеек (B43:D66) с листов в имени которых содержатся скобки на лист "Ход поединков 1-8 финалов". Проблема в том, что в ячейках содержатся формулы. Как исправить, чтобы копировались значения ячеек?
Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub Добавить_в_Ход_поединков_Восьмые_финалов()
    Dim Sh As Worksheet, i As Long
    i = 3
    For Each Sh In ThisWorkbook.Sheets
        If InStr(3, Sh.Name, "(") > 0 Then
            Sh.[B43:D66].Copy Sheets("Ход поединков 1-8 финалов").Cells(i, 2)
            i = i + 24
        End If
    Next Sh
End Sub
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.11.2013, 12:30
Ответы с готовыми решениями:

Копирование значений диапазона ячеек
Здравствуйте! у меня есть код, который копирует ячейки с листа1 на лист2 Sheets("Лист1").Cells(1, 2).Resize(1, 3).Copy...

Копирование значений ячеек с определенным примечанием в отдельный столбец
Уважаемые программисты, прошу помочь с реализацией следующей задачи. На листе есть 20 именованных диапазонов вида «Книга№*», имена...

Копирование значений ячеек в столбце при соблюдении условия
В таблице есть два столбца. Всегда если в ячейке первого столбца есть значение, то в этой же ячейке второго столбца пусто, и наоборот. ...

57
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
14.11.2013, 02:27
Студворк — интернет-сервис помощи студентам
Нет, что-то не то, киньте мне Вашу книгу, пробегусь сам по отладкам.

Добавлено через 2 минуты
Код должен (и у меня так делает) копировать только значения результатов формул, или "самостоятельные значения ячеек".
0
2 / 2 / 0
Регистрация: 09.02.2013
Сообщений: 100
14.11.2013, 02:33  [ТС]
Она весит больше 500 кб, форум не пропускает больше 100 кб. Я и так уже вас задержал, давайте я подготовлю ее к отправке и завтра вам отправлю, если не разберусь в чём дело...
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
14.11.2013, 02:38
Не проблема. Проверьте, почему не активирует в первую очередь. Таким упрощенным кодом
Visual Basic
1
2
3
4
5
6
7
sub asdfsdf()
 Dim Sh As Worksheet
   For Each Sh In ThisWorkbook.Sheets
        if instr(1, sh.name, "(", 1)<>0 then
            sh.select
   next 
end sub
Он все активирует? Если да, тогда кидайте несколько тех, что копирует, и те - которые пропускает. Все не нужно. Возьму с собой в поле. Там связи нет, но перекуры бывают.
0
2 / 2 / 0
Регистрация: 09.02.2013
Сообщений: 100
14.11.2013, 02:40  [ТС]
Хорошо! Ещё раз Спасибо, что помогаете!
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
14.11.2013, 02:48
Мне просто самому интересно.
0
2 / 2 / 0
Регистрация: 09.02.2013
Сообщений: 100
14.11.2013, 03:02  [ТС]
Упрощённый код не активирует ни одного листа... хотя стоп, вы снова пропустили End If...
Вот теперь все активирует, остановился на последнем листе... Иду дальше...
0
2 / 2 / 0
Регистрация: 09.02.2013
Сообщений: 100
14.11.2013, 05:54  [ТС]
Так и не разобрался я в чём дело... Глаза уже слипаются, шесть утра почти... Прилагаю вложение с шестью листами в именах которых содержатся скобки. Из шести, код должен скопировать только первый и четвёртый. Во втором и пятом значения ячеек диапазона пустые, а в третьем и шестом ячейки диапазона полностью пустые, эти листы копироваться не должны!
Вложения
Тип файла: rar Primer.rar (41.0 Кб, 8 просмотров)
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
14.11.2013, 10:52
Успеваю посмотреть и ответить перед выездом. Посмотрите, какой диапазон Вы указали мне ([B43 : D66]). А вот диапазон, который Вы используете в своей адаптации ([b88 : d90]). Совсем маленькая разница. .
Я Вам тут кидаю демо-код.
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub asdfsdf()
 Dim Sh As Worksheet
   For Each Sh In ThisWorkbook.Sheets
        If InStr(3, Sh.Name, "(") > 0 Then
            Sh.Select
            Sh.Tab.ColorIndex = 3
            Sh.[b88:d90].Interior.ColorIndex = 15
        End If
   Next
End Sub

Он пройдется по всем листам. Нужным поменяет цвет вкладки (где имя листа) на красный, а серым выделит диапазоны, с которыми Вы работаете ([b88:d90]). Запустите, а потом пересмотрите каждый лист.
Дальше. Если, все-таки (как подозреваю), у Вас плавающий диапазон (динамический), продумайте, каким образом можна привязаться к верхней и нижней границам (что-то уникальное в начале и в конце диапазона, но общее для всех листов). Тогда код сможет сам думать с чем работать.
И последнее
Не скопировал последние два:
юниоры 17-18 лет (до 65 кг)
юниоры 17-18 лет (до 70 кг)
В этом - юниоры 17-18 лет (до 70 кг) в диапазоне [b88:d90] и нет ничего, что нужно копировать, а лист юниоры 17-18 лет (до 65 кг) Вы вобще не дали. Подумайте спокойно, сделайте порядок в даных, определитесь с общим рабочим диапазоном для копирования на всех листах, кидайте, и, думаю, там ничего сложного, с кодом все в порядке и мы его быстро подкоректируем. Мне, пока Вы не определитесь с диапазоном - делать нечего.
1
2 / 2 / 0
Регистрация: 09.02.2013
Сообщений: 100
14.11.2013, 16:21  [ТС]
Цитата Сообщение от Igor_Tr Посмотреть сообщение
Посмотрите, какой диапазон Вы указали мне ([B43 : D66]). А вот диапазон, который Вы используете в своей адаптации ([b88 : d90]).
Здесь всё правильно, ваш код я использую для разных команд с одним и тем же принципом, но для разных диапазонов. У меня на листе "Ход поединков" (в полной версии книги) 6 кнопок (Заполнить 1/16 финалов; Заполнить 1/8 финалов; Заполнить Четвертьфиналы; Заполнить Полуфиналы; Заполнить Финалы; Заполнить За 3-и места). Для всех один и тот же код, за исключением названия кода и диапазона копирования, которые я сам изменяю. Структура кода при этом остаётся той же. Диапазоны не плавающие, они всегда на одном месте, просто например для группы из 4-х участников диапазоны для 1/16 финалов и 1/8 финалов отсутствуют, т.к. у них сразу начинаются полуфиналы. А если в сетке боёв (сетки составляются на 2-х, 4-х, 8-ми, 16-ти и 32-х участников) на 4-х участников всего 3 спортсмена, то у них не будет боя за третье место, сам диапазон будет, но значения останутся пустыми. Вот для этой сетки и потребовалось, чтобы диапазон с пустыми значениями ячеек не копировался на лист "Ход поединков" для вывода на печать с последующим вывешиванием информации о предстоящих поединках. Поэтому я и не стал запутывать вас разными диапазонами, т.к. структура кода одна и та же. По поводу "Не скопировал последние два:", - это было в полной версии книги. Сейчас не обращайте на это внимания, просто поправьте код так, чтобы он работал на примере в предыдущем вложении. Дальше я всё подстрою сам. Извините меня за то что не получается сразу объяснить правильно, так чтобы вам было понятно что мне нужно... И ещё раз спасибо, за то что помогаете и тратите своё время на меня!
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
14.11.2013, 17:31
Для всех один и тот же код, за исключением названия кода и диапазона копирования,
- для такого случая можно этот изменяемый диапазон передавать в параметре. Ну конечно нужно чуть изменить эту процедуру, а на каждую кнопку написать свою небольшую процедурку вызова.

Добавлено через 3 минуты
Или даже так - для вызова одну процедуру, которая анализирует имя вызывающей кнопки.
Т.е. всего 2 процедуры, или даже всё в одной можно совместить.
Но с двумя проще.
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
14.11.2013, 21:26
Кстати, Hugo (Здравствуйте! ) рекомендует Вам то-же, что и я выше. А у Вас там есть к чему и как. Вот как Вы думаете, когда назначаете ему диапазоны? Вот где-то так научите думать и железку.\
Теперь дальше. Я переделал. Почему у Вас не срабатывает specialcells - понять не могу. Может, кто-то с стороны подскажет. У меня, с моими (для експеримента, простенькими) формулами все работает. Но подозреваю, что это из-за логических составных в Ваших формулах. Будет время и силы ( ) - поэкспериментирую. Пробуйте. Но если честно - мне мое решение не совсем нравится. У меня работает, если будет работать у Вас - пользуйтесь. Если найду решение интереснее (или кто-то подправит) - обязательно скину.

Добавлено через 3 минуты
Не грузится, почему-то, хотя кричит, что все хорошо...
Поэтому просто код.. Занесите в книгу.
Кликните здесь для просмотра всего текста
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
Sub my_v3_Add_в_Ход_поединков_Восьмые_финалов()
Dim Sh As Worksheet, itm, marr(), i&, a&: i = 3
   For Each Sh In ThisWorkbook.Sheets
      If InStr(3, Sh.Name, "(") > 0 Then
         Sh.Select:  Sh.[b88:d90].Select
         With Sh.[b88:d90]:   marr = .Value:  End With
            For Each itm In marr
               Err.Number = 0: On Error Resume Next
                  If Len(itm) Then
                     If Err.Number = 0 Then
                        Application.ScreenUpdating = False
                        With Sheets("Ход поединков").Cells(i, 2)
                           .Resize(UBound(marr, 1), UBound(marr, 2)).Value = marr:  i = i + 24
                        End With
                        Application.ScreenUpdating = True
                        Exit For
                     End If
                  End If
               On Error GoTo 0
            Next 'each itm
      End If
   Next 'each sh
   Erase marr:  MsgBox Space(10) & "D O N E!"
End Sub


Добавлено через 11 минут
Забыл. Там после
Sh.Select: Sh.[b88:d90].Select
Поставьте еще Stop. Это только для Вас, что б Вы могли видеть, что творится. Потом, если все хорошо, это удалите вместе с Stop.
1
2 / 2 / 0
Регистрация: 09.02.2013
Сообщений: 100
14.11.2013, 23:27  [ТС]
Да, возможно. Но дело в том, что я ни фига не понимаю как это делается. Я не разбираюсь в кодах. Я даже, если честно, не совсем понял что вы предложили. Многие коды я подбирал методом тыка, сравнивая похожие примеры и убивая на это кучу времени в пылу азарта. Сейчас уже почти всё закончено, осталось слегка дооформить и опробовать на январских соревнованиях. В любом случае, спасибо за совет, и что заглянули в тему!

Добавлено через 1 минуту
Этот комментарий к сообщению #50...
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
14.11.2013, 23:38
Ну, уже как есть... Так уже заработало?
1
2 / 2 / 0
Регистрация: 09.02.2013
Сообщений: 100
14.11.2013, 23:55  [ТС]
Последний код работает! Только после его применения тебя выбрасывает на последний лист, что не совсем удобно. Да, и вы там упустили: i = i + 3 вместо i = i + 24. После применения Stop - остановился на первом листе...
Вот ещё вариант рабочего кода для сравнения (выдает всё как надо):
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub Добавить_в_Ход_поединков_За_3_места()
    Dim Sh As Worksheet, i As Long, x As Range
    i = 3
    Sheets("Ход поединков").Range("B3:D482").ClearContents
    For Each Sh In ThisWorkbook.Sheets
        If InStr(3, Sh.Name, "(") > 0 Then
            Set x = Sh.[B172:D174]
            If x.Text = "" Then
                Else
                Sheets("Ход поединков").Cells(i, 2).Resize(3, 3).Value = x.Value
                i = i + 3
            End If
        End If
    Next Sh
End Sub
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
15.11.2013, 00:02
Если удалите то, что я сказал - с какого листа начнете, на том и все будет оставаться.
А так - я уже и сам запутался. Там i=i+24, здесь i=i+3... И все для одно и того же. Но главное, что хоть что-то работает.
0
2 / 2 / 0
Регистрация: 09.02.2013
Сообщений: 100
15.11.2013, 00:04  [ТС]
Диапазоны сместились с B88:D90 на B172:D174 из-за добавления сетки поединков на 32 участников...

Добавлено через 2 минуты
Я не понял, что надо удалить? Я удалил только Stop...
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
15.11.2013, 00:12
В последнем коде (пост#51) удалите всю эту строку: Sh.Select: Sh.[b88:d90].Select и все будет выполняться без переходов по листам.
0
2 / 2 / 0
Регистрация: 09.02.2013
Сообщений: 100
15.11.2013, 00:45  [ТС]
Да, стало всё нормально! Спасибо! Теперь у меня два рабочих кода!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.11.2013, 00:45

Очистка значений ячеек макросом постоянно обновляемых ячеек
Здравствуйте, уважаемые) Помогите решить такую задачу. Есть некий журнал, нужно заполнять температуру с четкой исполнительской...

Копирование из ячеек
Добрый день! Необходима помощь в таком задании: Необходим скрипт VBA, который из ячейки А1 копирует информацию потом вставляет например в...

Копирование ячеек по 2 условиям V2
Добрый день! Возник такой вопрос, есть диапазон ячеек(города) и второй диапазон где хранятся коды товаров как найти строку по условиям...

Копирование ячеек по 2 условиям
Доброе утро! Есть определенная задача, суть такова: Добавить кнопку &quot;Скопировать ассортимент&quot;. Кнопка должна запускать функцию...

Копирование ячеек из шаблона
Задача Имеется шаблон - один лист в книге. (Шаблон.xlsx) Необходимо по команде(не важно какой) создать новую книгу с заданным именем и...


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

Или воспользуйтесь поиском по форуму:
58
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru