Remkomplekty.ru

IT Новости из мира ПК
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Тип ячейки excel vba

Тип ячейки excel vba

Ребята, ситуация такова —
В ячейку я ввожу данные о периоде действия соглашения трех типов.
Например, «1 год», «С 16.02.06 по 20.12.06» или «16.02.06 — 20.12.06»,
разбиваю их парсером (предоставленным fz-mix) с таким исходным кодом
——————————————————
Public Sub Parser()
Dim i, j, k, c As Integer
Dim strP As String
‘Clear ranges
Range(«C1»).CurrentRegion.Clear
Range(«A3»).CurrentRegion.Clear
‘Check comma
j = 0
If InStr(1, Range(«A1»).Text, «;») > 0 Then
‘ Separate (first)
Call Range(«A1»).TextToColumns(Range(«C1»), xlDelimited, , , , True, , True, True, «-«)
Exit Sub
Else
‘.
End If
End Sub
———————————————————-
В случае с первым вариантом («1 год») все понятно — ставлю проверку на то, что введено в ячейке, и если это «1 год», то заношу его в базу.
Со вторым случаем («С 16.02.06 по 20.12.06») появляется сама проблема так как бывает так, что вводится «С 16.02.06 (включительно) по 20.12.06». Так как парсер разбивает даты и слова по ячейкам, то хотелось бы определять в какой ячейке (перебирая их в цикле) находится первая дата и вторая. и правильно ли они введены (в формате ДД.ММ.ГГ или ДД.ММ.ГГГГ).
А вот с третьим вариантом вообще худо — не могу достичть возможности разбивки дат по ячейкам, если вводится иформация в виде «16.02.06 — 20.12.06».
Вроде бы и укахываю в предпоследнем и последнем параметрах TextToColumns (Other и OtherChar) все верно, а тире никак не хочет восприниматься в кач-ве разделителя.

Да, и еще — не получается вообще ничего разбить по ячейкам если в конце не вводить «;», то есть («С 16.02.06 по 20.12.06;»).
В вышеприведенном примере кода парсера стоит True для пар-тра SemiColon, если его убрать, то все равно ничего не разбивается. Разбивка почему-то работает только с пар-тром «;» в конце строки. А желательно было бы достичь результата без излишеств в виде «;»

Прошу Вашей помощи, ув. профессионалы.
Заранее благодарен!

Блин, пытался разобраться как из текста, поступившего из TextToColumns преобразовать данные (попавшие в ячейку из этой ф-ии) в дату, но так и не смог.
Приходится постоянно вручную кликать по ячейке, затем только устанавливается нужный тип данных (ДАТА в формате ДД.ММ.ГГ)

Вот что я делал:
‘очситка, подготовка ячейки
Sheets(«Транзит»).Cells(2, 3).Clear
Sheets(«Транзит»).Cells(2, 3).NumberFormat = «dd.mm.yy;@»

‘проверка исходной строки на правильность ввода в формате «ДД.ММ.ГГ — ДД.ММ.ГГ» и разбивка ее на
‘даты по двум ячекам (C2 и D2)
If InStr(1, Sheets(«Заявление»).Cells(95, 5).Text, «-«) > 0 Then
Range(«Транзит!C2») = Range(«Заявление!E95»)
Call Range(«Транзит!C2»).TextToColumns(Range(«Транзит!C2»), xlDelimited, , , , , , False, True, «-«)

‘принудительная установка типа данных ДАТА
Sheets(«Транзит»).Cells(2, 3).Value = FormatDateTime(Cells(2, 3).Text, vbShortDate)

И все равно, хоть уже и нет треугольника, кипишующего, что тип данных введен как текст, дата не получается в формате ДД.ММ.ГГ. Вручную тыкать надо по ячейке, пока не появится курсор, затем — выходить из нее и тогда устанавливается нужный тип данных.
P.S. С региональными настройками все в порядке, там стоит ДД.ММ.ГГ

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

С региональными настройками все в порядке, там стоит ДД.ММ.ГГ
Странно. У меня региональная настройка влияет на формат даты в Экселе (Win98SE rus, Office2000 rus). Может, в твоем продвинутом Экселе или Офисе есть собственные установки краткого и полного вида даты?

