Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Excel VBA (часть 2)

Автор: TraceCaffeine
Дата сообщения: 27.04.2009 15:37
Всем привет!

У меня задачка, пока не вижу путей решения:
1. Есть xls таблица макрос определенным образом ее обрабатывает
2. Вызывает форму со списком. Данные для формирования списка берет из той же таблицы.
3. Логический массив. Он должен определять, какие данные из выше указанного списка мы в дальнейшем будем использовать а какие нет.

Нужо поставить в соответствие выбранным элементам из списка формы элементы этого массива. Т.е. соответственно, выбранные элементы списка в массив записываются как true не выбранные false. Порядковый номер элемента массива соответствует порядковому номеру элемента списка из формы.
Автор: DenisSmo
Дата сообщения: 27.04.2009 16:09
подскажите с синтаксисом как включить адреса ячеек в массив
на простом примере
адрес меняется значение постоянное

for i =0 to 4
Range("a(1+i)")=1
next i

то что должно получиться
    1                   
         1            
             1         
                  1    
                       1
Автор: Tarakanatar
Дата сообщения: 27.04.2009 17:57
Народ есть такая проблема, копируя данные из Access 2003 в Excel 2003 нет возможности вставить (Paste special values). когда был 2000 Excel и 2003 Acces проблемы небыло.
Автор: SAS888
Дата сообщения: 28.04.2009 08:58
DenisSmo
Неувязка.
Судя по коду, массив получается размерностью (5Х1), а судя по примеру - (5Х5).
Определитесь, что Вам нужно.

Добавлено:
TraceCaffeine
Можно создать двумерный массив, в котором в первой размерности - все элементы списка, а во второй - соответственно, True или False для каждого элемента 1-й размерности.
Автор: TraceCaffeine
Дата сообщения: 28.04.2009 11:02
SAS888

Можно конено и так, но это не суть, меня больше интересует реализация выборки на основе multiselect ListBox. Создал форму в ней ListBox и CommandButton, нужно обработать нажатие таким образом, что исходя из выбранных элементов из списка, соответствущие им элементы массива поменя ли бы свое значение на True.
Автор: SAS888
Дата сообщения: 28.04.2009 12:33
TraceCaffeine
Пусть есть одномерный массив a, имеющий ту же размерность, что и ListBox1.
Тогда присвоить значение "True" элементам массива, которые соответствуют выбранным индексам в ListBox1, можно так:

Код: For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) Then a(i) = "True" Else a(i) = "False"
Next
Автор: Pravoved90
Дата сообщения: 28.04.2009 12:36
isabpchereda SAS888 Благодарю за помощь. Сделал, как посоветовал SAS888 - все работает))
Автор: DenisSmo
Дата сообщения: 29.04.2009 07:07
SAS888
да моя ошибка, вообще то нужен примера для (5Х1).

моя задача выборка из одного столбца по 19 значений для дальнейшей обработки,
грубо первый диапозон а1:a19 второй а20:А39 и так далее

думаю разберусь на обычном примере (5Х1)




Добавлено:
SAS888
да моя ошибка, вообще то нужен примера для (5Х1).

моя задача выборка из одного столбца по 19 значений для дальнейшей обработки,
грубо первый диапозон а1:a19 второй а20:А39 и так далее

думаю разберусь на обычном примере (5Х1)


Добавлено:
SAS888
да моя ошибка, вообще то нужен примера для (5Х1).

Mоя задача выборка из одного столбца по 19 значений для дальнейшей обработки,
грубо первый диапозон а1:a19 второй а20:А39 и так далее

думаю разберусь на обычном примере (5Х1)


Добавлено:
SAS888
да моя ошибка
for i =0 to 4
Range("a(1+i)")=1
next i
размерность (5Х1)
Автор: TraceCaffeine
Дата сообщения: 29.04.2009 09:20
SAS888

Цитата:
Пусть есть одномерный массив a, имеющий ту же размерность, что и ListBox1.
Тогда присвоить значение "True" элементам массива, которые соответствуют выбранным индексам в ListBox1, можно так:


Спасибо, то что нужно! Отлично работает
Автор: strat
Дата сообщения: 29.04.2009 11:08
забиваю в ячейку а1 цифру 1, сохраняю в текстовый формат с разделителем табуляции, файл получается размером 3 байта т.к. дописываются символы перевода строки

вопрос - как сохранить в 1 байт либо обрезать после сохранения?
Автор: isabpchereda
Дата сообщения: 29.04.2009 11:48
strat

Я бы посмотрел двоичный ввод/вывод.

Автор: zaqwerty
Дата сообщения: 29.04.2009 12:27
в каждой стороке стоит CheckBox хочу что бы при выборе какого либо CheckBox копировался определенный диапозон подскажите как правильно написать этот макрос
Sub Макрос1()
If CheckBox1 = False Then
Range("B2").Select
Selection.Copy
Range("K2").Select
ActiveSheet.Paste
End If
End Sub
он у меня копирует при любом состоянии CheckBox и как правильно записать что бы было CheckBox(i) где i - переменная. Заранее спасибо.
Автор: strat
Дата сообщения: 29.04.2009 13:12
isabpchereda

