Новости:

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

Главное меню

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

#1
Цитата: RuSoldatSe от 07.01.2026, 17:10:46Т.е. после выполнения этой команды, получается уже можно использовать добавление новой строки (.AddItem) и как обычно работать со номерами столбцов > 10?
Попробовать самостоятельно не получается? Нужно какое-то отдельное подтверждение? :) Если честно - думал, что специально проставленный комментарий вполне красноречиво описывает эту возможность  ;)
#2
Вопросы по Excel и VBA / Re: Работа со столбцами ListBo...
Последний ответ от RuSoldatSe - 07.01.2026, 17:10:46
Спасибо, не знал что можно закинуть пустой массив (.List = Arr()) чтоб "открылись" больше 10 столбцов. Т.е. после выполнения этой команды, получается уже можно использовать добавление новой строки (.AddItem) и как обычно работать со номерами столбцов > 10? А то я планировал добавлять "с запасом" пустых строк (ReDim Arr(10, 1 To cols)), а потом пробегаться по ListBox и удалять фактически пустые.
#3
Пример совершенно не информативный, т.к. не к чему хоть что-то привязать и понять, что откуда Вы собираетесь записывать в ListBox. Данных-то вообще нет - пустой лист. По коду тоже нет понимания, что откуда планируется записывать.
Грубо вот как-то так - под пример сами подстраивайте:
  cols = 15               ' кол-во столбцов
  ReDim Arr(0, 1 To cols) ' создаем массив с одной строкой и нужным количеством столбцов
  With ListBox1
    .ColumnCount = cols
    .List = Arr()    ' если назначить в качестве данных даже пустой массив - это позволит дальше работать с кол-вом столбцов > 10
    For r = 2 To 20 'цикл по строкам
      If Cells(r, 1) = "некое условие" Then
        .AddItem Empty
        For c = 1 To cols
          .List(i, c-1) = Cells(r, c).Value
        Next
        i = i + 1
      End If
    Next
    .RemoveItem .ListCount - 1  'Удаляем строку, которая использовалась для трюка с добавлением более 10-ти столбцов
  End With
#4
Вопросы по Excel и VBA / Работа со столбцами ListBox бо...
Последний ответ от RuSoldatSe - 07.01.2026, 14:22:01
Добрый день.
Подскажите пож-та, как можно работать со столбцами ListBox более 10? Знаю что AddItem не позволяет создавать больше 10 столбцов. При этом я работаю с элементами UserForm (использование ячеек на листе не подходит (RowSource)). Можно значения элементов на UserForm загрузить в массив и передать его содержимое через .List. А как быть, если нужно в ListBox добавить несколько строк с разными значениями в 15 столбцах? Можно ли массив передавать в определенную строку, а не во весь ListBox? Пример во вложении. Спасибо за помощь.
#5
ДД. Есть task на добавление функционала в файл с VBA. Добавление аналитики, сравнение и выполнение условий если, то. Сюда файл не проходит
#6
Попробуйте так: в окне "Проверка данных" выберите в выпадающем списке: "Пользовательская формула" и введите формулу =NOT(REGEXMATCH(TO_TEXT(B3); "[,'""«»]|\.{3,}| {2,}|\s{2,}"))
Формула ищет запятые, апострофы, кавычки ("), кавычки-елочки («»), троеточие, два и более пробела подряд, пробельные символы

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

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

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



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

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

Ну не может же быть, что в Гугл таблицах такой обрезанный функционал, что нельзя проверять содержимое больше чем на один символ. Подскажите как быть плиз... :-X
#8
Вопросы по 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
#9
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
#10
Вопросы по Excel и VBA / Re: Макрос фильтрации столбца ...
Последний ответ от IrKa - 15.12.2025, 19:12:32
Дмитрий, спасибо! :)  Буду благодарна, если найдете минутку посмотреть. Файл приложила.
Задача:
В столбце "I" - даты (они повторяются). В столбце "B" - числа двух цветов: красные и зеленые.
Что хочу получить:
Фильтруем по какой-то дате и, если для этой даты в столбце "B" только зеленые числа, то
в столбце "N" пишем "зеленая", в столбце "O" пишем эту дату.
Если для какой-то даты в столбце "B" только красные числа, то в столбце "N" пишем "красная", в столбце "O" пишем эту дату.
Если для какой-то даты в столбце "B" числа разного цвета (и зеленые, и красные), то в столбце "N" пишем "двойственная", в столбце "O" пишем эту дату.
То есть, мне в итоге нужно получить такую таблицу: "дата-цвет" (Я в файле написала пример, как это должно выглядеть).
Яндекс.Метрика Рейтинг@Mail.ru