Как заполнить столбец в excel vba

 

Jey13

Пользователь

Сообщений: 14
Регистрация: 23.02.2016

Добрый вечер всем!
Возник один, казалось бы легкий, вопрос, никак не могу решить.
Книга эксель состоит из нескольких листов, на одном листе нужно автоматически заполнять столбцы: то есть столбцу А присвоить значение «1+», столбцу B — «2+» и тд. (с первой ячейки и вниз до конца)
Пыталась сделать через range и value, но эксель выдает ошибку, мол «1+»  — это не число, на кавычки тоже ругается.
Не могли бы вы подсказать, как можно это реализовать?
Заранее огромное спасибо!

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

#2

10.03.2016 18:30:22

Цитата
на кавычки тоже ругается

«»1+»»

 

Udik

Пользователь

Сообщений: 372
Регистрация: 07.03.2016

excel 2016х64 Контакты в профиле

#3

10.03.2016 18:38:41

или нечто наподобе

Код
Public Sub test()
Dim i As Integer

For i = 1 To 10
Cells(i, 1).Value = i & "+"
Next i
End Sub

Арфы — нет, возьмите бубен.

 

Jey13

Пользователь

Сообщений: 14
Регистрация: 23.02.2016

Udik, в таком случае он заполняет ячейки последовательно, как 1+, 2+ и тд (на первом листе)
а мне нужно, чтобы значение 1+ заполнялось от первой ячейки и вниз до конца. так же в другом столбце 30+ (например), 60+, 90+ и тд (лист 2)
в Макрос 2 я попробовала выполнить заполнение ячеек значением 30+, но эксель выдает ошибку.

Прикрепленные файлы

  • Книга1.xlsm (26.26 КБ)

Изменено: Jey1310.03.2016 19:03:41

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

#5

10.03.2016 19:10:03

Код
Sub Макрос2()
    With Worksheets("Лист1")
        .Range("A1:A600").Value = "30+"
    End With
End Sub
 

Jey13

Пользователь

Сообщений: 14
Регистрация: 23.02.2016

vikttur,спасибо большое! все оказалось куда проще, чем я думала :)

 

Udik

Пользователь

Сообщений: 372
Регистрация: 07.03.2016

excel 2016х64 Контакты в профиле

#7

10.03.2016 19:48:51

Цитата
Jey13 написал:
в Макрос 2 я попробовала выполнить заполнение ячеек значением 30+, но эксель выдает ошибку.

Удивительно, если бы эксель не ругался  8)

а если надо

Цитата
Jey13 написал:
столбцу А присвоить значение «1+», столбцу B — «2+» и тд. (с первой ячейки и вниз до конца)
Код
Public Sub test()
Dim i As Integer, j%
Dim strBuff As String
For j = 1 To 20
For i = 1 To 10
Cells(i, j).Value = j & "+"
Next i
Next j
End Sub

Арфы — нет, возьмите бубен.

 

Jey13

Пользователь

Сообщений: 14
Регистрация: 23.02.2016

#8

10.03.2016 21:41:59

Udik,спасибо вам :)

Автозаполнение ячеек в заданном диапазоне с помощью метода Range.AutoFill. Синтаксис, параметры, примеры автозаполнения из кода VBA Excel.

Определение

Определение метода Range.AutoFill:

AutoFill — это метод объекта Range, который выполняет автозаполнение ячеек в указанном диапазоне.

Синтаксис

Синтаксис метода Range.AutoFill:

Expression.AutoFill (Destination, Type)

Expression — выражение (переменная), возвращающее объект Range.

Параметры

Параметры метода Range.AutoFill:

Параметр Описание
Destination Диапазон ячеек, который необходимо заполнить. В него должен быть включен исходный диапазон (Expression). Обязательный параметр.
Type Константа из коллекции XlAutoFillType, задающая тип автозаполнения. Необязательный параметр.

Константа из коллекции XlAutoFillType указывает, как должен быть заполнен целевой диапазон (Destination) в зависимости от содержимого диапазона исходных данных (Expression). По умолчанию используется константа xlFillDefault (0), когда приложение Excel само определяет значения и форматы, используемые для заполнения целевого диапазона.

Примеры с Range.AutoFill

Примеры автозаполнения целевых диапазонов из кода VBA Excel с помощью метода AutoFill объекта Range.

Пример 1

Автозаполнение указанного диапазона (Destination), состоящего из нескольких строк и столбцов, данными одной ячейки (Expression) в зависимости от ее расположения в целевом диапазоне:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

Sub Primer1()

    ‘Удаляем границы ячеек, если уже были запуски кода

    Range(«A1:E20»).Borders.LineStyle = xlNone

    ‘Ячейка Expression в верхнем левом углу Destination

    Range(«A1») = 111

    Range(«A1»).AutoFill Range(«A1:E5»)

    Range(«A1:E5»).Borders(xlEdgeBottom).LineStyle = True

    ‘Ячейка Expression в нижнем левом углу Destination

    Range(«A10») = 222

    Range(«A10»).AutoFill Range(«A6:E10»)

    Range(«A6:E10»).Borders(xlEdgeBottom).LineStyle = True

    ‘Ячейка Expression в верхнем правом углу Destination

    Range(«E11») = 333

    Range(«E11»).AutoFill Range(«A11:E15»)

    Range(«A11:E15»).Borders(xlEdgeBottom).LineStyle = True

    ‘Ячейка Expression в нижнем правом углу Destination

    Range(«E20») = «444»

    Range(«E20»).AutoFill Range(«A16:E20»)

End Sub

Целевые диапазоны для наглядности разделены горизонтальными линиями. Ячейка (Expression) может находиться только по углам целевого диапазона (Destination), иначе будет сгенерирована ошибка.

Пример 2

Горизонтальное автозаполнение указанного диапазона (Destination) последовательностью чисел, месяцев и дней недели:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

Sub Primer2()

    ‘Удаляем границы ячеек, если уже были запуски кода

    Range(«A1:L4»).Borders.LineStyle = xlNone

    ‘Автозаполнение строки единицами

    Range(«A1») = 1

    Range(«A1»).AutoFill Range(«A1:L1»)

    Range(«A1:L1»).Borders(xlEdgeBottom).LineStyle = True

    ‘Автозаполнение строки последовательностью натуральных чисел

    Range(«A2») = 1

    Range(«B2») = 2

    Range(«A2:B2»).AutoFill Range(«A2:L2»)

    Range(«A2:L2»).Borders(xlEdgeBottom).LineStyle = True

    ‘Одновременное заполнение одной строки последовательностью

    ‘месяцев и второй строки — днями недели

    Range(«A3») = «Январь»

    Range(«A4») = «Понедельник»

    Range(«A3:A4»).AutoFill Range(«A3:L4»)