То есть у меня при указании типа данных в колонках сразу получается ДД.ММ.ГГ: код: Попробуй у себя.
И «принудительная установка» работает, она превращает содержимое ячейки в текст.

Nosorog, да, так у всех влияет. Если в рег. настр. стоит ДД.ММ.ГГ, то и в Экселе параметру vbShortDate будет отвечать именно такой формат даты.
У меня не в том была проблема.
Короче, я ее решил сам.
Для установки формата ДД.ММ.ГГ и дейсвительного его представления как дыты я сделал следующее:

— Sheets(«Транзит»).Cells(2, 3).NumberFormat = «dd.mm.yy;@»
— установил Dim D As Date
— присвоил переменной значение D = Sheets(«Транзит»).Cells(2, 3).Text
— затем выполнил операцию «наоборот» — присвоил переменной значение Sheets(«Транзит»).Cells(2, 3).Text = D
Все пашет, задача решена.

Как задать тип данных для ячеек рейнджа?

Enum и типы данных. Как задать тип значений явно, и какой тип будет при переполнении?
Пытаюсь сделать функцию с передачей нескольких параметров,используя битовые операции. В качестве.

Как задать тип данных в запросе
Здравствуйте . Возник такой вопрос: Как задать тип данных в запросе ? Мне нужно посчитать премию.

Как правильно задать тип соединения с базой данных?
В программе работы с базой данных MDB решил выделить операции работы с базой данных в отдельный.

Какой тип данных надо задать для ввода произвольной функции F (x) с клавиатуры
Доброго времени суток! Немогу понять какой тип данных надо задать для ввода произвольной функции.

Ну не знаю. Фигня такая. Открываю csv. Потом в столбце, где даты (по виду, для людев, не для компа) запускаю простейший цикл:

и он мне пишет в кажной ячейке — Long
(соответственно i3 — переменная, строчки считает)

Добавлено через 9 минут
Короче, я нашел решение, но это явно непрофессиональные решения. Бред конечно, но работает железно.

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

А еще нашел ну просто экзотический способ. При сортировке эти уроды в сортируемом столбце превращаются в какие-то дикие даты, времен Ивана Грозного, спасибо, что не Палеолит. В сортировке есть такая опция: DataOption. У нее по официальной справке VBA и у Уокенбаха два значения: xlSortNormal и xlSortTextAsNumbers. ФСЕ! Я взял и написал xlSortTextAsDate. Не поверите, но работает железно. По моему, VBA от нас что-то скрывает.

Читать еще:  Excel to sql

Блин, дошло. А правда, чо я считаю этим циклом?! СПАСИБО.

Добавлено через 18 минут
Пощитал вот так:

Решение

Решение

Что за проги я точные названия не знаю, подскажет гугл (или админы ), или может тот кто с ними работает. Я просто знаю что у нас на работе коллегам ставили спецпрогу, чтоб с csv работать.
Но кажется нормальных бесплатных мало или нет.

«файлов много, это чтож, каждого руками открывать через импорт?» — если все файлы по структуре одинаковые, то можно процесс импорта одного файла записать рекордером в макрос (все настройки по полям), затем этот макрос использовать для импорта других аналогичных файлов.
Можно добавить диалог выбора файлов, или папки, откуда нужно обработать все файлы. В общем, смотря по задаче, которая пока известна только Вам.
А там может и парсинг никакой не нужен

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

Типы данных VBA

Типы данных — это определенные виды данных, которые VBA сохраняет и может манипулировать.

Тип Date

VBA использует тип Date для хранения дат и времени.

При работе с этим типом данных следует иметь ввиду, что VBA-типы Date не являются такими же типами, как в рабочих листах Excel, хотя во многом и схожи с ними. Например, базовой датой для VBA-типа Date является 30 декабря 1899 года, а в Excel — 1 января 1900 года.

VBA-тип Date является типом последовательных дат. VBA использует отрицательные числа для представления дат ранее базовой даты (30 декабря 1899), и положительные — для дат после базовой. Число 0 представляет саму дату 30.12.1899.

В значении последовательной даты целая часть — это общее число дней от базовой даты. Дробная часть (цифра справа от десятичного знака) — эти цифры обозначают время дня как часть дня. Один час — это 1/24 дня, одна минута — 1/1440 дня, секунда — 1/86400 дня.

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

Числа

VBA имеет шесть различных численных типов данных: Byte, Integer, Long, Single, Double, Currency.

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

