Notice: Use of undefined constant REQUEST_URI - assumed 'REQUEST_URI' in /var/www/www-root/data/www/sound-talk.ru/index.php on line 2

Notice: Use of undefined constant DOCUMENT_ROOT - assumed 'DOCUMENT_ROOT' in /var/www/www-root/data/www/sound-talk.ru/index.php on line 5

Notice: Use of undefined constant REQUEST_URI - assumed 'REQUEST_URI' in /var/www/www-root/data/www/sound-talk.ru/index.php on line 5

Notice: Use of undefined constant DOCUMENT_ROOT - assumed 'DOCUMENT_ROOT' in /var/www/www-root/data/www/sound-talk.ru/index.php on line 11

Notice: Use of undefined constant REQUEST_URI - assumed 'REQUEST_URI' in /var/www/www-root/data/www/sound-talk.ru/index.php on line 11

Notice: Use of undefined constant REQUEST_URI - assumed 'REQUEST_URI' in /var/www/www-root/data/www/sound-talk.ru/index.php on line 28

Notice: Use of undefined constant REQUEST_URI - assumed 'REQUEST_URI' in /var/www/www-root/data/www/sound-talk.ru/index.php on line 28

Notice: Use of undefined constant REQUEST_URI - assumed 'REQUEST_URI' in /var/www/www-root/data/www/sound-talk.ru/index.php on line 28

Notice: Undefined variable: flag in /var/www/www-root/data/www/sound-talk.ru/index.php on line 28

Notice: Undefined variable: adsense7 in /var/www/www-root/data/www/sound-talk.ru/index.php on line 39

Notice: Undefined variable: adsense6 in /var/www/www-root/data/www/sound-talk.ru/index.php on line 40
Как узнать номер колонки в excel vba. Excel VBA - для следующего цикла - найти номер столбца отображаемых столбцов и результат сохранен

VBA макрос для поиска скрытых строк и столбцов на листе Excel. Как узнать номер колонки в excel vba


VBA макрос для поиска скрытых строк и столбцов на листе Excel

Данные исходные коды VBA-макросов умеют быстро находить все скрытые строки и столбцы на листе Excel. Также они выводят всю информацию о скрытых строках и столбцах. Номера строк отображаются числами, а номера столбцов преобразуются в буквы заголовков, что очень удобно.

Как найти все скрытые строки на листе Excel с помощью макроса

У нас иметься таблица с данными по заказам, но некоторые строки листа скрыты:

Необходимо узнать сколько и какие строки скрытии от визуального анализа таблицы заказов. По умолчанию Excel не располагает таким инструментом, который смог бы решить данную задачу в пару кликов мышкой. Вручную выполнить задачу можно, но сложно. Особенно если после отображения скрытых строк нам нужно снова их скрывать. Кроме того, лист может быть защищен от изменений паролем. Оптимальным решением данной задачи будет написание собственного макроса для отображения информации о скрытых строках.

Чтобы написать свой макрос откройте редактор кода макроса: «РАЗРАБОТЧИК»-«Код»-«Visual Basic» или нажмите комбинацию клавиш ALT+F11:

В редакторе вставьте новый модуль выбрав инструмент «Insert»-«Module» и введите в него этот код:

Sub HiddenLinesInfo()Dim i As LongDim text As StringDim pervoj As Stringtext = "В данном листе скрыты следующие строки: "For i = 1 To ActiveSheet.Rows.CountIf ActiveSheet.Rows(i).Hidden = True ThenIf pervoj = "" Thenpervoj = iEnd IfElseIf pervoj <> "" Thentext = text & vbNewLine & pervoj & ":" & i - 1pervoj = ""ElseIf i > ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row ThenExit ForEnd IfEnd IfEnd IfNextMsgBox textEnd Sub

Теперь если в таблице заказов необходимо получить информацию о скрытых строках, тогда выберите инструмент для запуска макроса: «РАЗРАБОТЧИК»-«Код»-«Макросы»-«HiddenLinesInfo»-«Выполнить».