End Sub

Пример 3

Вертикальное автозаполнение указанного диапазона (Destination) последовательностью дат:

Sub Primer3()

    ‘Автозаполнение столбца датами, начиная с текущей

    Range(«A1») = Date

    Range(«A1»).NumberFormat = «DD.MM.YYYY»

    Range(«A1»).AutoFill Range(«A1:A20»)

    ‘Автозаполнение столбца датами в обратном порядке

    Range(«B20») = Date

    Range(«B20»).NumberFormat = «DD.MM.YYYY»

    Range(«B20»).AutoFill Range(«B1:B20»)

End Sub


Содержание

  1. VBA Excel. Метод Range.AutoFill (автозаполнение ячеек)
  2. Метод Range.AutoFill
  3. Определение
  4. Синтаксис
  5. Параметры
  6. Примеры с Range.AutoFill
  7. Пример 1
  8. VBA в Excel Объект Excel.Range и программная работа с ячейками средствами VBA
  9. 10.6 Объект Range, его свойства и методы

VBA Excel. Метод Range.AutoFill (автозаполнение ячеек)

Автозаполнение ячеек в заданном диапазоне с помощью метода Range.AutoFill. Синтаксис, параметры, примеры автозаполнения из кода VBA Excel.

Метод Range.AutoFill

Определение

Определение метода Range.AutoFill:

Синтаксис

Синтаксис метода Range.AutoFill:

Expression — выражение (переменная), возвращающее объект Range.

Параметры

Параметры метода Range.AutoFill:

Параметр Описание
Destination Диапазон ячеек, который необходимо заполнить. В него должен быть включен исходный диапазон (Expression). Обязательный параметр.
Type Константа из коллекции XlAutoFillType, задающая тип автозаполнения. Необязательный параметр.

Константа из коллекции XlAutoFillType указывает, как должен быть заполнен целевой диапазон (Destination) в зависимости от содержимого диапазона исходных данных (Expression). По умолчанию используется константа xlFillDefault (0), когда приложение Excel само определяет значения и форматы, используемые для заполнения целевого диапазона.

Примеры с Range.AutoFill

Примеры автозаполнения целевых диапазонов из кода VBA Excel с помощью метода AutoFill объекта Range.

Пример 1

Автозаполнение указанного диапазона (Destination), состоящего из нескольких строк и столбцов, данными одной ячейки (Expression) в зависимости от ее расположения в целевом диапазоне:

Источник

VBA в Excel Объект Excel.Range и программная работа с ячейками средствами VBA

10.6 Объект Range, его свойства и методы

Объект Excel.Range, программная работа с ячейками и диапазонами (наборами) ячеек средствами VBA, создание объекта Excel.Range, свойства, методы и события объекта Excel.Range

Пожалуй, наиболее часто используемый объект в иерархии объектной модели Excel — это объект Range. Этот объект может представлять одну ячейку, несколько ячеек (в том числе несмежные ячейки или наборы несмежных ячеек) или целый лист. Если в Word вы могли для ввода данных использовать как объект Range, так и объект Selection, то в Excel все сводится к объекту Range:

  • если вам нужно ввести данные в ячейку или отформатировать ее, то вы должны получить объект Range, представляющий эту ячейку;
  • если вы хотите сделать что-то с выделенными вами ячейками, вам необходимо получить объект Range, представляющий выделение;
  • если вам нужно просто что-то сделать с группой ячеек, первое ваше действие — опять-таки получить объект Range, представляющий эту группу ячеек.

В Microsoft Knowledge Base есть статья под номером 291308, в котором описываются 22 способа получения объекта Range в Excel. Вряд ли вы будете пользоваться всеми эти способами. Мы рассмотрим только самые распространенные:

  • самый простой и очевидный способ — воспользоваться свойством Range. Это свойство предусмотрено для объектов Application, Worksheet и самого объекта Range (если вы решили создать новый диапазон на основе уже существующего). Например, получить ссылку на объект Range, представляющий ячейку A1, можно так:

Dim oRange As Range

Set oRange = Worksheets(«Лист1»).Range(«A1»)

А на диапазон ячеек с A1 по D10 — так:

Dim oRange As Range

Set oRange = Worksheets(«Лист1»).Range(«A1:D10»)

С применением свойства Range самого объекта Range нужно быть очень осторожным. Дело в том, что Excel создает на основе объекта Range виртуальный лист со своей собственной нумерацией. Поэтому такой код:

Set oRange1 = Worksheets(«Лист1»).Range(«C1»)

Set oRange2 = oRange1.Range(«B1»)

пропишет значение 20 не в ячейку B1, как можно было понять из кода, а в ячейку D1 (то есть B1 по отношению к виртуальному листу, начинающемуся с C1).

  • второй способ — воспользоваться свойством Cells. Возможностей у этого свойства меньше — мы можем вернуть диапазон, состоящий только из одной ячейки. Зато мы можем использовать более удобный синтаксис (с точки зрения передачи переменных, перехода в любую сторону на любое количество ячеек и т.п.). Например, для получения ссылки на ячейку D1 можно использовать код вида:

Dim oRange As Range

Set oRange = Worksheets(«Лист1»).Cells(1, 4)

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

Set oRange = Range(Cells(1, 1), Cells(5, 3))

  • третий способ — воспользоваться многочисленными свойствами объекта Range, которые позволяют изменить текущий диапазон или создать на основе его новый. Эти свойства будут рассмотрены ниже.

Обычно после того, как нужная ячейка найдена, в нее нужно что-то записать. Для этой цели используется свойство Value, например:

oRange.Value = «Мое значение»

Поскольку объект Range с функциональной точки зрения очень важен, то свойств и методов у него очень много (и для комфортной работы в Excel их нужно знать). Ниже представлены некоторые самые употребимые свойства:

  • Address — позволяет вернуть адрес текущего диапазона, например, для предыдущего примера вернется $A$1:$C$5. Этому свойству можно передать много параметров — для определения стиля ссылки, абсолютного или относительного адреса для столбцов и строк, по отношению к чему этот адрес будет относительным и т.п. Свойство доступно только для чтения. AddressLocal — то же самое, но с поправкой на особенности локализованных версий Excel.

