Новости:

Название темы должно отражать суть задачи.
Темы типа "ПОМОГИТЕ!!!", "Срочно!" и т.п. будут удаляться без объяснения причин

Главное меню

Последние сообщения

#21
Вопросы по Excel и VBA / Работа со столбцами ListBox бо...
Последний ответ от RuSoldatSe - 07.01.2026, 14:22:01
Добрый день.
Подскажите пож-та, как можно работать со столбцами ListBox более 10? Знаю что AddItem не позволяет создавать больше 10 столбцов. При этом я работаю с элементами UserForm (использование ячеек на листе не подходит (RowSource)). Можно значения элементов на UserForm загрузить в массив и передать его содержимое через .List. А как быть, если нужно в ListBox добавить несколько строк с разными значениями в 15 столбцах? Можно ли массив передавать в определенную строку, а не во весь ListBox? Пример во вложении. Спасибо за помощь.
#22
ДД. Есть task на добавление функционала в файл с VBA. Добавление аналитики, сравнение и выполнение условий если, то. Сюда файл не проходит
#23
Попробуйте так: в окне "Проверка данных" выберите в выпадающем списке: "Пользовательская формула" и введите формулу =NOT(REGEXMATCH(TO_TEXT(B3); "[,'""«»]|\.{3,}| {2,}|\s{2,}"))
Формула ищет запятые, апострофы, кавычки ("), кавычки-елочки («»), троеточие, два и более пробела подряд, пробельные символы

#24
Стоит задача запретить нерадивым юзерам загрязнять таблицу разнообразными спецсимволами и тд, а именно:

- чтобы нельзя было использовать запятые, апостроф, двойной пробел, троеточие и тп.

Долго искал, но в итоге нашел такую опцию, как Data validation rules и заполнил ее следующий образом:



Но вот беда, в нее не впихнуть несколько символов, пробовал перечислять их в кавычках и через запятую, это ничего не дает.

Попробовал продублировать проверку для этого же диапазона но уже на предмет другого символа, в итоге новый символ просто переписал старый.

Ну не может же быть, что в Гугл таблицах такой обрезанный функционал, что нельзя проверять содержимое больше чем на один символ. Подскажите как быть плиз... :-X
#25
Вопросы по Excel и VBA / Re: Макрос фильтрации столбца ...
Последний ответ от IrKa - 15.12.2025, 20:02:53
Дмитрий, спасибо Вам большое!
У меня тут у самой (ну, не без помощи ИИ, конечно))) тоже получилось выводить массив из зеленых дат.
Sub CollectGreenDates_AllDates_NoFilter_FontColor()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim curDate As Variant
    Dim dictDateStatus As Object ' дата -> True (все зелёные) или False (есть не-зелёное)
    Dim cellB As Range
    Dim greenFontRGB As Long
    Dim redFontRGB As Long
    Dim greensDates As Object ' список дат
    Dim key As Variant
    Dim msg As String
    Dim colI As String

    Set ws = ThisWorkbook.Sheets(1) ' замените на ваш лист
    lastRow = ws.Cells(ws.Rows.Count, "I").End(xlUp).Row
    colI = "I"

    ' Задайте конкретные RGB-значения для зелёного и красного шрифта
    greenFontRGB = RGB(0, 255, 0)   ' зеленый замените на ваш - здесь можно задавать вариации зеленого и крансого цветов
    redFontRGB = RGB(255, 0, 0)     ' красный; замените на ваш

    Set dictDateStatus = CreateObject("Scripting.Dictionary")
    dictDateStatus.CompareMode = vbTextCompare

    ' Сбор статуса по каждой дате
    For i = 2 To lastRow ' предполагаем заголовок в строке 1
        If Not IsEmpty(ws.Cells(i, colI).Value) Then
            curDate = ws.Cells(i, colI).Value
            Set cellB = ws.Cells(i, "B")

            If IsDate(curDate) Then
                Dim fColor As Long
                fColor = cellB.Font.Color

                If fColor = greenFontRGB Then
                    If Not dictDateStatus.Exists(curDate) Then
                        dictDateStatus(curDate) = True
                    Else
                        dictDateStatus(curDate) = dictDateStatus(curDate) And True
                    End If
                ElseIf fColor = redFontRGB Then
                    dictDateStatus(curDate) = False
                Else
                    dictDateStatus(curDate) = False
                End If
            End If
        End If
    Next i

    ' Собираем даты, где статус True (все зелёные)
    Set greensDates = CreateObject("System.Collections.ArrayList")

    For Each key In dictDateStatus.Keys
        If dictDateStatus(key) = True Then
            greensDates.Add key
        End If
    Next key

    ' Вывод
    If greensDates.Count > 0 Then
        msg = "Зелёные даты:" & vbCrLf
        For Each key In greensDates
            If IsDate(key) Then
                msg = msg & Format(CDate(key), "yyyy-mm-dd") & vbCrLf
            Else
                msg = msg & key & vbCrLf
            End If
        Next key
    Else
        msg = "Дат с полностью зелёными значениями в столбце B нет."
    End If

    MsgBox msg, vbInformation
