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

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

SAS888
Сообщения: 156
Зарегистрирован: 16 янв 2008, 08:28

...если хоть одна ячейка диапазона содержит формулу, несмотря, что все значения ячеек диапазона пустые, копирование производится. Если я удаляю формулы, то не производится.
Совершенно верно. Так и должно быть. Во первых, ячейка, содержащая формулу не есть пустая. Во-вторых, если, например, в ячейку ввести формулу сложения двух пустых ячеек, то результат будет равен нулю, т. е. не пустое значение.
Для решения Вашей задачи требуется уточнения:
1. Что возвращают формулы в указанном диапазоне? Число? текстовое значение? Или возможен любой вариант?
2. Считать ли пустой ячейку, в которой в результате расчета по формуле возвращается ноль?
VanBlack
Сообщения: 69
Зарегистрирован: 26 окт 2013, 15:28

Примерно так выглядит копируемый диапазон (в данном случае это B88:D90). Именно для него нужны данные изменения, т.к. если в группе з участника, то боя за 3-е место не будет и значения останутся пустыми. Получается везде текстовые значения, за исключением столбца "C", там могут быть цифры обозначающие спортивный разряд. Код будет применяться когда нулей в ячейках не будет. Все ячейки будут либо пустыми, либо как на вложении...
Вложения
01..jpg
VanBlack
Сообщения: 69
Зарегистрирован: 26 окт 2013, 15:28

Прилагаю ещё вложение. По условию, код должен скопировать диапазоны ячеек только первого и четвёртого листа в имени которого содержится скобка. Второй и пятый лист содержит пустые значения ячеек диапазона, а третий и шестой вообще ничего не содержит в указанном диапазоне, - их копировать не нужно.
Вложения
Primer 1..zip
(41.68 КБ) 49 скачиваний
SAS888
Сообщения: 156
Зарегистрирован: 16 янв 2008, 08:28

Можно так:

Код: Выделить всё

Sub Добавить_в_ход_поединков_За_3_места()
    Dim Sh As Worksheet, i As Long, x As Range
    i = 3
    For Each Sh In ThisWorkbook.Sheets
        If InStr(3, Sh.Name, "(") > 0 Then
            Set x = Sh.[B88 :D 90]
            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
Пример во вложении.
VanBlack
Сообщения: 69
Зарегистрирован: 26 окт 2013, 15:28

Да уж, как всё просто, - когда объяснят... :) Спасибо! Всё отлично работает!
Ответить