На практике встречается множество ситуаций, когда адрес ячейки нужно разобрать на части и вернуть из него имя столбца или номер строки. Это очень просто сделать при помощи строковых функций — спасибо знакам доллара. Например, имя столбца для объекта oRange, представляющего одну ячейку, можно вернуть так:

sColumnName = Mid(oRange.Address, 2, (InStr(2, oRange.Address, «$») — 2))

sRowNumber = Mid(oRange.Address, (InStr(2, oRange.Address, «$») + 1))

На первый взгляд кажется сложным, но на самом деле все очень просто — для имени столбца мы просто берем все, что у нас находится между первым знаком доллара (он у нас всегда первый символ) и вторым, а для номера строки бы берем все, что у нас находится после второго знака доллара. Найти этот второй знак доллара можно при помощи встроенной функции InStr(), а взять нужное количество символов начиная с какого либо проще всего при помощи встроенной функции Mid().

  • AllowEdit — это свойство, доступное только для чтения, позволяет определить, сможет ли пользователь править данную ячейку (набор ячеек) на защищенном листе. Используется для проверок.
  • Areas — свойство исключительно важное. Дело в том, что, как уже говорилось, объект Range может состоять из несмежных наборов ячеек. Многие методы применительно к таким диапазонам ведут себя совершенно непредсказуемо или просто возвращают ошибки. Свойство Areas позволяет разбить подобные нестандартные диапазоны на набор стандартных. Созданные таким образом объекты Range будут помещены в коллекцию Areas. Это свойство можно использовать и для проверки «нестандартности» диапазона:

If Selection.Areas.Count > 1 Then

Debug.Print «Диапазон с несмежными областями»

  • Borders — возможность получить ссылку на коллекцию Borders, при помощи которой можно управлять рамками для нашего диапазона.
  • Cells — это свойство есть и для объекта Range. Работает оно точно так же, за исключением того, что опять-таки используется своя собственная виртуальная адресация на основе диапазона:

Dim oRange, oRange2 As Range

Set oRange = Range(Cells(2, 2), Cells(5, 3))

Set oRange2 = oRange.Cells(1, 1) ‘Вместо A1 получаем ссылку на B2

Debug.Print oRange2.Address ‘Так оно и есть

Точно такие же особенности у свойств Row и Rows, Column и Columns.

  • Characters — это простое с виду свойство позволяет решить непростую задачу: как изменить (текст или формат) части текста в ячейке, не затрагивая остальные данные. Например, чтобы ввести текст в ячейку A1 и изменить цвет первой буквы, можно воспользоваться кодом

Dim oRange As Range

Set oRange = Range(«A1»)

oRange.Value = «Мой текст»

oRange.Characters(1, 1).Font.Color = vbRed

Если же вам просто нужно изменить значение, то лучше воспользоваться свойством Value — как в третьей строке примера.

  • Count — возвращает количество ячеек в диапазоне. Может использоваться для проверок.
  • CurrentRegion — очень удобное свойство, которое может пригодиться, например, при копировании/экспорте данных, полученных из внешнего источника (когда сколько будет этих данных, нам изначально неизвестно). Оно возвращает объект Range, представляющий диапазон, окруженный пустыми ячейками (то есть непустую область, в которую входит исходный диапазон/ячейка). Например, чтобы выделить всю непустую область вокруг активной ячейки, можно воспользоваться кодом
  • Dependents — позволяет получить объект Range (скорее всего, включающий несмежные области) которые зависят от ячеек исходного диапазона. Работает только для текущего листа — ссылки во внешних листах этим свойством не отслеживаются. Например, чтобы выделить все ячейки, зависимые от активной, можно использовать код
  • Worksheets(«Лист1»).Activate
  • ActiveCell.Dependents.Select

Чтобы просмотреть обратную зависимость, можно использовать свойство Precedents. Чтобы просмотреть только первый уровень зависимостей, можно использовать свойства DirectDependents и DirectPrecedents.

  • End — еще одно часто используемое свойство. Оно позволяет получить объект Range, представляющий последнюю ячейку исходного диапазона. В какой стороне будет считаться последняя ячейка, можно определить при помощи передаваемого параметра.
  • Errors — свойство, которое через коллекцию Errors позволяет получить доступ к объектам Error, представляющим обнаруженные ошибки в диапазоне.
  • Font — как и в Word, это свойство позволяет получить доступ к объекту Font, при помощи которого можно настроить особенности оформления текста в ячейке (цвет, шрифт, размер букв и т.п.)
  • FormatConditions — возможность создать собственный объект, представляющий вариант оформления ячеек, который затем можно применять к разным ячейкам и диапазонам.
  • Formula — одно из самых важных свойств объекта Range. Доступно и на чтение, и на запись. Если используется на чтение, то возвращает текст формулы, прописанной в ячейку (а не вычисленное значение), если используется на запись, то позволяет записать формулу в ячейку. Если применить это свойство для диапазона, в который входит несколько ячеек, то формула будет прописана по все ячейки диапазона. Пример применения этого свойства может выглядеть так:
  • Свойство FormulaLocal, как и AddressLocal, позволяет внести поправки на особенности нумерации ячеек в локализованной версии Excel (для русских версий Excel в нем нет необходимости).
  • FormulaHidden — возможность спрятать формулы в диапазоне от пользователя. Работает только на защищенных листах.
  • HasFormula — проверить диапазон на наличие вычисляемых значений (формул).
  • Hidden — спрятать диапазон. Будет работать только в случае, если диапазон включает в себя хотя бы одну строку или столбец целиком, в противном случае вернется ошибка.
  • Interior — еще одно свойство, связанное с форматированием. В основном позволяет покрасить ячейки диапазона.
  • Item — позволяет получить еще один объект Range, который определяется путем смещения исходного диапазона.
  • Locked — это свойство позволяет заблокировать ячейки диапазона при защите листа.
  • Name — возможность получить ссылку на специальный объект именованного диапазона Name. На графическом экране с его возможностями можно познакомиться при помощи меню Вставка ->Имя. Он позволяет обращаться к диапазонам и формулам по именам и несколько напоминает по функциональности объект закладки в Word.
  • Next — перейти на следующую ячейку. Если лист не защищен, то следующей ячейкой будет считаться ячейка справа, если защищен — то следующая незаблокированная ячейка.
  • NumberFormat — возможность установить один из предопределенных форматов для чисел. Соответствует возможностям вкладки Число в меню Формат ->Ячейки на графическом экране.
  • Offset — это свойство позволяет получить новый объект Range с определенным смещением от исходного. Например, чтобы получить ячейку со смещением на три ячейки вверх от сходной и три ячейки влево, можно использовать код
  • свойство Orientation позволяет сориентировать текст в ячейках. Указывается угол наклона в градусах. Например, чтобы расположить текст по диагонали, можно использовать код
  • PageBreak — это свойство обычно используется для программной вставки разрывов страницы. Его применение может выглядеть так:
  • все свойства, которые начинаются на Pivot…, относятся к работе с объектом PivotTable (сводная таблица). Особенности работы с ней будут рассмотрены ниже.
  • QueryTable — это очень важное свойство позволяет получить ссылку на объект QueryTable — полученные с внешнего источника данные. Это свойство для объекта Range позволяет получить ссылку на объект QueryTable, которые находится в данном диапазоне. Подробнее про объект QueryTable будет рассказано ниже.
  • Range — это свойство, как уже говорилось выше, позволяет создать новый диапазон на основе уже существующего. Необходимо помнить про особенности нумерации ячеек в этом случае.
  • Resize — возможность изменить текущий диапазон. Например, увеличение его на один столбец вниз и одну строку вправо может выглядеть так:

