Страницы: 1
RSS
VBA. Неверно считается кол-во столбцов, range("C5:E5,G5,I5:M5").columns.count
 
Код
debug.Print range("C5:E5,G5,I5:M5").columns.count
Ожидается 9, выдает 3.
Почему?
И как получить 9?
 
колонки считает код, который вы написали
Код
debug.Print Intersect(range("C5:E5,G5,I5:M5"), rows(1)).count
учите матчасть. все написано (для тех, кто читает)
Изменено: Ігор Гончаренко - 01.02.2020 07:19:17
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал:
rows(1)
https://docs.microsoft.com/ru-ru/office/vba/api/excel.application.intersect
Пересечение диапазонов. Знаю, но конструкция "rows(1)" незнакомая.
В данном случае не понимаю с чем он пересечься должен.
Что есть "rows(1)"?
Изменено: kefirko - 01.02.2020 07:35:52
 
Цитата
Ігор Гончаренко написал:
debug.Print Intersect(range("C5:E5,G5,I5:M5"), rows(1)).count
 
а это я написал и тоже не считает))
давайте остановимся на таком варианте
Код
debug.Print range("C5:E5,G5,I5:M5").count
я обычно исправляю код до тех пор, пока он не начнет считать то, что мне нужно
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал:
давайте остановимся на таком варианте
Не остановимся :)
 
Код
debug.Print range("C5:E5,G5,I5:M6").count
Вернет неверное кол-во столбцов = 14.
Изменено: kefirko - 01.02.2020 08:24:32
 
Код
range("C5:E5,G5,I5:M5").Count

У меня 9. Но это подсчитывает количество ячеек.
У вас очепятка на М6
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Доброе время суток
Цитата
Alemox написал:
Но это подсчитывает количество ячеек.
Вывод - нужно писать функцию для таких случаев. Плюс явно оговаривать, сколько должно быть столбцов в перекрывающихся по диапазонам столбцов непрерывных областях. Например, для A1:F3,D7:R16 - сколько должно быть получено число столбцов?
Вариант для подсчёта уникального числа столбцов в составном диапазоне
Код
Public Function GetColumnCount(ByVal forRange As Range) As Long
    Dim pDict As Object, pArea As Range, i As Long, startCol As Long
    Set pDict = CreateObject("Scripting.Dictionary")
    For Each pArea In forRange.Areas
        startCol = pArea.Column - 1
        For i = 1 To pArea.Columns.Count
            pDict(startCol + i) = 0
        Next
    Next
    GetColumnCount = pDict.Count
End Function
Изменено: Андрей VG - 01.02.2020 12:44:17
 
Цитата
Alemox написал:
У вас очепятка на М6
Это не очепятка, это специально.
 
тот вариант, что я пытался изобразить в начале для любого диапазона ( мне сослепу показалось что в range был диапазон колонок, а не ячеек)
Код
debug.Print Intersect(range("C5:E5,G5,I5:M5").EntireColumn, rows(1)).count
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал:
мне сослепу показалось что в range был диапазон колонок, а не ячеек
Оно. Хитрый код :) и про rows(1) допёр. Спасибо.
Изменено: kefirko - 01.02.2020 14:08:15
 
Здравствуйте, коллеги! Присоединяюсь к автору темы - Игорь, отличный "трюк"!
Владимир
 
Ради справедливости, пример из справочной системы:
Код
This example displays the number of columns in the selection on 
Sheet1. If more than one area is selected, the example loops through each 
area.Worksheets("Sheet1").Activate
areaCount = Selection.Areas.Count
If areaCount <= 1 Then
    MsgBox "The selection contains " & _
        Selection.Columns.Count & " columns."
Else
    For i = 1 To areaCount
        MsgBox "Area " & i & " of the selection contains " & _
            Selection.Areas(i).Columns.Count & " columns."
    Next i
End If
А так да, идея со строкой интересная
 
range("A1:Y1, B3:Z3").Select
что даст сумма колонок по областях? 25+25 = 50
а сколько колонок в этом диапазоне? 26
 
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Это уже зависит от постановки задачи - что именно нужно. Например, я вижу выделенные две таблицы, и не факт, что пересечение их столбцов имеет смысл. А так, повторюсь
Цитата
Alec Perle написал:
Ради справедливости
 
Цитата
Alec Perle написал:
Это уже зависит от постановки задачи
это точно! решение действительно зависит от постановки задачи)
я как обращаю внимание какая разница в результатах
на вопрос сколько колонок в областях диапазона?: ответ 50
сколько колонок в диапазоне? ответ 26
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Страницы: 1
Наверх