Целые числа

Integer — это целое число без дробной части (целые числа никогда не содержат десятичного знака, даже если десятичная часть равна нулю).

VBA предоставляет три типа целых данных: Byte, Integer, Long.

Byte — наименьший из трех типов целых данных, предназначен для хранения числе от 0 до 255. Этот тип обычно используют для хранения двоичных данных.

Integer использует диапазон целых чисел от -32768 до 32767.

Long использует диапазон целых чисел от -2147483648 до 2147483647.

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

VBA автоматически преобразует данные типов Byte, Integer, Long в текст, когда они выводятся на экран, используя такие процедуры, как MsgBox.

Числа с плавающей точкой

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

VBA имеет два типа данных с плавающей точкой: Single, Double.

Single используется для хранения:
отрицательных чисел от -3,402823*10 38 до -1,401298*10 -45
и положительных от 1,401298*10 -45 до 3,402823*10 38 .
Числа, хранимые с использованием типа Single, называются числами одинарной точности.

Double используется для хранения:
отрицательных чисел от -1,79769313486232*10 308 до -4,94065645841247*10 -324
и положительных от 4,94065645841247*10 -324 до 1,79769313486232*10 308 .
Числа, хранимые с использованием типа Double, называются числами двойной точности.

Следует иметь ввиду, что операции, выполняемые над числами с плавающей точкой, немного медленнее подобных операций над другими численными типами данных. Кроме того, числа, хранимые как типы данных с плавающей точкой, могут быть подвержены ошибкам округления. Если число с плавающей точкой очень большое или очень малое, VBA отображает его в экспоненциальном представлении.

В экспоненциальном представлении значения записываются без начальных и конечных нулей, и слева от десятичного знака имеется только одна цифра. Число умножается на 10 в некоторой степени, чтобы показать, где на самом деле находится десятичный знак. Следует помнить, что отрицательная степень приводит в результате к меньшему числу, а положительная — к большему. Вместо надстрочного символа показателя степени используется буква Е:
4.1Е3=4100
2.01Е-2=0.0201

Читать еще:  Vba excel с нуля

Тип данных Currency

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

Currency хранит числа в диапазоне от -922337203685477,5808 до 922337203685477,5807.

Текстовые строки

Любые текстовые данные, сохраняемые в VBA, называются строками. Для их хранения предназначен тип данных String.

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

Строки всегда заключаются в двойные кавычки.

Существует две категории строк: строки переменной длины и строки фиксированной длины. По умолчанию в VBA все строки переменной длины.

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

Логические значения

VBA-программа принимает то или иное «решение», основываясь на различных условиях. Любое условие может принимать два значения: True (Истина) или False (Ложь). Логические значения True и False называются булевскими значениями, а тип данных — Boolean.

Булевские значения получают как результат операции сравнения. Операции сравнения имеет место при сравнении одного с другим, например, при сравнении двух чисел для определения, которое из них больше.

Тип данных Variant

Это особый тип данных, который может сохранять любые типы, за исключением типа Object. VBA использует этот тип данных для всех переменных, если только они не объявлены явно.

Данные типа Variant принимают характеристики определенного типа, который они сохраняют в данный момент. Например, если данные типа Variant содержат строковые данные, Variant принимает характеристики типа String. VBA использует для данных типа Variant наиболее компактное представление, возможное для конкретных значений, находящихся в данных.

Несмотря на то, что типы Variant удобны и избавляют от некоторой части работы при написании кода, они требуют большего объема памяти, чем любой другой тип данных, за исключением больших строк. Кроме того, математические операции и операции сравнения над данными типа Variant выполняются медленнее, чем подобные операции над данными любого другого типа. Следует избегать использования переменных Variant.

Подведем итог вышесказанному:

Тип данных

Описание и диапазон значения

Объекты Range и Selection

В иерархии Excel объект Range (диапазон) идет сразу после объекта worksheet. Объект Range является одним из ключевых объектов VBA. Объект Selection (выбор) возникает в VBA двояко — либо как результат работы метода Select, либо при вызове свойства selection. Тип получаемого объекта зависит от типа выделенного объекта. Чаще всего объект Selection принадлежит классу Range и при работе с ним можно использовать свойства и методы объекта Range. Интересной особенностью объектов Range и selection является то, что они не являются элементами никакого семейства объектов.