oRange.Resize(oRange.Rows.Count + 1, oRange.Columns.Count + 1).Select

  • ShrinkToFit — это свойство позволяет автоматически настроить размер текста в диапазоне таким образом, чтобы текст умещался в ширину столбца.
  • Style — это свойство позволяет вернуть объект Style, представляющий стиль для указанного диапазона. На графическом экране то, что позволяет сделать объект Style, можно сделать через меню Формат ->Стиль.
  • Text — возможность получить значение первой ячейки диапазона в виде значения типа String. Для объекта Range это свойство доступно только для чтения.
  • Validation — это свойство позволяет вернуть объект Validation, при помощи которого можно настроить проверку вводимых в диапазон данных.
  • Value — наиболее часто используемое свойство объекта Range. Позволяет получить или назначить значение (числовое, текстовое или какое-либо другое) ячейкам диапазона. Точно для той же цели используется свойство Value2, единственное отличие — это свойство не поддерживает типы данных Currency и Date.
  • WrapText — возможность включить/отключить перевод текста на следующую строку в ячейках диапазона.

Теперь — о методах объекта Range:

  • Activate() — выделяет текущий диапазон и устанавливает курсор ввода на его первую ячейку.
  • AddComment() — возможность добавить комментарий к ячейке. Ячейка будет помечена красным уголком, а текст комментария будет показан в виде всплывающей подсказки. Этот метод можно вызвать только для диапазона, состоящего из одной ячейки. То же самое на графическом экране можно сделать при помощи меню Вставка ->Примечание.
  • AutoFill() — возможность использовать автозаполнение для диапазона (например, если первые две ячейки будут заполнены как 1 и 2, то дальше в автоматическом режиме будет продолжено: 3, 4, 5 и т.п.)
  • AutoFit() — автоматически поменять ширину всех столбцов и высоту всех строк в диапазоне, чтобы туда уместился текст ячеек. Можно применять только к тем диапазонам, которые состоят из набора столбцов (полностью) или набора ячеек (также полностью), иначе будет ошибка.
  • AutoFormat() — возможности использовать один из стилей автоформатирования (то, что на графическом экране доступно через меню Формат ->Автоформат).
  • BorderAround() — возможность поместить диапазон в рамку с выбранными вами параметрами.
  • методы Clear… позволяют очистить содержимое диапазона — от значений, форматирования, комментарий и т.п.
  • Consolidate() — возможность слить данные нескольких диапазонов (в том числе на разных листах) в один диапазон, используя при этом выбранную вами агрегатную функцию.
  • Copy() — возможность скопировать диапазон в другое место. Если место назначения не указано, он копируется в буфер обмена. Аналогично работает метод Cut(), при котором данные исходного диапазона вырезаются.
  • CopyFromRecordset() — очень удобный метод, который позволяет вставить данные из объекта ADO Recordset на лист Excel, начиная с верхнего левого угла указанного диапазона.
  • DataSeries() — метод, который может сэкономить множество времени и избежать возни с функциями даты и времени. Этот метод позволяет увеличить вами значения даты в диапазоне на указанный вами временной интервал. Например, если у вас в диапазоне стоит первое января, то при помощи этого метода можно сгенерировать первое число любого другого месяца.
  • Delete() — удаляет данные текущего диапазона. В качестве необязательно параметра можно определить, с какой стороны будут сдвигаться ячейки на место удаленных.
  • Dirty() — пометить ячейки диапазона как «грязные». Такие ячейки будут пересчитаны при следующем же пересчете. Обычно используется, когда Word сам не может догадаться, что их нужно пересчитать. Пересчитать ячейки диапазона можно и принудительно — при помощи метода Calculate().
  • методы Fill… (FillDown(), FillUp(), FillLeft(), FillRight()) позволяют размножить одно и то же значение по ячейкам диапазона в указанном вами направлении.
  • метод Find() позволяет произвести поиск по ячейкам диапазона и вернуть новый объект Range, который представляет первую ячейку, в котором было найдено нужное значение. У этого метода есть множество необязательных параметров, которые позволяют определить направление поиска, чувствительность к регистру, искать все значение ячейки или часть и т.п. Методы FindNext() и FindPrevious() позволяют продолжить поиск, начатый методом Find(), в разных направлениях.
  • метод GoalSeek() позволяет применить автоподбор значений для функции Excel программным способом. На графическом экране то же самое можно сделать при помощи меню Сервис ->Подбор параметра.
  • метод Insert() позволяет вставить ячейки в диапазон, сдвинув остальные (вы можете выбрать — вправо или вниз).
  • метод Justify() позволяет равномерно распределить текст по диапазону. Если в данный диапазон он не помещается, он будет распространен на соседние ячейки (с перезаписью их значений).
  • метод Merge() позволяет слить все ячейки диапазона в одну. При этом останется только одно значение — верхней левой ячейки. Разбить обратно такую слитую ячейку на несколько обычных можно при помощи метода UnMerge().
  • Parse() — позволяет разбить одну ячейку на несколько по указанному вами шаблону (например, чтобы отделить код города от номера телефона).
  • PasteSpecial() — операция, дополняющая Copy() и Cut(). Она позволяет вставить то, что лежит в буфере обмена, с указанием специальных параметров вставки (вставлять с добавлением к существующим данным, с умножением, вычитанием, делением и т.п.)
  • PrintOut() и PrintPreview() — позволяют вывести диапазон на печать или открыть режим просмотра перед печатью..
  • Replace() — метод, дополняющий метод Find(). Позволяет проводить поиск и замену значений в диапазоне.
  • Select() — возможность выделить указанный диапазон. Объекта Selection в Excel нет — вместо него есть возможность получить объект Range, представляющий выделенную область.
  • Show() — экран будет проскроллирован таким образом, чтобы показать указанный диапазон.
  • ShowDependents() — показать стрелки для ячеек, которые зависят от указанного диапазона (только первый уровень зависимости) или эти стрелки убрать. Обратный метод — ShowPrecedents().
  • ShowErrors() — показать источник ошибки для указанной ячейки.
  • Sort() — возможность произвести сортировку ячеек в диапазоне. Можно использовать большое количество необязательных параметров для настройки сортировки. SortSpecial() — с учетом особенностей азиатских языков.
  • Speak() — удивительный метод, который позволяет зачитывать вслух содержимое диапазона (можно определить, в каком направлении и будут ли зачитываться формулы). К сожалению, в локализованной версии Excel не работает.
  • SpecialCells() — очень удобный метод, который позволяет вернуть объект Range, включающий в себя все ячейки определенного типа (пустые, с ошибками, с комментариями, последние, с константами, с формулами, с определенным форматированием) и с определенным значением. Например, чтобы вернуть объект Range, состоящий из всех пустых ячеек диапазона, можно использовать код

