Страницы: 1
RSS
извлечение данных из окрашенных ячеек, извлечение данных из окрашенных ячеек на новый лист
 
Добрый день, есть данные на 1 листе, необходимо то что выделенно цветом перенести на другой лист
 
Стоит задача из листа 1 вытянуть данные окрашенные цветом на лист 2, возможно ли это?
 
можно макросом. Но у вас в файле закрашенные ячейки пустые
 
Цитата
Ugien89 Ugien89 написал: вытянуть данные окрашенные цветом
Это возможно.
По аналогии:
Код
Function getRGB1(FCell As Range) As String 
    Dim xColor As String 
    xColor = CStr(FCell.Interior.Color) 
    xColor = Right("000000" & Hex(xColor), 6) 
    getRGB1 = Right(xColor, 2) & Mid(xColor, 3, 2) & Left(xColor, 2) 
End Function 
 
' Определение количества залитых ячеек определённым цветом 
Public Function СУММ_RGB(Mass As Range, kontrol As Range) As Integer 
' Mass - контролируемый массив 
' kontrol - ячейка с цветом которой сравнивается. 
СУММ_RGB = 0 
        For i = 1 To Mass.Count 
            If getRGB1(Mass.Rows(i)) = getRGB1(kontrol.Rows(1)) Then 
                СУММ_RGB = СУММ_RGB + 1 
            End If 
        Next i 
End Function 
 
копировал код, открыл файл, нажал Alt+F11, вставил код, play в итоге ничего не происходит. Можете подсказать где я ошибся
 
Цитата
Ugien89 Ugien89 написал:
Можете подсказать где я ошибся
Не показали файл с Вашей ошибкой
 
_Igor_61, Ugien89 Ugien89, так у Туточкина функции, а не Sub
Функции вводятся на листе Excel, пишешь равно, потом название функции, потом открываешь скобки, вводишь аргументы, закрываешь скобки и клавиша Enter
=getRGB1(
Изменено: New - 29.12.2021 15:02:57
 
Цитата
Ugien89 Ugien89 написал:
Можете подсказать где я ошибся
Везде.
я же написал - "По аналогии:"
Т.е. код надо поправить по вашему желанию вашими руками. Вы же не сказали что делать? Перенести данные куда? В какую ячейку? Сколько раз? Замостить весь лист? ...
 
Цитата
Ugien89 Ugien89: на лист 2
как это будет выглядеть в итоге?

tutochkin, зачем так сложно?
Просто же
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
Set rng = Range("D2:E19")
Вот любишь ты хардкодить) Добавят строку и привет
 
Цитата
Jack Famous написал:
tutochkin , зачем так сложно?
Да совсем не сложно... Это рабочий код с определённой задачи - подсчёт количества залитых ячеек определённым цветом с контролем определённого диапазона.
Я не писал код под задачу топикстартера поскольку постановки задачи нет... Было спрошено - можно? Да, можно :)

Я вообще просто скопипастил из своих записок...
Изменено: tutochkin - 29.12.2021 15:13:17
 
Цитата
написал:
вытянуть данные окрашенные цветом
версия Excel какая? Начиная с 2007 есть такая штука - фильтр по цвету :) отфильтровали, скопировали, перенесли.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
New: Вот любишь ты хардкодить) Добавят строку и привет
хардкор, я так понимаю, в фиксированном диапазоне? Ну да, ну да…
Давай тогда Set rng = ActiveSheet.UsedRange и погнали пиво пить, пока работает  :D Униврсальненько  :)

Ugien89 Ugien89, зачем 2 раза никнейм?
Изменено: Jack Famous - 29.12.2021 15:23:25
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
ввел некоторые коррективы по постановке задачи, есть лист1, необходимо с помощью макроса получить результат на листе 2
 
Цитата
Jack Famous написал:
погнали пиво пить, пока работает
)))) Шутник). Я имел ввиду найти последнюю строку типа lastrow = cells(rows.count, "c").end(xlup).row
Изменено: New - 29.12.2021 15:45:28
 
Ugien89 Ugien89, и снова не правильный :)
 
почему?
 
Ugien89 Ugien89,
потому что по первым строкам шло копирование построчно, а по последним двум со сдвигом на одну строку.
Вам проще всего воспользоваться советом Дмитрий(The_Prist) Щербаков...
Изменено: tutochkin - 29.12.2021 15:42:44
 
речь об этом?
 
Цитата
New: Я имел ввиду найти последнюю строку
а если в D больше строк заполнено вниз?
Зачем мне придумывать себе проблемы?) Шо показано, то и наказано  :D
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Код
Sub CopyColored()
    With ActiveSheet
        Dim u As Long
        Dim y As Long
        For y = 1 To .UsedRange.Row + .UsedRange.Rows.Count - 1
            If .Cells(y, 4).Interior.Color <> 16777215 Then
                u = u + 1
                .Cells(y, 2).Resize(1, 4).Copy Sheets(2).Cells(u, 1)
            End If
        Next
    End With
End Sub
 
вот ещё вариант, см. файл

Код
Sub Test()
Dim ArrayToFind As Variant, iItem As Variant, Rng As Range, Sht1 As Worksheet, Sht2 As Worksheet, LastRow As Long

    'запоминаем названия листов в переменные
    Set Sht1 = Worksheets("Лист1")
    Set Sht2 = Worksheets("Лист2")
    
    'очищаем Лист2
    Sht2.UsedRange.Clear
    
    'перечисляем значения для поиска
    ArrayToFind = Array("ФГ", "ФО", "ФЯ 50-я рейка", "ФР", "ФОР", "ФГР")
    
    For Each iItem In ArrayToFind
        'поиск каждого значения на Лист1 в столбцах В:C
        Set Rng = Sht1.Columns("B:C").Find(iItem, , xlFormulas, xlWhole)
        'если нашли
        If Not Rng Is Nothing Then
            'записываем на Лист2
            With Sht2
                LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
                .Cells(LastRow, 1) = iItem 'Наименование изделия
                .Cells(LastRow, 2) = Rng.Offset(0, 1) 'длина
                .Cells(LastRow, 3) = Rng.Offset(0, 2) 'ширина
            End With
        End If
    Next iItem
    MsgBox "Данные скопированы!", vbInformation, "Конец"
End Sub
Изменено: New - 29.12.2021 16:11:44
 
Для автоматического обновления нужно этот код вставить в модуль Лист1
Код
Private Sub Worksheet_Deactivate()
    CopyColored
End Sub
Это в стандартный модуль
Код
Sub CopyColored()
   Sheets("Лист2").Cells.Clear

    With Sheets("Лист1")
        Dim u As Long
        Dim y As Long
        For y = 1 To .UsedRange.Row + .UsedRange.Rows.Count - 1
            If .Cells(y, 4).Interior.Color <> 16777215 Then
                u = u + 1
                .Cells(y, 2).Resize(1, 4).Copy Sheets("Лист2").Cells(u, 1)
            End If
        Next
    End With
End Sub
Изменено: МатросНаЗебре - 29.12.2021 16:44:35 (Sheets("Лист2").Cells.Clear)
 
спасибо большое код просто шикарен, удовлетворяет всем моим требованиям
Страницы: 1
Наверх