Цитата:
двоичный ввод/вывод

что это, подробней? яндекс по запросу "двоичный ввод excel" ничего не дал
Автор: jocer
Дата сообщения: 30.04.2009 11:58
zaqwerty
если галочка будет стоять только в одном из checkbox то возможно лучше использовать OptionButton?
и нужно определиться когда будет вызываться ваша функция, при нажатии на кнопку или по-другому, например, так:

Код:
Private Sub CheckBox1_GotFocus()
If CheckBox1 = False Then
Range("B2").Select
Selection.Copy
Range("K2").Select
ActiveSheet.Paste
End If
End Sub
Автор: Naohh
Дата сообщения: 01.05.2009 22:14
[excel функция нечёткое неполное совпадение поиск пересечение]

Вопрос о старом:
"поиск неполного совпадения выбранного текстового значения в диапазоне.
например сравнивая СибТлк-6об и интлкот7 есть пересечение ТЛК"
найденные методы не подходят, прошу помощи правильно дописать идею на VBA.

На сколько понял для экселя есть только одна подобная функция fuzzy_search\fuzzy_ВПР
Не самая удачная, конечно, но хоть что-то.
В связи с чем хочется реализовать один из более подходящих механизмов поиска нечётких совпадений.
Реализовать самостоятельно не хватит знаний либо времени (((
Прошу о помощи, если кому не составит труда написать пользовательскую функцию по представленной ниже идее

#### Синтаксис:

Код:
Function fuzzy_search(

stToFind As String, ЧТО искать
rgLookup As Range, ГДЕ искать
Optional jIndex As Integer = 0, ИНДЕКС в списке вараинтов с вероятными совпадениями (0 или 1 не принципиально)
Optional iTolerance As Integer = 2, ОБЪЁМ пересечения

fuzzy_search = string искомого сопадения из ГДЕ
Автор: Mikh5000
Дата сообщения: 02.05.2009 20:58
Помогите написать макрос.
Имеется динамически меняющийся столбец с данными. Как при каждом появлении в столбце определенного значения (скажем, больше 50) подавать звуковой сигнал, а в другом столбце выводить это значение и время его появления. Например, появляется значение 51, время 12:00:01. Потом, если появляется, скажем 53, а 51 еще в столбце, ничего не происходит. Потом, если все значения становятся меньше 50, и появляется новое, скажем 55 - заполняется вторая строчка 55 и соответствующее время, скажем 12:00:45.
Спасибо.
Автор: isabpchereda
Дата сообщения: 03.05.2009 11:04

strat

На Гогле нашел, например, ссылку

_http://www.ssti.ru/kpi/informatika/Content/biblio/b1/inform_man/gl_19_2.html#rabota_s_file

Ниже лежит цитата со страницы.

*/
Файл произвольного доступа имеет записи фиксированной длины: можно одновременно выполнять чтение и запись в файл записей.

Открытие файла

Открывать можно как существующие на диске, так и новые файлы. Каждый файл идентифицируется в программе определенным номером, который присваивается ему в момент открытия. Свободный номер файла можно определить с помощью встроенной функции FileFree, которая возвращает очередной свободный номер для открытия файла (номер изменяется в диапазоне 1 - 511).

Файл открывают в определенном режиме работы:

Open <путь_имя__файла> [For <режимы>] [Access <направление_потока>] [<блокировка>] As [#]номер [Len=<длина_записи>]

где <путь имя_файла> - строка символов, задающая местоположение и имя дискового файла;

<режимы> - режимы работы с файлом:

Append - добавление записей

Binary - двоичный файл
*/
Автор: crotoff
Дата сообщения: 05.05.2009 10:12
помогите плиз с пользовательской функцией, нужно чтобы формула =Repl(K122) возвращала переименованное наименование. Но у меня возвращает ошибку #ЗНАЧ!

Function Repl(x As Range)
Range(x).Replace What:="Подразделение 2 Цех 1", Replacement:="Подразделение 2 служба 1", LookAt:=xlPart
Range(x).Replace What:="Подразделение 2 Цех 3", Replacement:="Подразделение 2 служба 3", LookAt:=xlPart
Range(x).Replace What:="Подразделение 2 Цех 2", Replacement:="Подразделение 2 служба 2", LookAt:=xlPart
End Function

SAS888, ты вроде похожий пример выкладывал на слил-ру, его уже потёрли
Автор: SAS888
Дата сообщения: 05.05.2009 11:41
crotoff
Примерно так:

Код: Function Repl(x As Range) As String
Dim Temp As String
Temp = Replace(x.Value, "Подразделение 2 Цех 1", "Подразделение 2 служба 1")
Temp = Replace(Temp, "Подразделение 2 Цех 3", "Подразделение 2 служба 3")
Repl = Replace(Temp, "Подразделение 2 Цех 2", "Подразделение 2 служба 2")
End Function
Автор: crotoff
Дата сообщения: 05.05.2009 12:47
SAS888
спасибо, работает! ( то адаптированный пример был, реалии посложнее будут)
Автор: SAS888
Дата сообщения: 06.05.2009 05:32
crotoff

Цитата:
то адаптированный пример был, реалии посложнее будут

Я понял. Поэтому такой "огород" и предложил. Чтобы принцип был понятен.
Автор: sobaka70
Дата сообщения: 06.05.2009 14:03
Пожалуйста, помогите со скриптом удаления СТРОК в exel по наличию в ячейках 2 столбца слов "Реализация" и "Перемещение". данные слова стоят в начале строки.файл большой, несколько тыс. строк
С VBA не сталкивался вообще.

Пример
1 2 3
----------------------------------------------------------------------------------------------------------------------------------
24.11.08    Перемещение ТМЦ № 0000002227 от 24.11.08 (с "Основной склад" на "Розничный склад")     5
13.12.08    Перемещение ТМЦ № 0000002456 от 13.12.08 (с "Основной склад" на "Временный")     3
15.12.08    Реализация (купля-продажа) № 11975 от 15.12.08 (зызызызызызы зызызызызыы)     1
31.12.08    Поступление ТМЦ (купля-продажа) вх. № 12172 от 31.12.08 (ООО "ТД "ЗыЗыЗы")     12

Поступление должно остаться. Остальные строки удалить


Автор: strat
Дата сообщения: 06.05.2009 16:47
sobaka70
а отсортировать просто столбец, выделить все начинающиеся с ненужных слов и удалить, дел на 30 секунд
Автор: sobaka70
Дата сообщения: 06.05.2009 17:17
операция часто повторяющаяся, да и ненужных комбинаций не 2, а около 10
Автор: crotoff
Дата сообщения: 06.05.2009 18:54
sobaka70
можно автофильтр задать по 2м условиям: Не содержит "Реализация" и Не содержит "Перемещение" - если строка начинается с даты (или Не начинается с..., если под дату отдельный столбец выделен). После автофильтра удаляешь строки и задаёшь ему "отобразить всё"
можно и через макрос то же самое сделать, вот к примеру

Sub Макрос1()
Selection.AutoFilter Field:=2, Criteria1:="<>*Перемещение*", Operator:= _
xlAnd, Criteria2:="<>*Реализация*"
Rows("2:65000").Delete
ActiveSheet.ShowAllData
End Sub
Автор: SAS888
Дата сообщения: 07.05.2009 06:32
sobaka70
Можно выполнить такой макрос:

Код: Sub Main()
Dim i As Long, Temp As String, x As Range, a(): Application.ScreenUpdating = False
a = Range([B1], Cells(Rows.Count, "B").End(xlUp)).Value
For i = 1 To UBound(a, 1)
On Error Resume Next: Temp = Split(a(i, 1), " ")(0)
If Err = 0 Then
If Temp = "Реализация" Or Temp = "Перемещение" Then If x Is Nothing Then Set x = Rows(i) Else Set x = Union(x, Rows(i))
Else: On Error GoTo 0
End If
Next
If Not x Is Nothing Then x.Delete
End Sub
Автор: sobaka70
Дата сообщения: 07.05.2009 12:29
Спасибо получилось
Автор: Panajabi
Дата сообщения: 07.05.2009 13:48
Помогите написать макрос, который должен удалять строки содержащие дублетные записи в ячейках определённого столбца. Удалятся так же должна и сама сравниваемая строка, если есть её копии.
Пример:
до после
BNMG002U BNMG002U
BPJR000U     BPJR000U
BUWW001U BUWW001U
BVVS0000     BXKT0000
BVVS0000   CAVJ201U
BVVS199U     CBXL001U
BVVS199U     CDCW0000
BVXG0000     CDEX101U
BVXG0000     CLBL0000
BWTJ0000     CLQQ001U
BWTJ0000     CLWE000U
BXKT0000     COKM103U
CAVJ201U     CQZZ105U
CBXL001U     CREB000U
CDCW0000 DIRD001U
CDEX101U    
CLBL0000    
CLBL0000
CLBL0000
CLBL0000
CLBL0000
CLQQ001U    
CLWE000U    
COKM103U    
CQZZ105U    
CREB000U    
DIRD001U    
Автор: strat
Дата сообщения: 07.05.2009 14:14
Panajabi

тут есть ответ http://www.planetaexcel.ru/tip.php?aid=46 может подойдет
Автор: ebrr
Дата сообщения: 08.05.2009 07:07
Уважаемые гуру помогите пожалуйста! Есть один столбец с данными типа 2,200,50 где первая запитая это разделитель тысячной а вторая разделяет копейки. Нужен макрос который бы удалил все запятые кроме последнего. Цифра в ячейке может быть и во такого вида 2,200,350,20 (два миллиона двести тысяч триста пятьдесят и двадцать). Заранее спасибо!

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133

Предыдущая тема: Написание своего HyperTerminal для считывания данных


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.