Set oRange2 = oRange.SpecialCells(xlCellTypeBlanks)

oRange 2. Select ‘проверяем, так ли это

  • метод SubTotal() позволяет посчитать итоговое значение для диапазона (можно выбрать агрегатную функцию и множество других параметров).
  • метод Table() позволяет создать таблицу на основе передаваемого столбца, строки и функции, которую нужно использовать для вычисления ячеек таблицы. Пример из документации по этому методу позволяет автоматически сгенерировать таблицу умножения.
  • TextToColumns() — сложный метод, который позволяет разбить столбцы в диапазоне на несколько столбцов в соответствии с определенным алгоритмом. Принимает множество необязательных параметров.

Источник

Студворк — интернет-сервис помощи студентам

Задание:
Написать макрос, позволяющий заполнить один столбец рабочей книги числами по-порядку, начиная с указанного пользователем значения. Числа записываются, начиная с активной ячейки. Количество чисел, которое нужно сформировать, запрашивается у пользователя. Для запроса значений у пользователя использовать функцию InputBox.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Sub Stol()
Dim n As Long
n = InputBox("С какого значения начать заполнение столбца")
Dim m As Long
m = InputBox("Какое количество чисел нужно сформировать")
ActiveCell = n
Dim oRange
Set oRange = Range(Cells(ActiveCell.Row, ActiveCell.Column), Cells(ActiveCell.Row + m - 1, ActiveCell.Column))
oRange.Formula =  'ЧТО ЗДЕСЬ ПИСАТЬ ????
 
End Sub

Макрос: заполнить столбик до конца заполненной таблицы

Автор Екатерина Максимова, 20.09.2016, 16:18

« назад — далее »

Объясняю более подробно. Есть таблица, в которой я сделала дополнительный столбик. В этот столбик я подтягиваю ВПР. Но так как в таблице постоянно меняется количество строчек, то мой макрос сейчас то не до конца протягивает функцию, то наоборот — выходит за пределы таблицы. Можно ли как-то универсально прописать чтобы выделяло до конца заполненной таблицы таблицы(по аналогии с клавишами Ctrl+Shift+стрелочка вниз)? Сильно не ругать — VBA только изучаю.


Dim lLastRow As Long
lLastRow = Cells(Rows.Count,1).End(xlUp).Row 'номер последней заполненной ячейки в первом столбце.

подходит?

Range("A2:A" & lLastRow).Select


Если применяете VBA, то и результат вместо ВПР можно получать в коде.


cheshiki1 ,спасибо но не работает :(возможно я как-то не так его ставлю
vikttur, я это знаю, но опять возникает вопрос — как ВПР вставить в ячейки в границах заполненной таблицы?

Если поможет, то код(та часть что отвечает за впр) у меня сейчас выглядит так:
Sheets(«1»).Select
    Range(«C2»).Select
    ActiveCell.FormulaR1C1 = «=VLOOKUP(RC[-2],ÂÏÐ!C[-2]:C[-1],2,0)»
    Selection.AutoFill Destination:=Range(«C2:C5107»)
    Range(«C2:C5107»).Select
    Range(«C2»).Select
    Selection.Copy


Я Вам предложил вообще не использовать функцию листа.
Файл-пример?




Формула ВПР вставляется в столбик С и до конца заполненной таблицы.
ВПР: (А2,ВПР!А:В,2,0)


Sub RetrievalOfData()
Dim ArrData(), ArrInit()
Dim lRws As Long, lRwsIn As Long
Dim i As Long, k As Long
    With Worksheets("ВПР")
        lRwsIn = .Cells(.Rows.Count, 1).End(xlUp).Row ' строк в таблице сравнения
        If lRwsIn < 2 Then Exit Sub ' нет данных, выход
        ArrInit = .Range("A1:B" & lRwsIn).Value ' таблица сравнения в массив
    End With

        With Worksheets("Просроки ОИВ")
        lRws = .Cells(.Rows.Count, 1).End(xlUp).Row ' строк в данных
        If lRws < 2 Then Exit Sub ' нет данных, выход
        ArrData = .Range("A1:B" & lRws).Value ' данные в массив
        ReDim Preserve ArrData(1 To lRws, 1 To 3) ' добавляем столбец для результата поиска
        ArrData(1, 3) = .Cells(1, 3).Value
    End With

    For i = 2 To lRws ' построчно проходим по данным
        For k = 2 To lRwsIn ' построчно проходим по таблице сравнения
            If ArrData(i, 1) = ArrInit(k, 1) Then ' искомое совпало
                ArrData(i, 3) = ArrInit(k, 2) ' записываем результат
                Exit For ' выходим (нет смысла просматривать таблицу)
            End If
        Next k
    Next i

        ' выгружаем данные на лист, отключив обновление экрана
    Application.ScreenUpdating = False
    Worksheets("Просроки ОИВ").Cells(1, 1).Resize(lRws, 3).Value = ArrData
    Application.ScreenUpdating = True
End Sub


Спасибо, работает. А если вкладок в документе несколько?Формула и состав таблиц один и тот же-меняется только название вкладок…когда подставляю этот код мне уже на второй вкладке выдает ошибку в Dim ArrData(), ArrInit().


Макрос должен находиться в общем модуле (см. файл в предыдущем моем сообщении). Этому коду безразлично, с какого листа его запускать. Имена листов указаны в макросе.

With Worksheets("имялиста")
.........
End With

Все, что внутри оператора и начинается точкой, относится к родителю, указанному в операторе.

Если нужно перебрать все листы одним заходом, можно дополнить макрос:

Dim shts As Worksheet
    For Each shts In ThisWorkbook.Worksheets
        If shts.Name <> "ВПР" Then ' если лист с другим именем
            ' то поизвести действия для этого листа
        End If
    Next shts

Но это уже вопрос, выходящий за рамки темы.


Спасибо :)


  • Профессиональные приемы работы в Microsoft Excel

  • Обмен опытом

  • Microsoft Excel

  • Макрос: заполнить столбик до конца заполненной таблицы