В результате после запуска макроса отобразиться сообщение с информацией о всех скрытых строках таблицы заказов.



Описание исходного VBA-кода для поиска скрытых строк

В начале данного кода объявляются сразу 3 переменные:

  1. i – счетчик циклов.
  2. text – содержит текст для текущего сообщения информации о скрытых строках.
  3. pervoj – номер первой скрытой строки в группе скрытых строк.

В начале тела кода макроса для переменной text присваиваем начало текста сообщения. После выполняется цикл, в котором проверяться по очереди все строки в пределах используемого диапазона листа. И определяется какие из них скрытые. Если текущая строка является скрытой, значит запускается проверка значения переменной pervoj. Если в переменную еще не было присвоено ни одно значение, тогда для нее присваивается номер первой скрытой строки в отдельной группе скрытых строк. Дальше проверяется и выполняется следующее условие. Если проверяемая строка не является скрытой и переменная pervoj уже содержит в своем значении номер первой скрытой сроки, тогда выполняется целый ряд следующих операций:

  1. К тексту в переменной text дописывается (с новой строки) номер первой скрытой строки из текущей группы скрытых строк.
  2. К тексту в переменной text дописывается двоеточие и номер последней строки из текущей группы строк. Данное значение взято из счетчика цикла текущее числовое значение в переменной i-1.
  3. Удаляется значение из переменной pervoj. Таким образом создается возможность для запуска этих же операций для следующей группы скрытых строк.

В конце кода макроса выполняются инструкции для последнего условия. Если проверяемая текущая строка не является скрытой и находиться ниже последней ячейки используемого диапазона листа, тогда выполняется выход из цикла проверки строк на скрытость.

Примечание. Последняя ячейка используемого диапазона листа – это последняя ячейка, которая имеет любое изменение: новое значение, новый формат отображения значений, измененный цвет заливки тип границ. И максимально отдаленная от первой ячейки листа A1.

В самом конце макроса вызывается сообщение в теле которого должно содержаться текстовое значение из переменной text.

Если исходная таблица не содержит ни одной скрытой строки, тогда после запуска макроса будет отображаться только первая строка текста из переменной text: «В данном листе скрыты следующие строки:»

Такое сообщение для данной ситуации является немного ошибочным. Если нужно сделать так, чтобы при отсутствии скрытых строк в таблице макрос отобразил другой текст сообщения, нужно задекларировать еще одну булевою переменную HidViz логического типа Boolean:

Dim HidViz As Boolean

В ней будет содержаться одно из двух традиционных логических значений True or Fasle (истина или ложь), в зависимости от того будет ли таблица содержать хотя-бы одну скрытую строку или нет. Далее после строки кода макроса:

If ActiveSheet.Rows(i).Hidden = True Then

дописываем инструкцию изменяющую логическое значение для переменной HidViz:

HidViz = True

Дополнительно в конце кода перед строкой:

MsgBox text

добавьте инструкции для изменения текста сообщения на альтернативный, в тому случаи если не найдено ни одной скрытой строки в исходной таблице:

If HidViz = False Then text = "На текущем листе нет ни одной скрытой строки!"

Полная версия измененного кода макроса выглядит так:

Sub HiddenLinesInfo()Dim i As LongDim text As StringDim pervoj As StringDim HidViz As Booleantext = "В данном листе скрыты следующие строки: "For i = 1 To ActiveSheet.Rows.CountIf ActiveSheet.Rows(i).Hidden = True ThenHidViz = TrueIf pervoj = "" Thenpervoj = iEnd IfElseIf pervoj <> "" Thentext = text & vbNewLine & pervoj & ":" & i - 1pervoj = ""ElseIf i > ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row ThenExit ForEnd IfEnd IfEnd IfNextIf HidViz = False Then text = "На текущем листе нет ни одной скрытой строки!"MsgBox textEnd Sub

