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

» Excel VBA (часть 2)

Автор: aks_sv
Дата сообщения: 11.02.2009 14:59
TXP

Цитата:
Интересует следующие как на основании имеющихся данных найти и выделить ячейку, например в ячейке:
А1 указан номер столбца,
В1 указан номер строки.
нужно найти и выделить ячейку по приведенным координатам.


Код: Sub AddressCell()
c = Range("A1").Value
r = Range("B1").Value
Cells(c, r).Select
End Sub
Автор: Mantisby
Дата сообщения: 11.02.2009 16:32
придумал себе задачку, а теперь не могу справиться
есть большой список, скажем, Колонка 1 - названия фруктов и Колонка 2 - их характеристика.

При этом одних фруктов может быть несколько разновидностей, других - одна или две.
Что желательно сделать:
Если включений одного значения в Названия больше Х (скажем >=3), оставить вверху списка и отсортировать по обеим колонкам.
Все значения, у которых включений меньше Х, отправить вниз списка и также отсортировать по обеим колонкам.
Таким образом на выходе получим примерно [more=следующее]
Апельсин желтый
Апельсин красный
Апельсин оранжевый
Яблоко желтое
Яблоко зеленое
Яблоко красное
Груша желтая
[/more]
Алгоритм приблизительно у себя набросал, а как реализовать на VBA - вопрос. Может быть кто-нибудь поможет?
Автор: barbus1
Дата сообщения: 11.02.2009 18:23
Скажите как можно сделать так что проект на Excel VBA не смогли скопировать на другой комп без регистрации или похожего на то
Автор: TXP
Дата сообщения: 12.02.2009 07:20
aks_sv

Спасибо

Добавлено:
Еще вопросик

С листа "Данные" нужно перейти на лист "Ввод" на нем из ячейки "I2" скопировать информацию и перенести её на лист "Данные" и вставить их в указанную ячейку.
В принципе это должно выглядеть так:

Код: Sheets("Ввод").Select
Range("I2").Select
Selection.Copy
Sheets("Данные").Select
c = Range("T4").Value
r = Range("Q4").Value
Cells(c, r).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Автор: SAS888
Дата сообщения: 12.02.2009 08:15
Mantisby
Задача, на мой взгляд, оказалась интереснее, чем я думал. Есть "куча" способов, как это реализовать. Но... Вы говорите, что
Цитата:
есть большой список
поэтому выполнение операций непосредственно с ячейками листа, используя CountIf, CountA, Sort и т.п., может занять много времени. В предлагаемом решении значения ячеек столбцов "A" и "B" одной командой загоняются в массив, затем производятся все необходимые операции, а затем, также одной командой значения ячеек столбцов "A" и "B" заменяются на значения "переработанного" массива. У меня нет примера файла с большим количеством данных (формировать его не хочется). Проверьте на своем. По-моему, должно выполняться быстро. Вот файл. Запустите макрос "Main".


Добавлено:
TXP
При написании кода, без необходимости не используйте метод Select.
В Вашем случае, можно так:

Код: With Sheets("Данные")
.Cells(.[T4], .[Q4]) = Sheets("Ввод").Range("I2")
End With
Автор: Mantisby
Дата сообщения: 12.02.2009 09:39
SAS888
спасибо! Выполняется действительно быстро, но почему-то некорректно. Заметил следующее:
1. Сортировка в столбце А получается не по алфавиту.
2. Некоторые записи идут не группой, а разбиваются (часть в одном месте, часть в другом). Какой-то последовательности я не уловил

да, и ещё желательно, чтобы сортировалась строки целиком. пока что, к сожалению, нет времени поковырять макрос
Автор: SAS888
Дата сообщения: 12.02.2009 10:52
Mantisby
Я сделал сортировку не по алфавиту, а по количеству одинаковых записей в столбце "A". Чем больше повторений - тем выше эта строка. Сортировка действительно ведется в диапазоне столбцов "A:B" (как Вы и ставили задачу). А как нужно было?
Пришлите фрагмент файла и на другом листе сделайте пример того, что должно получиться. Опишите задание более подробно.
Автор: TXP
Дата сообщения: 12.02.2009 11:05
SAS888