Как из пользовательской функции заполнит несколько ячеек?

sttt

Дата: Вторник, 24.02.2015, 18:13 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 13


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

Необходимо, при расчете брались некие значения и после расчета заполнялись соседнии ячейки по горизонтали.
Пытался но мало опыта, так и не разобрался.
ошибки выдает:
[vba]

Код

‘Cells(i, 1).Resize(40, 14).Interior.Color = 15773696
‘Selection.Column
‘Worksheets(1).Cells(6, 6).Value = 24
‘ActiveSheet.Cells(5, 5).Value = «test»
‘Cells(7, 7).Value = 1990
‘Worksheets(ActiveSheet.Name).Range(«B9»).Value = «тест»
‘ActiveSheet.Range(«B5»).Value = «test» ‘arr(i)
‘ActiveCell.Offset(i — 1, perem + 1).Value = arr(i)
‘ActiveCell.Offset(i — 1, perem + 1).Value

[/vba]

если комментируешь эти строчки функция отрабатывает. что-то делаю не так.
[moder]Где файл?
И используйте спецтеги при оформлении сообщения (для кода макроса кнопка #)

Сообщение отредактировал stttВторник, 24.02.2015, 18:33

 

Ответить

sttt

Дата: Вторник, 24.02.2015, 18:48 |
Сообщение № 2

Группа: Пользователи

Ранг: Новичок

Сообщений: 13


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

Задача на самом деле стоит такая — необходимо из строки «Гвозди:25.0;Шурупы:25.0;Доски:25.0;Молотки:25.0;Пилы:25.0;Рубанки:25.1»
заполнить по столбцам:

Гвозди Шурупы Доски Молотки Пилы Рубанки Лестницы
«Гвозди:25.0;Шурупы:25.0;Доски:25.0;Молотки:25.0;Пилы:25.0;Рубанки:25.1» = 25.0 25 25 25 25 25.1
«Гвозди:25.0;Шурупы:25.0;Доски:25.0;Молотки:25.0;Лестницы:3» = 25 25 25 25 3

Лучше в файле показать разметку))

К сообщению приложен файл:

tov.xlsx
(9.8 Kb)

Сообщение отредактировал stttВторник, 24.02.2015, 19:06

 

Ответить

Karataev

Дата: Вторник, 24.02.2015, 20:10 |
Сообщение № 3

Группа: Проверенные

Ранг: Старожил

Сообщений: 1330


Репутация:

528

±

Замечаний:
0% ±


Excel

во время тестирования макроса у меня возникла ошибка:заголовок C(и еще некоторые другие) содержал пробел спереди и сзади .в заголовках не должно быть пробелов.
макрос находится в файле.кнопку для запуска макроса я не делал -тестировал прямо из vbe.

К сообщению приложен файл:

tov.xlsm
(17.2 Kb)


Киви-кошелек: 9166309108

Сообщение отредактировал KarataevВторник, 24.02.2015, 20:10

 

Ответить

sttt

Дата: Среда, 25.02.2015, 15:37 |
Сообщение № 4

Группа: Пользователи

Ранг: Новичок

Сообщений: 13


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

кнопку для запуска макроса я не делал -тестировал прямо из vbe.

Спасибо, но это часть)
нужно было из строк, типа (они разные по длине и содержанию): «Гвозди:25.0;Шурупы:25.0;Доски:25.0;Молотки:25.0;Пилы:25.0;Рубанки:25.1»
вывести в заголовке уникальные имена колонок, пройдясь по колонке, получаем уникальные, а потом уже заполнять их числовыми значениями. сам виноват, что так изложил, а в примере уже готовые колонки заполняются))

теперь у меня есть пример, попытаюсь по аналогии сделать. но не совсем понятно, будет-ли работать заполнение строк из пользовательской функции. хотел сделать вывод колонок макросом,
а потом построчно = НекаяФункция(А1) и заполнялись бы в строке необходимые колонки.
Ранее упомянул, что строка кода не работает: Cells(7, 7).Value = 1990
Хотя в макросе работает.

Поправил код, хоть не ругается:

[vba]

Код

Sub Macro1()

      Dim dic As Object
      Dim lngLastRow As Long
      Dim i As Long
      Application.ScreenUpdating = False
      Set dic = CreateObject(«Scripting.Dictionary»)
      For i = 2 To 8
          ‘начало правки
          If Not (IsEmpty(Cells(1, i).Value)) Then
              dic.Add Cells(1, i).Value, i
          End If
          ‘конец правки
      Next
      lngLastRow = ActiveSheet.UsedRange.Rows.Count
      For i = 2 To lngLastRow
          If CStr(Cells(i, «A»).Value) <> «» Then
              Call ttt(i, dic)
          End If
      Next
      Application.ScreenUpdating = True

End Sub

[/vba]

Сообщение отредактировал stttСреда, 25.02.2015, 15:38

 

Ответить

Gustav

Дата: Среда, 25.02.2015, 17:56 |
Сообщение № 5

Группа: Друзья

Ранг: Старожил

Сообщений: 2398


Репутация:

986

±

Замечаний:
0% ±


начинал с Excel 4.0, видел 2.1