Результат действия измененного макроса в тому случаи если скрытые строки отсутствуют:

Поиск скрытых столбцов на листе Excel используя VBA-макрос

Но что если необходимо сделать так чтобы макрос показывал информацию не о скрытых строках, а и о скрытых столбцах таблицы:

В таком случае сделаем так:

  1. Скопируйте выше описанный код макроса для отображения информации о скрытых строках в этот же модуль и переименуйте его на «HiddenColumnInfo».
  2. Измените тексты сообщений, а именно измените по смыслу слова «строки» на «столбцы».
  3. В коде измените все свойства где встречается Rows на Columns.
  4. Измените строку для отображения текста сообщения с информацией о скрытых столбцах. Ведь заголовки столбцов у нас отображаются буквами, а не числами. Для этого воспользуемся строкой кода, которая умеет возвращать букву столбца VBA. Поэтому вместо строки:

    pervoj = i

    пишем:

    pervoj = Split(Cells(1, i).Address, "$")(1)

    a вместо строки для вывода сообщения:

    text = text & vbNewLine & pervoj & ":" & i – 1

    пишем модифицированный код генерации сообщений с буквами для заголовков столбцов:

    text = text & vbNewLine & pervoj & ":" & Split(Cells(1, i - 1).Address, "$")(1)

Код макроса для получения информации о скрытых столбцах в таблице выглядит следующим образом:

Sub HiddenColumnInfo()Dim i As LongDim text As StringDim pervoj As StringDim HidViz As Booleantext = "В данном листе скрыты следующие столбцы: "For i = 1 To ActiveSheet.Columns.CountIf ActiveSheet.Columns(i).Hidden = True ThenHidViz = TrueIf pervoj = "" Thenpervoj = Split(Cells(1, i).Address, "$")(1)End IfElseIf pervoj <> "" Thentext = text & vbNewLine & pervoj & ":" & Split(Cells(1, i - 1).Address, "$")(1)pervoj = ""ElseIf i > ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Column ThenExit ForEnd IfEnd IfEnd IfNextIf HidViz = False Then text = "На текущем листе нет ни одного скрытого столбца!"MsgBox textEnd Sub

Пример работы макроса HiddenColumnInfo в действии:

Обратите внимание что теперь вместо числовых номеров, в сообщении отображаются буквы заголовков столбцов. Это очень удобно и правильно!

Таким образом мы создали новый макрос, который предназначен для работы со скрытыми столбцами. За основу использовали предыдущий код макроса.

В этот же модуль можно написать еще один 3-тий макрос, который будет вызывать поочередно эти два макроса описаны в данном примере. Одним словом, с помощью простейшего кода VBA выполним запуск двух макросов из другого макроса Excel:

Sub HiddenLineColumnInfo()HiddenLinesInfoHiddenColumnInfoEnd Sub

Этот макрос сначала позволит нам получить всю информацию о скрытых строках, а потом и о скрытых столбцах таблицы в один клик мышкой. Теперь нам не нужно по отдельности запускать оба макроса, достаточно лишь запустить их из «РАЗРАБОТЧИК»-«Код»-«Макросы»-«HiddenLineColumnInfo»-«Выполнить».

exceltable.com

vba - Excel VBA - для следующего цикла - найти номер столбца отображаемых столбцов и результат сохранен

Это мой первый вопрос, задающий вопрос, поэтому, пожалуйста, несите меня.

Я сделал макрос, чтобы скрыть столбцы в именованном диапазоне на основе критериев, используя цикл FOR-NEXT. Результат всегда отображает 2 столбца.

С полученными 2 столбцами я делаю расчеты.

Я столкнулся с проблемой, чтобы получить номер столбца, используя vba из итоговых отображаемых столбцов, и использовать их в формуле смещения, чтобы выполнить вычисления.

Может ли кто-нибудь помочь? благодаря