Адресация ячеек

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

Имя ячейки состоит из имени столбца (их 256 — А, В, . Z, АВ, . HZ, IA, . IV) и номера (1, . 16384).

Адресация задается индексом строки и индексом столбца. Например, R1C1, R2C3

Признаком абсолютной адресации является знак «$», предшествующий имени строки (абсолютной адресации на строку) или столбца (абсолютной адресации на столбец). Например, $А10, А$10 и $А$10 задают абсолютную адресацию на столбец А, строку 10 и ячейку А10 соответственно

Указывается смещение по отношению к активной ячейке. Смещение приводится в квадратных скобках, причем знак указывает на направление смещения. Например, если активной ячейкой является касз, то R[i]C[-1] дает ссылку на ячейку кзс2

Адресация ячейки рабочего листа является лишь частью полного адреса ячейки, который в общем случае включает имя рабочего листа и адрес книги. При задании полного адреса за именем листа следует знак «!», а адрес книги заключается в скобки. Например,

В первой строке данного примера дана относительная ссылка на ячейку AI активного рабочего листа, во второй — на ячейку AI рабочего листа листа активной книги, а в третьей на ячейку AI рабочего листа лист2 книги моякнига-xls текущего рабочего каталога.

Задание групп строк и столбцов с помощью объекта Range

Если в диапазоне указываются только имена столбцов или строк, то объект Range задает диапазон, состоящий из указанных столбцов или строк. Например, Range («А: с») задает диапазон, состоящий из столбцов А, в и с, а Range <"2: 2") - из второй строки. Другим способом работы со строками и столбцами являются методы ROWS (строки) и Columns (столбцы), возвращающие коллекции строк и столбцов. Например, столбцом А является columns (1), а второй строкой - ROWS (2).

Связь объекта Range и свойства Cells

Так как ячейка является частным случаем диапазона, состоящим только из единственной ячейки, объект Range также позволяет работать с ней. Объект cells (ячейки) — это альтернативный способ работы с ячейкой. Например, ячейка А2 как объект описывается Range («A2») или cells (1,2). В свою очередь объект ceils, вкладываясь в Range, также позволяет записывать диапа зон в альтернативном виде, который иногда удобен для работы, а именно,

Читать еще:  Rename file excel примеры

Range («А2:C3») И Range(Cells(1,2), Cells(3,3))

Определяют один и тот же диапазон.

Свойства и методы объекта Range

Объект Range позволяет сочетать гибкость VBA и мощь рабочего листа Excel. Более 400 встроенных функций рабочего листа существенно упрощают и делают более наглядным программирование на VBA.

Далее приводятся наиболее часто используемые свойства и методы объекта

Перечислим основные свойства объекта Range.

Свойства и методы объектов семейства WorkSheets Excel VBA

Свойства и методы объектов Application и Workbooks рассматриваются в предыдущей статье .

Основные свойства и методы объектов семейства WorkSheets

Объект Worksheet представляет собой рабочий лист. Объект Worksheet можно получить, используя свойства ActiveSheet или Worksheets объекта Workbook.

Свойства объектов семейства WorkSheets

Методы объектов семейства Worksheets

События объекта Worksheet

Объект Range

Адресация ячеек в Excel
Для ссылок на ячейки в Excel используются 2 формата:

Полный адрес ячейки может содержать также имя рабочего листа и адрес книги. После имени листа ставится знак “!”, а адрес книги заключается в квадратные скобки. Например:

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

Если используется свойство Range, то в качестве аргумента указывается любая допустимая в Excel ссылка в формате A1. Если имя листа не указывается, то используется активный лист. Например:

‘Ячейке A5 листа Лист1 присвоить значение 5
Worksheets(«Лист1»).Range(«A5»).Value = 5
‘Ячейке A5 текущего листа присвоить значение 5
Range(«A5»).Value = 5

Свойство Cells используется для доступа к отдельной ячейке. В качестве аргументов указываются номер строки и столбца. Например, так можно присвоить значение ячейке A5 первого рабочего листа:
Worksheets(1).Cells(5,1).Value = 5

Можно также использовать свойство Cells для альтернативного указания диапазона. Например:
Range(«A2:C3») и Range(Cells(2,1), Cells(3,3))
определяют один и тот же диапазон.