sttt, мне кажется, Вы слишком много пытаетесь сделать сразу — фактически из сырого текста чуть ли не сводную таблицу. Разберите сначал программно текст в три колонки: номер строки, материал, количество. А потом и сводную таблицу постройте по этим 3-м колонкам — но уже легко, парой кликов, без макросов.

P.S. Прикинул сборщик в 3 колонки. Соберет их, начиная с ячейки K1 на активном листе:
[vba]

Код

Sub parseRawText()

      Dim rngSource As Range, c As Range
      Dim i As Integer, j As Integer
      Dim arrRow, arrVal, arrOut()

         Set rngSource = Range(«A2:A3»)

              ReDim arrOut(1 To rngSource.Cells.Count * 20, 1 To 3)

              For Each c In rngSource.Cells
          arrRow = Split(c, «;»)
          For i = LBound(arrRow) To UBound(arrRow)
              arrVal = Split(arrRow(i), «:»)
              j = j + 1
              arrOut(j, 1) = c.Row
              arrOut(j, 2) = arrVal(0)
              arrOut(j, 3) = arrVal(1)
          Next i
      Next c

              With Range(«K1»).Resize(1, 3)
          .Value = Array(«Строка», «Материал», «Количество»)
          .Font.Bold = True
      End With
      Range(«K2»).Resize(j, 3).Value = arrOut
End Sub

[/vba]


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал GustavСреда, 25.02.2015, 18:28

 

Ответить

Hugo

Дата: Среда, 25.02.2015, 18:04 |
Сообщение № 6

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3140


Репутация:

670

±

Замечаний:
0% ±


2010, теперь уже с PQ

«Как из пользовательской функции заполнит несколько ячеек?» — и где она? Если что — я знаю как — используйте в диапазон как формулу массива.


excel@nxt.ru
webmoney: R418926282008 Z422237915069

 

Ответить

sttt

Дата: Четверг, 26.02.2015, 11:54 |
Сообщение № 7

Группа: Пользователи

Ранг: Новичок

Сообщений: 13


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

«Как из пользовательской функции заполнит несколько ячеек?» — и где она?

Она в книге есть, но не работает. Хотя необходимо проверить, может, что упустил.)

используйте в диапазон как формулу массива

Как это сделать? Вроде понятно «диапазон, массив, формула», но не могу представить как.
Может как-то так?
[vba]

Код

Dim ids As Range
Set ids = Application.InputBox(«Выберите диапазон ячеек», Type:=8)

[/vba]

 

Ответить

sttt

Дата: Четверг, 26.02.2015, 11:55 |
Сообщение № 8

Группа: Пользователи

Ранг: Новичок

Сообщений: 13


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

Прикинул сборщик в 3 колонки. Соберет их, начиная с ячейки K1 на активном листе:

Спасибо большущее! Так по кусочкам допилим))

 

Ответить

Hugo

Дата: Четверг, 26.02.2015, 12:10 |
Сообщение № 9

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3140


Репутация:

670

±

Замечаний:
0% ±


2010, теперь уже с PQ

Я вообще ничего не понял — что из чего куда нужно сделать…
Можно конечно пытаться догадаться — но времени жалко.


excel@nxt.ru
webmoney: R418926282008 Z422237915069

 

Ответить

Gustav

Дата: Четверг, 26.02.2015, 13:04 |
Сообщение № 10

Группа: Друзья

Ранг: Старожил

Сообщений: 2398


Репутация:

986

±

Замечаний:
0% ±


начинал с Excel 4.0, видел 2.1

sttt, в моем файле — пользовательская функция parseCell, возвращающая массив. Формула =parseCell(A1) введена на рабочем листе в диапазон B1:J2 как формула массива, т.е. при помощи комбинации Ctrl+Shift+Enter. Результат увидите. Что-то типа такого хотелось сделать?

К сообщению приложен файл:

arrUDF.xlsm
(21.9 Kb)


МОИ: Ник, Tip box: 41001663842605

 

Ответить

sttt

Дата: Четверг, 26.02.2015, 13:59 |
Сообщение № 11

Группа: Пользователи

Ранг: Новичок

Сообщений: 13


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

Я вообще ничего не понял — что из чего куда нужно сделать…

[vba]

Код

Гвозди:25.0;Шурупы:25.0;Доски:25.0;Молотки:25.0;Пилы:25.0;Рубанки:25.1
Гвозди:25.0;Шурупы:25.0;Доски:25.0;Молотки:25.0;Лестницы:3

[/vba]
из исходной строки, их будет много, в одном столбце и в строке разный состав.
Пройтись по этому столбцу и получить уникальные наименования будущих колонок и в шапке горизонтально вывести по ячейкам:

[vba]

Код

Гвозди|Шурупы|Доски|Молотки|Пилы|Рубанки|Лестницы

[/vba]

А потом построчно разместить числовые значения.
Я скидывал книгу, как в итоге должна получиться таблица.
Но на начальном этапе в книге были только строки:

[vba]

Код

Гвозди:25.0;Шурупы:25.0;Доски:25.0;Молотки:25.0;Пилы:25.0;Рубанки:25.1
Гвозди:25.0;Шурупы:25.0;Доски:25.0;Молотки:25.0;Лестницы:3

[/vba]

 

Ответить

Hugo

Дата: Четверг, 26.02.2015, 14:07 |
Сообщение № 12

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3140


Репутация:

670

±

Замечаний:
0% ±


2010, теперь уже с PQ

Я не заметил этот пример.
Вообще в идеале думаю UDF тут неприменима — вдруг в строке появится никем не предусмотренные пилки для ногтей?
Но если весь ассортимент известен заранее — тогда конечно можно (не смотрел пока что там предложил Gustav).
А вообще я бы всё делал макросом — анализ всего что есть, создание рядом таблицы.

P.S. Чуть прикинул алгоритм — больно сложно получается, некогда такую головоломку прописывать.
Если заранее известен весь список (и в строке нет повторов этих молотков-лестниц) — можно написать простую UDF с двумя параметрами. Даже можно две — работающую на одну ячейку, или массивную сразу на всю строку таблицы.


excel@nxt.ru
webmoney: R418926282008 Z422237915069

Сообщение отредактировал HugoЧетверг, 26.02.2015, 14:16

 

Ответить

sttt

Дата: Четверг, 26.02.2015, 14:20 |
Сообщение № 13

Группа: Пользователи

Ранг: Новичок

Сообщений: 13


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

Что-то типа такого хотелось сделать?