End Sub
#26
Sub GetDateColor()
    Dim ws As Worksheet
    Dim dicDates As Object
    Dim llastr&, lr&, lcolor&
    Dim dt As Date
    Dim s$, scolor$
   
    Set ws = ActiveSheet
    Set dicDates = CreateObject("Scripting.Dictionary")
    dicDates.comparemode = 1
    With ws
        llastr = .Cells(.Rows.Count, "I").End(xlUp).Row
        For lr = 2 To llastr
            dt = .Cells(lr, 9).Value
            lcolor = .Cells(lr, 2).Font.Color
            If dt > 0 Then
                Select Case lcolor
                Case 255 'red
                    scolor = "красный"
                Case 5287936 'green
                    scolor = "зеленый"
                End Select
                If Not dicDates.Exists(dt) Then
                    dicDates.Add dt, scolor
                Else
                    If dicDates.Item(dt) <> scolor Then
                        dicDates.Item(dt) = "двойственная"
                    End If
                End If
            End If
        Next
    End With
   
    If dicDates.Count Then
        ws.Range("O2").Resize(dicDates.Count, 1).Value = Application.Transpose(dicDates.keys)
        ws.Range("N2").Resize(dicDates.Count, 1).Value = Application.Transpose(dicDates.items)
    End If
End Sub
#27
Вопросы по Excel и VBA / Re: Макрос фильтрации столбца ...
Последний ответ от IrKa - 15.12.2025, 19:12:32
Дмитрий, спасибо! :)  Буду благодарна, если найдете минутку посмотреть. Файл приложила.
Задача:
В столбце "I" - даты (они повторяются). В столбце "B" - числа двух цветов: красные и зеленые.
Что хочу получить:
Фильтруем по какой-то дате и, если для этой даты в столбце "B" только зеленые числа, то
в столбце "N" пишем "зеленая", в столбце "O" пишем эту дату.
Если для какой-то даты в столбце "B" только красные числа, то в столбце "N" пишем "красная", в столбце "O" пишем эту дату.
Если для какой-то даты в столбце "B" числа разного цвета (и зеленые, и красные), то в столбце "N" пишем "двойственная", в столбце "O" пишем эту дату.
То есть, мне в итоге нужно получить такую таблицу: "дата-цвет" (Я в файле написала пример, как это должно выглядеть).
#28
Вы бы приложили файл с данными и описали бы задачу применительно к нему. Здесь, на форуме. Глядишь и бесплатно ответ получите ;) Т.к. судя по описанию код не выглядит сложным.
#29
Вопросы по Excel и VBA / Re: Макрос фильтрации столбца ...
Последний ответ от IrKa - 15.12.2025, 17:15:20
Дмитрий, спасибо, что откликнулись!
Я поняла уже, что макрос вообще не корректный, не выполняет свою задачу(
А сколько у Вас стоит написать макрос под мою задачу?
#30
Так все правильно - если выводит сообщение, что ячейка не зеленая - то allGreen будет False и соответственно этот блок будет пропущен:
If allGreen Then
Яндекс.Метрика Рейтинг@Mail.ru