Основные свойства объекта Range

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

Основные методы объекта Range

Методы объекта Range, реализующие команды Excel

Кроме приведенных выше методов, реализующих команды объект Range имеет методы, которые используют команды Excel.

Рассмотрим свойства и методы объекта Range и Selection на примере выполнения задания.
Задание 1.

1. На рабочем листе с именем Лист1 поместите кнопку формы.
2. Назначьте для этой кнопки макрос с именем Кнопка1_Щелкнуть.
3 . В окне редактирования кода редактора Visual Basic запишите следующий программный код.

Option Explicit
Sub Кнопка1_Щелкнуть()
‘В ячейку A1 записывается текст
Range(«A1″).Value = » Упражнение «
‘Выделяется ячейка A1
Range(«A1»).Select
With Selection
‘Получаем адрес активной ячейки
MsgBox «Адрес активной ячейки» & .Address()
‘Получаем значение в активной ячейке
MsgBox «Значение активной ячейки » & .Value
End With
‘Изменяем параметра шрифта для активной ячейки
With Selection
.Font.Size = 16
End With
‘В ячеки вводим числовые значения и формулу
Range(«A2»).Value = 2
Range(«B2»).Value = 4
Range(«C2»).Formula = «=A2^B2»
‘Получаем количество строк в диапазоне
MsgBox «Количество строк в области A1:C2 =» & Range(«A1:C2») _
.Rows.Count
MsgBox «Количество строк в текущем диапазоне» & Range(«A1») _
.CurrentRegion.Rows.Count
‘Очищаем диапазон
Range(«A1:C2»).Clear
‘ Используем объект Cells
Cells(1, 1) = » Упражнение «
End Sub

4. Прочитайте все команды программы и попытайтесь понять их назначение и синтаксис записи. Обратите внимание на текст комментариев.
5. Запустите макрос на выполнение.
6. Проследите за тем, какие действия выполняет программа.
7. Сопоставьте команды программы и выполняемые ей действия

Задание 2 . Пусть на рабочем листе имеется таблица. В левой ячейке ее первой строки находится заголовок таблицы. В следующей строке – заголовки столбцов. В остальных строках – данные. Количество строк заранее не известно. Создайте диалоговое окно, которое позволит отформатировать таблицу: разместит заголовок таблицы по центру над столбцами, изменит шрифт (размер – 14, курсив, цвет – красный), заголовки столбцов расположит в центре, изменит шрифт на полужирный. В окне также имеется поле для ввода диапазона ячеек и кнопка, позволяющая убрать форматирование для указанных ячеек. Вид диалогового окна и результат форматирования показан на рис. 1, 2.

Выполните следующие действия:

1. Создайте приведенную на рис.6.3 форму. На ней размещены элемент Надпись , две кнопки и элемент RefEdit. Установите необходимые свойства элементов.
2. В общей области окна редактирования кода формы декларируйте переменные:

Dim myR As Range
Dim Заголовок As Range
Dim Названия As Range
Dim c As Integer
Dim r As Integer

3. Напишите процедуры обработки события Click для кнопок. Они могут быть примерно такими:

Private Sub КнопкаФорматировать_Click()
‘присваиваем переменной myR значение (ссылка на
‘диапазон берется из элемента RefEdit)
Set myR = Range(RefEdit1.Text)
r = myR.Rows.Count ‘число строк в диапазоне
c = myR.Columns.Count ‘число столбцов в диапазоне
Set Заголовок = Range(myR.Cells(1,1), myR.Cells(1,c))
Set Названия = Range(myR.Cells(2,1), myR.Cells(2,c))
Заголовок.Select
Selection.HorizontalAlignment = xlCenterAcrossSelection
With Заголовок.Font
.Name = «Arial Cyr»
.FontStyle = «полужирный курсив»
.Size = 14
.ColorIndex = 3
End With
Названия.HorizontalAlignment = xlCenter
With Названия.Font
.Name = «Arial Cyr»
.FontStyle = «полужирный»
.Size = 10
End With
End Sub Private Sub КнопкаУбратьФормат_Click()
Set myR = Range(RefEdit1.Text)
myR.ClearFormats
End Sub

4. Проверьте работу программы. Для вызова окна используйте кнопку, размещенную на рабочем листе.

Ссылка на основную публикацию
Adblock
detector