Public Sub Custom_Report_Monthly() On Error Resume Next If Len(Range("Rpt_Type_M").Value) < 1 Then MsgBox "Select Report Type" GoTo ExitSub ElseIf Len(Range("Select_Month").Value) < 1 Then MsgBox "Select Month" GoTo ExitSub End If ActiveSheet.Range("D_columns").EntireColumn.Hidden = True If Range("Rpt_Type_M").Value = "Quantity" Then For Each c In Range("Titles") If c.Value = "Quantity" Then c.Columns.EntireColumn.Hidden = False End If Next ElseIf Range("Rpt_Type_M").Value = "Sales" Then For Each c In Range("Titles") If c.Value = "Sales" Then c.Columns.EntireColumn.Hidden = False End If Next ElseIf Range("Rpt_Type_M").Value = "Cost" Then For Each c In Range("Titles") If c.Value = "Cost" Then c.Columns.EntireColumn.Hidden = False End If Next ElseIf Range("Rpt_Type_M").Value = "Sales+Cost" Then For Each c In Range("Titles") If c.Value = "Sales" Then c.Columns.EntireColumn.Hidden = False End If Next For Each c In Range("Titles") If c.Value = "Cost" Then c.Columns.EntireColumn.Hidden = False End If Next End If For Each c In Range("P_Months") If Month(c.Value) <> Range("Select_Month_Num").Value Then c.Columns.EntireColumn.Hidden = True End If Next For Each col In Range("D_columns") ' **this is the block where i am having problem** If col.EntireColumn.Hidden = False Then MsgBox (Range("col").Column) End If Next Call Hide_Count_Columns ExitSub: End Sub задан Mudasser 27 июля '13 в 15:18 источник поделиться

qaru.site

Решение: Как определить номер строки в столбце в VB Excel

Формулировка задачи:

Здраствуйте! Столкнулся со следующей проблемой: Есть колонка, содержащая данные в след виде А1 1 Иванов 2 Иванов 3 Иванов 4 Сидоров 5 Сидоров 6 Петров 7 Петров 8 Петров Очень хочется (точнее очень надо, а то руки отваливаются вставлять пустые строки и в глазах троится, когда записей около 3000 шт): 1. Найти номер строки где начинаются след одинаковые значения 2. Добавить 2 пустые строки 3. Добавить в пустые строки столбца Фамилии 4. Создать переменные, содержащие номер строки и номер столбца, для посл операций с данными с соседними столбцами (как получить номер) И так для каждой фамилии пока не кончатся данные В результате: А1 1 Иванов 2 Иванов 3 Иванов 4 Иванов – добавл строки и фамилии 5 Иванов – добавл строки и фамилии 6 Сидоров 7 Сидоров 8 Сидоров – добавл строки и фамилии 9 Сидоров – добавл строки и фамилии 10 Петров 11 Петров 12 Петров 13 Петров – добавл строки и фамилии 14 Петров – добавл строки и фамилии Очень жду ответа. Думаю код будет не сложный, по крайней мере я на это надеюсь. Заранее огромнейшей СПАСИБ. Алексей.

  Узнать стоимость выполнения Вашей работы

Код к задаче: «Как определить номер строки в столбце в VB Excel - VBA»

textual Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)   Dim R As Long, T As String, SummaJ As Double, SummaS As Double   Cancel = True   R = 4   T = Cells(R, 4)   SummaJ = 0   SummaS = 0   Do While Cells(R, 4) <> ''    If Cells(R, 4) <> T Then       Rows(R).Insert       Rows(R).Insert       Cells(R, 4) = SummaJ       Cells(R + 1, 4) = SummaS       R = R + 2       T = Cells(R, 4)       SummaJ = Cells(R, 10)       SummaS = Cells(R, 19)     Else       SummaJ = SummaJ + Cells(R, 10)       SummaS = SummaS + Cells(R, 19)     End If     R = R + 1   Loop End Sub

Вы всегда можете заказать любую учебную работу у наших авторов от 20 руб.

  Заказать

СДЕЛАЙТЕ РЕПОСТ

studassistent.ru