VBA Найти среднее значение элементов второго столбца матрицынайти среднее значение элементов 2-го столбца, максимальное значенне этих элементов и количество значений меньших 78. Вот что у меня получилось, но оно не работает чего-то,
помогите пожалуйста
Option Base 0
' Опис змінних рівня модуля
Dim Список(3, 2) As Variant, i As Integer
Dim СписокВиводу(3) As Variant
Private Sub CommandButton1_Click()
'процедура проведення обчислень з вибраними...https://www.cyberforum.ru/ vba/ thread713612.html
Обращение к файлам rtf из VBA Word для копирования содержимого VBA Кто знает каким образом можно копировать части rtf файла в ворд? Как пример кусочек кода:
fname = "C:\НАКАЗ.rtf"
Set doc2 = ActiveDocument
ActiveDocument.Content.Text = ""
Set doc1 = Documents(fname) 'здесь возникает ошибка -"неправильный тип файла"
doc1.Open FileName:=fname
s = doc1.Content.Text
В дальнейшем нужно периодически обращаться к файлу rtf...
VBA Автосортировка по указаному номеру столбцаВсем доброго времени суток.
У меня возникла такая проблема. Не знаю как осуществить следующее.
Есть файл эксель, там много столбцов. И есть ячейка. Если мы укажем в ячейке, к примеру 1, сортируется столбец А (по возрастанию), если - 4 , то D и так далее
Может подскажет кто что и как делать?https://www.cyberforum.ru/ vba/ thread713490.html
VBA Вставка относительных ссылок в формулу посредством переменныхhttps://www.cyberforum.ru/ vba/ thread713425.html Добрый день.
я который раз возвращаюсь к одной загвоздке в своем макросе и никак не могу ее решить.
помогите пожалуйста.
есть вырезка из кода:
k = ActiveCell.Offset(-9, -5).Address(0, 0, ReferenceStyle:=xlR1C1)
s = ActiveCell.Offset(-9, -6).Address(0, 0, ReferenceStyle:=xlR1C1)
VBA Построение диаграммы. Создание нового тега и ошибка "type mismatch" Здравствуйте! После запуска макроса выдает ошибку run-time error 13 type mismatch в этом месте кода:
X1 = Range(Workbooks(MyName).Worksheets(MyDannie).Cells(iRowi + 7, iClmj + 3), Workbooks(MyName).Worksheets(MyDannie).Cells(iRow1, iClmj + 3)).Value
Не могу разобраться в причине ее возникновения. Попытался уменьшить количество аргументов. Проблему не решило. Подскажите как исправить проблему....
VBA Поиск на листах и систематизация данныхhttps://www.cyberforum.ru/ vba/ thread713297.html На "Лист1" в 1 столбце находится список организаций в столбец 2 и 3 должны копироваться данные со 2 и 3 листа. На 2 и 3 Лист выгружаются данные из разных программ 1С и ИМУС нужно что бы макрос отыскивал на "Лист2" организацию например "Стройматериалы" брал данные из 2 столбца и записывал их на "Лист1" в 2 столбец напротив "Стройматериалы" далее находил "Стройматериалы" на "Лист3" копировал данные...
VBA Переключение языка ввода в зависимости от столбцаДобрый день!
Есть таблица из двух колонок.
Как прописать макрос, который бы делал следующее?:
1. если курсор находится в первой колонке - язык ввода становится русским
2. если курсор находится во второй колонке - язык ввода становится английскимhttps://www.cyberforum.ru/ vba/ thread713186.html
VBA Получить метки дисков Есть форма для выбора диска, на который нужно сохранить отчет Excel. Т.к. очень часто нужно сохранить отчет на флешку, возникла необходимость выводить в ComboBox не только букву диска, но и его метку (чтоб у неопытных пользователей не возникало трудностей при поиске нужного устройства).
Все работает кроме вывода метки диска :
Private Declare Function GetLogicalDriveStrings Lib "kernel32"...
VBA Проверка на число в InputBox вызывает ошибкуhttps://www.cyberforum.ru/ vba/ thread713125.html a = InputBox("a")
Do While Not IsNumeric(a)
MsgBox "Ошибка"
a = InputBox("a")
Loop
b = InputBox("b")
Do While Not IsNumeric(b)
MsgBox "Ошибка"
b = InputBox("b")
Loop
VBA Реализовать оповещение, если в заданный промежуток времени от адресата нет письмаhttps://www.cyberforum.ru/ vba/ thread713123.html Как можно реализовать оповещение, если в заданный промежуток времени от адресата нет письма.
К примеру есть адресаты с ящиками ввида:
mail1@example.com
mail2@example.com
.........
mail100@example.com
Если в заданный период времени, допустим, раз в сутки, от одного из адресатов нет письма, то приходило бы письмо/оповещение об этом.
VBA Передавать в макрос параметры в зависимости от выбранной ячейки Суть такова:
мне нужно привязать уже готовый макрос к нескольким ячейкам (макрос - на внешний запуск приложения) но при этом ещё сделать условие что если одна ячейка вызов проги с одним параметром, другая ячейка с другим параметром
Сама программа на Delphi 7
надеюсь на вашу помощь)))
VBA Автоматический ввод пароля при открытии файла ExcelДобрый день!
По работе каждый день приходится сталкиватся с множеством Excel-файлов, на которых стоит один и тот же пароль.
Все эти файлы имеют схожее название и представляют собой примерно следующее: "forex" + date, то есть forex211012, forex221012, forex271112. На всех стоит один и тот же пароль. Каждый раз ввод
Интерфейсы обеспечивают унифицированную обработку данных вне зависимости от их типа. Это очень важно, так как позволяет базовым структурам массивов работать с данными любого типа, не вдаваясь в тонкости реализации того или иного типа данных.
Список операций, которые могут поддерживаться базовыми или пользовательскими типами данных, довольно велик, но лишь одна из них нуждается в обязательной поддержке - операция создания объекта реализуемого базового или пользовательского типа (определенная в интерфейсе IFactory). Ее важность обуславливается тем, что без реализации данной операции базовые структуры не могут создать массив объектов данного типа, а значит, и работа с таким массивом в какой бы то ни было форме становится невозможной.
Что касается остальных операций, то решение о их поддержке принимается в зависимости от целей, которые ставятся над проектируемым типом данных. Если предолагается вывод информации в текстовые или иные файлы - реализуется интерфейс ISerializable. Если нужно сравнивать элементы между собой (в том числе в ходе сортировки) - в типе данных реализуется интерфейс IComparable или создается специальный класс с реализацией интерфейса IComparer. Если нужна возможность производить математические вычисления с использованием разработанного типа данных - реализуются интерфейсы IConvertible и IMath. И наконец, очень важным интерфейсом является интерфейс ICloneable, реализация которого позволяет структурам данных создавать точные копии элементов со всеми их значениями, вместо того, чтобы копировать только ссылки на элементы (что чревато потерей данных в ходе их модификации по одной из ссылок). Листинги всех интерфейсов приводятся ниже.
Код интерфейса IFactory
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
'________________________________________________________________'_______________________ ________________________'______________________ Модуль IFactory _______________________'_____________________ Версия: 0.0.0 ______________________'____________________ Автор: Aksima ____________________'___________________ Библиотека: AksiArrays ___________________'________________________________________________________________'______________ ______________'______________ Назначение: Определяет интерфейс ______________'______________ для создания классовых объектов. ______________'________________________________________________________________PublicFunction NewOb() AsObjectEndFunction
Код интерфейса ISerializable
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
'________________________________________________________________'_____________________ _____________________'____________________ Модуль ISerializable ____________________'_____________________ Версия: 0.0.0 ______________________'____________________ Автор: Aksima ____________________'___________________ Библиотека: AksiArrays ___________________'________________________________________________________________'_______________ ______________'______________ Назначение: Определяет интерфейс _____________'_________________ для сериализации объектов. _________________'________________________________________________________________PublicFunction Serialize() AsStringEndFunctionPublicSub Unserialize(ByVal s AsString)
EndSub
Код интерфейса ICloneable
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
'________________________________________________________________'______________________ _______________________'_____________________ Модуль ICloneable ______________________'____________________ Версия: 0.0.0 _____________________'___________________ Автор: Aksima ____________________'__________________ Библиотека: AksiArrays ___________________'________________________________________________________________'_______________ _______________'______________ Назначение: Определяет интерфейс ______________'_____________ для создания точной копии объекта. _____________'________________________________________________________________PublicFunction Copy() AsObjectEndFunction
Код интерфейса IComparer
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
'________________________________________________________________'_______________________ _______________________'______________________ Модуль IComparer ______________________'_____________________ Версия: 0.0.0 _____________________'____________________ Автор: Aksima ____________________'___________________ Библиотека: AksiArrays ___________________'________________________________________________________________'_______________ ______________'______________ Назначение: Определяет интерфейс _____________'_________________ для объекта - "сравнителя". ________________'________________________________________________________________PublicFunctionCompare(ByVal one AsObject, ByVal another AsObject) AsLongEndFunction
Код интерфейса IComparable
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
'________________________________________________________________'______________________ ______________________'_____________________ Модуль IComparable _____________________'_____________________ Версия: 0.0.0 _____________________'____________________ Автор: Aksima ____________________'___________________ Библиотека: AksiArrays ___________________'________________________________________________________________'_______________ ______________'______________ Назначение: Определяет интерфейс _____________'_____________ для сравнения объектов между собой. ____________'________________________________________________________________PublicFunction CompareTo(ByVal another AsObject) AsLongEndFunction
Код интерфейса IConvertible
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
'________________________________________________________________'____________________ _____________________'____________________ Модуль IConvertible _____________________'_____________________ Версия: 0.0.0 ______________________'____________________ Автор: Aksima ____________________'___________________ Библиотека: AksiArrays ___________________'________________________________________________________________'_____ ____'_____ Назначение: Определяет интерфейс для преобразования ____'______ объекта одного класса в объект другого класса. ______'________________________________________________________________PublicFunction Convert(ByVal x AsVariant) AsObjectEndFunction
Примеры решения задач с использованием методов библотеки AksiArrays
В этой главе приведены примеры решения задач из первой части статьи средствами библиотеки AksiArrays. Попробуйте сравнить объем кода в этих примерах с примерами программ из первой части.
Решение задачи №1
Пусть показания температуры находятся в файле "Geo.txt". Тогда решение задачи таково:
Visual Basic
1
2
3
4
5
6
Sub AverageTemperatureAksima()
Dim v AsNew AksiVector
v.Init New AksiFloat, 31
v.GetData_TextFile "Geo.txt"
MsgBox "Средняя температура января: " & Format(v.Average, "0.0") & " градуса."EndSub
Как видно из текста программы, задачи вычисления агрегирующей функции (среднего арифметического), а также извлечения данных из файла существенно упростились. Кроме того, осуществляется ряд проверок на факт существования файла "Geo.txt" и проводится разбор текстового содержимого файла (десериализация) для получения массива вещественных чисел. Все эти действия скрыты от пользователя библиотеки - ломать над ними голову вам не нужно.
Решение задачи №2
Предположим, что оценки учащихся находятся в файле "Pupils.txt":
Visual Basic
1
2
3
4
5
6
7
Sub ControlWorkRatingsAksima()
Dim v AsNew AksiVector
v.Init New AksiInteger, 20
v.GetData_TextFile "Pupils.txt"
v.PutData_DialogBox "Содержимое классного журнала"
v.CountUnique.PutData_DialogBox "Оценки и их количество"EndSub
Здесь использована функция CountUnique, которая, как уже отмечалось, позволяет быстро и удобно определить уникальные элементы целочисленного массива и подсчитать их количество.
Решение задачи №3
Visual Basic
1
2
3
4
5
6
7
Sub FindMaxNumberAksima()
Dim m AsNew AksiMatrix
m.Init New AksiInteger, 10, 8
m.GetData_RandomGenerator 50, 99
m.PutData_DialogBox "Сгенерированный массив"
MsgBox "Максимальный элемент массива: " & m.Max
EndSub
Иницализация массива случайными значениями, его вывод в диалоговое окно и поиск максимального значения массива - с новой библиотекой каждая операция требует только одной команды.
Решение задачи №4
Visual Basic
1
2
3
4
5
6
7
8
Sub SortNumbersAksima()
Dim v AsNew AksiVector
v.Init New AksiInteger, 50
v.GetData_RandomGenerator 50, 99
v.PutData_DialogBox "Перед упорядочиванием"
v.Sort
v.PutData_DialogBox "После упорядочивания"EndSub
Выполнить сортировку данных в рассматриваемой задаче помогает библитечная функция Sort. По умолчанию она осуществляет сортировку данных по неубыванию методом пузырка. Но можно выбрать и другие параметры сортировки.
Решение задачи №5
Исходя из того, что оценки учащихся по всем предметам находятся в файле "PupSubjs.txt", можно написать следующий код:
Visual Basic
1
2
3
4
5
6
7
Sub PupilAndSubjectAveragesAksima()
Dim m AsNew AksiMatrix
m.Init New AksiInteger, 20, 3
m.GetData_TextFile "PupSubjs.txt"
m.Parts(AO_ROWS).GroupOperation("Average", VbGet, New AksiFloat).PutData_DialogBox "Средние оценки учащихся"
m.Parts(AO_COLUMNS).GroupOperation("Average", VbGet, New AksiFloat).PutData_DialogBox "Средние оценки по каждому предмету"EndSub
С применением библотеки подход к решению задач, в которых надо производить однотипные действия над элементами матрицы, выражается следующим образом: получаем вектор интересующих нас элементов матрицы с помощью функции Parts (с параметром AO_ROWS - вектор строк, AO_COLUMNS - вектор столбцов) и производим однотипные операции над каждым элементом вектора с помощью функции GroupOperation.
Решение задачи №6
Visual Basic
1
2
3
4
5
6
7
Sub TrianglesExtremesDifferenceAksima()
Dim m AsNew AksiMatrix: Const N = 6
m.Init New AksiInteger, N, N
m.GetData_RandomGenerator 50, 99
m.PutData_DialogBox "Обрабатываемая матрица"
MsgBox "Разница между максимальным элементом над главной диагональю и минимальным элементом под главной диагональю равна: " & m.Parts(AO_UP_MAIN_EXC).Max - m.Parts(AO_DOWN_MAIN_EXC).Min
EndSub
Волшебная функция Parts умеет извлекать не только строки или столбцы, но и более сложные элементы матрицы, такие, например, как треугольник над большой диагональю матрицы.
Заключение
В ходе разбора первой части статьи мы увидели, что хотя массив - понятие простое, но обработка массивов - это довольно сложная и обширная тема. Поэтому создание инструмента, позволяющего упростить обработку массивов - достойная задача для любого программиста. И хотя библиотека AksiArrays не претендует на полный охват всего спектра задач, связанных с обработкой массивов, она успешно справляется с наиболее распространенными из них, например: ввод-вывод массивов, получение агрегатных значений, выделение особых элементов массива и другие.
Поэтому автор выражает надежду, что проект "Библиотека AksiArrays" окажется небесполезным для уважаемого сообщества, во многих областях ускоряя процесс разработки приложений, использующих массивы. Также возможно, что любознательные люди, изучив код библиотеки, смогут составить себе представление о пользовательских классах объектов и методах работы с ними.