Код: With Sheets("Данные")
.Cells(.[T4], .[Q4]) = Sheets("Ввод").Range("I2")
End With
Автор: SAS888
Дата сообщения: 12.02.2009 11:15
TXP
В коде поменяйте местами правую и левую части равенства.
Автор: Kanev75
Дата сообщения: 12.02.2009 11:53
Рассматриваю вопрос о переходе на MAC, есть Office 2008 для Mac , но будут ли внем работать все надстройки и макросы на VBA?
Может быть кто то в реальности сталкивался с этим?
Автор: SAS888
Дата сообщения: 12.02.2009 12:05
Kanev75
"В лоб" не будут. Кое-что есть Здесь. Только на English.
Автор: Mantisby
Дата сообщения: 12.02.2009 13:35
SAS888
действительно некорректно описал прошу прощения.
1. сортировка в обеих частях нужна по алфавиту
2. сортировать нужно по значениям двух столбцов, но строки целиком.

вот пример файлика.
Автор: SAS888
Дата сообщения: 13.02.2009 04:50
Mantisby

Цитата:
1. сортировка в обеих частях нужна по алфавиту
2. сортировать нужно по значениям двух столбцов, но строки целиком.

Не экономьте слова. Я так и не понимаю, что нужно сделать. Чем подробнее задание - тем быстрее и точнее решение.
1. О каких "частях" идет речь? Почему их две?
2. У Вас в примере два листа. На одном 2 столбца, на другом 3. Что это значит?
3. Каковы критерии сортировки? Что значит "по двум столбцам" ?
4. Я просил пример, в котором на 1 листе - исходные данные, а на 2 - то, что после выполнении процедуры обработки должно получиться из данных на листе 1. Это позволит мне самому догадаться, что Вам все-таки нужно.
Автор: Mantisby
Дата сообщения: 13.02.2009 09:22
SAS888
окей, поправленный файлик - http://ifolder.ru/10537253.
В нем:
1й лист - все данные
2й - входные для примера
3й - желаемый результат для примера.

Сортировка должна выполняться по колонкам режиссер, затем год. Те режиссеры, у которых в списке Х и более записей, должны помещаться в верхнюю часть списка. Причем идти они должны по алфавиту и перемещается вся строка целиком (иначе происходит смещение относительно их фильмов).
Те режиссеры, у которых менее Х записей в списке, должны быть в нижней части (выделено на листе 3 зеленым) и также идти по алфавиту.

Ваш скрипт обрабатывает пример на листе 2 относительно правильно, но если его запустить для всех данных на листе 1, то для записей "Вернер Херцог" будет 2 "куска" по несколько записей, между которыми будут другие фамилии.

Весь смысл действия в том, что верхняя часть в итоге пойдет в один ящик с метками для каждой фамилии, а нижняя во второй без меток, потому что там слишком много разных фамилий
Автор: SAS888
Дата сообщения: 13.02.2009 09:32
Mantisby
Почему-то не могу скачать файл. Если не трудно - закиньте Сюда.
Автор: Mantisby
Дата сообщения: 13.02.2009 10:40
SAS888
не трудно - http://slil.ru/26640354
Автор: SAS888
Дата сообщения: 13.02.2009 11:55
Mantisby
Посмотрите Здесь.
Сделал все, кроме сортировки по году издания в пределах каждого автора. Если до сих пор все так, как нужно, то двинемся дальше.
Автор: MaximuS G
Дата сообщения: 13.02.2009 12:36
Добрый день!
Подскажите как из Книга1 запустить макрос находящийся в Книга2 ?
Автор: Mantisby
Дата сообщения: 13.02.2009 12:37
SAS888
великолепно! то, что нужно теперь бы ещё сортировку...
Автор: SAS888
Дата сообщения: 13.02.2009 12:43
MaximuS G
Пусть в файле "Книга 2.xls" есть макрос Test().
Из файла "Книга 1.xls" его можно запустить с помощью:

Код: Run "Книга2.xls!Test"
Автор: MaximuS G
Дата сообщения: 13.02.2009 12:57
SAS888
application.run ... Спасибо, разобрался ! А вот такой еще вопросик : через shell я могу запустить приложение, а чем бы его закрыть ?
Автор: Mantisby
Дата сообщения: 13.02.2009 13:29
SAS888
выходные - это святое
Автор: 7merlin
Дата сообщения: 14.02.2009 00:42
Всем привет. Вообще я не мастер в VBA и экселе, но понадобилось сделать небольшую фишечку. 2 дня копался в инете. Не нешел ответа. Может быть вы поможете както.

Задачка такая. Есть 2 столбца с координатами опр. точек на карте (X и Y). Мне нужно чтобы в диаграмме во всплывающей подсказке к каждой точке кроме "имени ряда" (Ряд "команда1", например) и самих координат ( (10;20) например) отображалась еще и "метка точки" (Точка "Игрок1", например). Эти метки должны считываться из 3го столбца рядом с самими координатами. К слову сказать по умолчанию эксель там отображает координату Х (Точка "50", например). В настройках можно его заставить выводить вместо X там Y. Но это бесполезная информация, т.к. координаты он так и так может отдельно выводить.

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

Кроме того я изучил функцию ApplyDataLabels для точек, но она опять же добавляет рисуемую на диаграмме метку. Что совсем не то что нужно.

Может ктото сталкивался? Возможно ли вообще както повлиять на то, что там в этих подсказках выводится?
Автор: soulthiefer
Дата сообщения: 14.02.2009 20:47
голову сломал ( гуру помогите плз (((
проблема такая : на листе в ячейках данные - числа типа 3598260150587632
рядом с ячейкой восклицательный знак нажав на него можно выбрать преобразовать в число НО ВОТ КАК это сделать макросом ?!?!?!? чтоб на всем листе сразу ячейки с этим значком преобразовались в число и не стали 3,59826E+15 а остались 3598260150587632.
Автор: SERGE_BLIZNUK
Дата сообщения: 16.02.2009 07:58
soulthiefer, не вводите нас в заблуждение...

Цитата:
Технические характеристики и ограничения вычислений:

Точность представления чисел, разрядов, не более 15


в MS Excel не получится ввести ЧИСЛО с числом значащих разрядов более 15
остальные циферки будут заменены на нули...
в Вашем случае получите число 3598260150587630
Автор: SAS888
Дата сообщения: 16.02.2009 08:28
soulthiefer

Цитата:
на листе в ячейках данные - числа типа 3598260150587632

Такого быть не может. Если в ячейке 3598260150587632 (более 14 знаков), то это не число, а текст. Об этом как раз и говорит восклицательный знак рядом с ячейкой. Следите за тем, чтобы все ячейки, в которых находятся подобные значения, имели текстовый формат. Иначе, Excel отобразит 14 значащих цифр именно в таком виде: 3,59826E+15.

Добавлено:
Mantisby

Цитата:
теперь бы ещё сортировку...

Пожалуйста, с сортировочкой.
Автор: murka_anka
Дата сообщения: 16.02.2009 12:11
здравствуйте, подскажите, нужно выполнить некоторое действие, в тот момент, когда в фокусе ячейка с автофильтром. Как выполнить проверку, содержит ли выделенная ячейка автофильтр?
Автор: dakaskus
Дата сообщения: 16.02.2009 12:59
Здравствуйте!
Следующий вопрос:
есть множество таблиц, разного размера, но одинаковой общей структуры.

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

Подскажите, как это можно исправить. А атаче предлагаю более детальное описание с примером. Макрос5 - это то что записалось.
http://ifolder.ru/10585653

Спасибо большое за помощь.

С уважением,
Автор: soulthiefer
Дата сообщения: 16.02.2009 14:15
рядом с ячейкой восклицательный знак нажав на него можно выбрать преобразовать в число НО ВОТ КАК это сделать макросом ?!?!?!?

с разрядом разобрался больше 15 не выводится ! спасиб !
но какая команда макросом делает то что я делаю руками нажимая на восклиц знак и преобразовать в число ?! столбики из таких данных и руками нереально! цифр меньше 15
Автор: murka_anka
Дата сообщения: 16.02.2009 14:31
soulthiefer
Можно выделить всю область с такими предупреждениями (начиная с первой такой ячейки), нажать значок и выбрать "преобразовать..." - без vba.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133

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


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