что-то, но не совсем так, строк будет 100 и более, количество всегда разное, почти неразрывно и из этих строк нужно уникальные наименование вытащить по всем строкам этой колонки.
Но полагаю, что примерно таким кодом и нужно заполнить наименования колонок макросом, только немного доработать, но результат примерно такой.)) Попытался массив ему в параметр передать , но ругается, что «нельзя изменять часть массива» — =parseCell(A1:A2).
Возможно можно сделать все макросом, но у меня была идея, получить и заполнить только шапку макросом, а потом, у каждой строки применить пользовательскую функцию для парсинга числовых значений.
А пример, так понял (тяжело читать плохо знакомый язык), будет повторять вывод колонок для каждой строки, а необходимо один раз в одном месте это сделать,
где-то в шапке листа, и под эти шапки заполнить построчно числовыми значениями взятыми из текущей строки, под нужными колонками 3 поставить под Лестницы, а 25.1 под Рубанки.

 

Ответить

sttt

Дата: Четверг, 26.02.2015, 14:25 |
Сообщение № 14

Группа: Пользователи

Ранг: Новичок

Сообщений: 13


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

вдруг в строке появится никем не предусмотренные пилки для ногтей

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

можно написать простую UDF с двумя параметрами. Даже можно две — работающую на одну ячейку, или массивную сразу на всю строку таблицы.

Можно и так, у меня мало опыта, понять, как оптимальнее, если это можно считать опытом)) но ориентируюсь. На другой платформе пишу.

 

Ответить

Gustav

Дата: Четверг, 26.02.2015, 15:04 |
Сообщение № 15

Группа: Друзья

Ранг: Старожил

Сообщений: 2398


Репутация:

986

±

Замечаний:
0% ±


начинал с Excel 4.0, видел 2.1

sttt, в общем, если решаете реальную задачу и нужен быстрый и комфортный результат, то рекомендую еще раз обратить внимание на мое сообщение №5 (функционалом сводных таблиц в Excel, надеюсь, владеете?).

Ну, а если в приоритете над задачей именно упражнения по VBA (и непременно хочется самому попытаться по факту «переписать» функционал сводных таблиц), то, как говорится, флаг Вам в руки! :)


МОИ: Ник, Tip box: 41001663842605

 

Ответить

sttt

Дата: Четверг, 26.02.2015, 15:56 |
Сообщение № 16

Группа: Пользователи

Ранг: Новичок

Сообщений: 13


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

(«переписать» функционал сводных таблиц), то, как говорится, флаг Вам в руки!

если бы данные были в нормальной форме — сводная таблица очень пригодилась бы.
может, чего не знаю, подтолкните в нужную сторону. полагаю, что у меня достаточно информации для решения этой задачки.
вроде не так все сложно. охотно посмотрю другие решения.

 

Ответить

Gustav

Дата: Четверг, 26.02.2015, 16:29 |
Сообщение № 17

Группа: Друзья

Ранг: Старожил

Сообщений: 2398


Репутация:

986

±

Замечаний:
0% ±


начинал с Excel 4.0, видел 2.1

если бы данные были в нормальной форме — сводная таблица очень пригодилась бы

Так я же в сообщении 5 как раз и предложил инструмент («сборщик 3-х колонок») по преобразованию сырых данных в нормальную форму! Буквально второй день об этом талдычу :)


МОИ: Ник, Tip box: 41001663842605

 

Ответить

Hugo

Дата: Четверг, 26.02.2015, 16:36 |
Сообщение № 18

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3140


Репутация:

670

±

Замечаний:
0% ±


2010, теперь уже с PQ

Алгоритм макроса (пока писать некогда):
в столбце выделенной ячейки
определяем последнюю строку, берём данные в массив
цикл по массиву, анализ строки
собираем словарь «молотков», каждому в item порядковый номер
и тут же второй словарь с ключём номер_строки_массива|»молоток» и в его Item кладём число (можно собирать сумму, если возможны повторы, их кстати можно выявить если есть опасность)
Когда закончили с источником — создаём пустой массив (размеры известны — как исходный х словарь «молотков») и заполняем его циклом по ключам «молотков» и в нём цикл от 2 до конца массива (шапку отдельно сперва или в конце).


excel@nxt.ru
webmoney: R418926282008 Z422237915069

 

Ответить

sttt

Дата: Четверг, 26.02.2015, 17:39 |
Сообщение № 19

Группа: Пользователи

Ранг: Новичок

Сообщений: 13


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

по преобразованию сырых данных в нормальную форму

я этим пользуюсь, еще словарем для сбора списка уникальных полей, а потом это все горизонтально вывести.
[vba]

Код

Set dic = CreateObject(«Scripting.Dictionary»)

Set ids = Application.InputBox(«Укажите ячейку с данными первой строки», Type:=8)

NumStr = 0

     lngLastRow = ActiveSheet.UsedRange.Rows.Count
     For i = 2 To lngLastRow
         If CStr(Cells(i, «A»).Value) <> «» Then
             NumStr = NumStr + 1
             dic.Add Cells(ids.Row, i).Value, NumStr
         End If
     Next

a=d.Items
For j = 0 To dic.Count — 1
     arrOut(j, 1) = a(j)
Next j

Range(ЯчейкаСКоторойВыводимКолонки.Address).Resize(1, dic.Count).Value = arrOut

[/vba]
Код писал прям здесь, поэтому не знаю будет ли работать, но как-то так будет выводит колонки.

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

 

Ответить

Gustav

Дата: Четверг, 26.02.2015, 18:28 |
Сообщение № 20

Группа: Друзья

Ранг: Старожил

Сообщений: 2398


Репутация:

986

±

Замечаний:
0% ±


начинал с Excel 4.0, видел 2.1

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

После «пользуюсь» уже не надо дальше ничего программировать. Надо строить сводную таблицу. Вручную, как пользователь, несколькими клацами мыши. Посмотрите в файле — разве плохо? Товарчики — уникальные, по алфавиту. По номерам строк можете легко приставить к исходной таблице.

К сообщению приложен файл:

tov03.xlsm
(22.6 Kb)


МОИ: Ник, Tip box: 41001663842605

 

Ответить

Понравилась статья? Поделить с друзьями:
  • Как заполнить столбец excel до конца
  • Как заполнить ссылкой в excel
  • Как заполнить содержание в word
  • Как заполнить смежные ячейки в excel
  • Как заполнить реквизиты в word