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

» Excel VBA (часть 3)

Автор: Futurism
Дата сообщения: 22.12.2014 21:19
SAS888
Winand
спасибо. все работает. данные готовы к обработке))
Автор: Futurism
Дата сообщения: 29.12.2014 18:37
Ребят, а можете ещё помочь в вопросе упорядочивания данных.
вот вычислились р-ты и скопировались в эксель
можно ли сделать, чтобы они трансформировались в такую таблицу
q4 здесь название переменной идет с А5
r и s 4 тут средние значения ячейка f12 и c12
T4-это p-value это ячейка e6
conf upper and lower берется из ячейки А9
http://rghost.ru/60042877

на самом деле эти результаты могут смещаться, но зацепиться можно за то что всегда есть
начало с > t.test
а кончается фразой mean in group ну и ниже эти цифры.
Автор: dzefas
Дата сообщения: 04.01.2015 16:35
В Офисе2003 можно было создать свою строку меню вместо стандартной, свои панели инструментов и, если надо, отключить встроенные. В 2010 Офисе (и 2007) пользовательские меню и панели отображаются в последней вкладке Надстройки. Можно ли сделать хотя бы так, чтобы эта вкладка сразу была активной при открытии (активации) книги с такими панелями? Спасибо за помощь.
Автор: Fsp050
Дата сообщения: 04.01.2015 19:57
Помогите, пожалуйста, в excel спрогать граф.
http://rghost.ru/60137628
линии должны идти только между красными значениями.
примерно так

если между переменными отрицательное значение, то чтобы линии были также пунктиром
и значение связи между переменной также всегда отображалась.
Автор: Maximus777
Дата сообщения: 09.01.2015 18:51
Подскажите, как можно заменить диапазон на переменные в таком коде:


Код: Новая.Sheets("Лист1").[B3:AA1057].Value = _
Старая.Sheets("Лист1").[B3:AA1057].Value
Автор: kot1313
Дата сообщения: 09.01.2015 21:21
Подскажите, как сделать так,
чтоб при нажатии на CTRL-F СРАЗУ включалось окно поиска по всей книге, а не как в типовом вараанте - по листу.
Очевидно, нужен какой-то крипт пристыковать к экселю или данной книге.
Помогите пожалуста сделать
Автор: vikkiv
Дата сообщения: 10.01.2015 04:50
kot1313 - вероятнее всего никак, однако для текущей сессии, т.е. пока не закроешь Excel - по умолчанию будут те настройки которые были последними, в смысле поставишь поиск по всей книге - каждый раз при вызове поиска будет искать по книге.
Автор: Fsp050
Дата сообщения: 29.01.2015 17:05
Можете , пожалуйста помочь написать скрипт, который выборочно удаляет строки
Например, у меня 100 000, строк
мне надо составить репрезентативную выборку из 10 000 строк. Можно ли случайным образом выбрать такую выборку строк, а остальные 90 000 удалить?
Автор: Legio
Дата сообщения: 29.01.2015 17:57

Код:
dim total as long
total = 100000
do until total <= 10000
dim current_removed as long
current_removed = total * rnd + 1
activesheet.rows(current_removed).delete xlShiftUp
total = total - 1
loop
Автор: Leojse
Дата сообщения: 29.01.2015 20:29
Добрый вечер!
Буду рад любой подсказке. Есть код, который нормально выполняется, если находится в модуле книги, которую нужно обработать. Код работает так - сначала заполняет все пустые ячейки нулямив выделенном диапазоне, затем идет обработка ввода ("вход-выход" из ячеек), затем идет удаление ячеек, содержащих только нули

Код: Sub aa1_()
Selection.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "0"
End Sub
Sub aa2_()
For Each cell In Selection
Sheet1.Worksheet_Change (cell)
Next
End Sub
Sub aa3_()
For Each cell In Selection
Selection.Replace What:="0", Replacement:="", LookAt:=xlWhole, _
SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Next
End Sub
Автор: vikkiv
Дата сообщения: 29.01.2015 22:14
Leojse VBA работает с объектами, Sheet1 это объект
Однако в VBA не определен Worksheet_Change ни как метод/свойство/действие/продцедура..
Скорее всего это отдельно прописанная пользовательская продцедура недоступная в новой книге.
Решение - либо перенеси туда эту продцедуру (со всеми пользовательскими функциями если имеются)
или сделай продцедуру доступной для всех книг.
Автор: Leojse
Дата сообщения: 30.01.2015 06:43
vikkiv
Спасибо за ответ! Но нет, это не пользовательская процедура. В обычных книгах всё работает нормально (выделил ячейки, нажал, и все норм). А как перенёс в личную книгу, так с личной книги теперь уже никак не вызвать - ошибка... Я думал, что проблема из-за того, что личная книга ту строчку не понимает...
А как сделать процедуру доступной для всех книг?
Автор: vikkiv
Дата сообщения: 30.01.2015 13:09
Leojse
чем отличаются "обычные книги" от "личная книга"? чем она необычна?

..для распространения функциональности на все книги текущего пользователя на данном компьютере:
1) Создай модуль в пустой книге,
2) занеси туда необходимые пользовательские функции/процедуры/переменные (через Public Sub/Function чтобы стали глобальными)
3) сохрани книгу как ЕхцелАддин (.xlam)
4) в настройках Excel поставь этот AddIn в автозагрузку Excela так-же как это делается например для Solver/AnalysisToolPack
Теперь эти функции/процедуры/переменные будут доступны этому пользователю в любой книге на этом компьютере.

Но шаг (2) всё равно требует найти этот код, а ты говоришь что его нету,
к тому-же если он найден - то необязательно его грузить на любую сессию, хватит перенести только в новую книгу в которой это должно работать.
глянь раздел настроек с "Active Application Add-Ins" при открытом работающем документе.
посмотри структуру дерева проектов в VBA в других книгах и особенно в этой (модули/листы/ЭтаКнига)
дрогой момент - что бывает языковая несовместимость, смотря с какими региональными настройками создавались книги, бывает что на разных копах, т.е. названия объектов могут получится разными - и обращения по путям(названиям)объектов могут не пройти.

бывают более сложные случаи когда код проверяет структуру обьекта прежде чем выдать результат, может твоя личная книга не соответствует требованиям этого пользовательского кода..
Автор: Fsp050
Дата сообщения: 30.01.2015 14:27
Legio
Пасипки
Автор: Fsp050
Дата сообщения: 03.02.2015 17:14
А можно попросить?
есть csv файл
он большой 35 мег
http://rghost.ru/8ybSq9zYy
там в каждой строке какой то текст . можно ли текст в каждой строке записать в отдельный файл
там просто есть пустые строки, их не трогать)
Автор: 790
Дата сообщения: 05.02.2015 18:12
народ, помогите: чтобы считалось общее время за месяц в столбце? т.е. в таблице (вертикальной) ежедневно получается время за день и вот за месяц набигает сколько то часов и нужно чтобы с 1-го числа по последний день месяца автоматом считала сколько часов за месяц получилось, чтобы в ручную не считать. какую формулу нужно ввести чтобы в столбце соседнем и в последней ячейки месяца считалось общее время за этот месяц. спасибо!
Автор: Alatena
Дата сообщения: 05.02.2015 19:26
Подскажите, пожалуйста, макрос, который удаляет всю строку, если пусты соответствующие ячейки из столбцов "A" и "С".
Google дает похожие результаты, но для корректировки собственных знаний в VGA не хватает.

Мне, как классному руководителю, регулярно приходится вклеивать распечатки из электронного журнала. Вручную удалять предметы, по которым ещё не выставлены отметки, нелогично, а пустые "простыни" тоже никому не нужны.

За помощь обещаю пятёрку в четверти!

Добавлено:
Пример файла

Добавлено:
Пример на картинке: дисциплины, по которым нет отметок, нужно сократить, фамилии учеников — оставить.
Автор: vikkiv
Дата сообщения: 08.02.2015 03:58
Alatena
Если по простому то можно сделать таким кодом (выделив необходимый диапазон в активной книге/листе):
Код: Sub deleterows(): Dim a As Range, b As Range: Set a = Selection: For Each b In a.Rows
If Len(b.Cells(1, 1)) = 0 And Len(b.Cells(1, 2)) > 0 And Len(b.Cells(1, 3)) = 0 And Len(b.Cells(1, 4)) = 0 Then
b.EntireRow.Delete
End If: Next: End Sub
Автор: psiho
Дата сообщения: 08.02.2015 19:25

Цитата:
Подскажите, пожалуйста, макрос, который удаляет всю строку, если пусты соответствующие ячейки из столбцов "A" и "С".
Google дает похожие результаты, но для корректировки собственных знаний в VGA не хватает.


Вот смотрите: http://rghost.ru/8q44WQxCX

Постарался сделать его универсальным. Если измените название листа со своей таблицей или первая строка после шапки измениться, то, соответственно, измените данные на листе "Главная"
Автор: SAS888
Дата сообщения: 09.02.2015 08:09
Alatena
Достаточно активировать лист с таблицей и выполнить следующий макрос:

Код: Sub ClearBlanc()
Dim x As Range: Application.ScreenUpdating = False: On Error Resume Next
Set x = Intersect(Rows("9:" & Cells(Rows.Count, 2).End(xlUp).Row), Columns("A:D"))
x.Replace "", 0, xlWhole: x.Replace 0, "", xlWhole
Set x = Intersect(x, [A:A].SpecialCells(4)).EntireRow
Intersect(x, [C:C].SpecialCells(4)).EntireRow.Delete
End Sub
Автор: psiho
Дата сообщения: 09.02.2015 09:56
SAS888
Забыли в коде указать

Код: Application.ScreenUpdating = True
Автор: SAS888
Дата сообщения: 09.02.2015 10:03
psiho
Каюсь.. грешен.. я часто "не закрываю скобки". Но... В данном случае это совершенно не обязательно, т. к. нет ни обработки событий, ни вызова процедуры из процедуры. По окончании работы макроса, свойство True будет установлено автоматически. Хотите - проверьте. Также, это касается и On Error GoTo 0.
Автор: Winand
Дата сообщения: 11.02.2015 19:10
>Вручную удалять предметы, по которым ещё не выставлены отметки, нелогично, а пустые "простыни" тоже никому не нужны.
Alatena макросы - это круто, однако в данном случае имхо совершенно излишне. Я бы банально поставил фильтр по пустым значениям столбца С. Чтобы не пропадали также строки в которых заполнен только А, в них можно забивать в ячейку столбца С, например, точку и выставлять этой ячейке белый цвет шрифта.
Вариант №2. Справа от таблицы (вне области печати) создать столбец с формулами вида =A1&C1. И отфильтровать в нём пустые значения.
Автор: Alatena
Дата сообщения: 12.02.2015 00:40
vikkiv
psiho
SAS888
Спасибо большое за помощь!
Winand
Тоже спасибо. Буду разбираться.
Я уже и так применяю макросы к этим документам (автозамена, сужение колонок, шрифт), поэтому было бы логично дописать новый макрос к прежнему.
Автор: SAS888
Дата сообщения: 13.02.2015 07:05

Цитата:
Вручную удалять предметы, по которым ещё не выставлены отметки, нелогично
Полностью согласен. Поэтому, в предлагаемом мной коде, вместо
Код: .Delete
Автор: Leojse
Дата сообщения: 19.02.2015 19:29
Добрый вечер!
Уважаемые форумчане, снова обращаюсь к Вам за помощью.
Существует табличка с заголовками (А1 - № п/п, В1- данные таблички). После сортировки мне нужно взять значение из первой видимой ячейки В2 и записать его с С2. Подскажите, возможно ли как-то это сделать?
Автор: Alex_B
Дата сообщения: 20.02.2015 13:28
Есть ли в VBA функции, аргументы которых определяются наведением/кликом курсора мыши на то или иное слово?
Автор: Winand
Дата сообщения: 23.02.2015 20:00
Leojse Написать в C2: =B2
Alex_B когда открываете скобку после имени функции автоматически отображается список аргументов.
Автор: Alex_B
Дата сообщения: 24.02.2015 09:20
Winand

Цитата:
когда открываете скобку после имени функции автоматически отображается список аргументов

Не то. Функции в Excel работают автоматически. Я хочу с помощью VBA построить такие процедуры, которые бы работали в зависимости от того или иного клика мыши.
Автор: SAS888
Дата сообщения: 26.02.2015 07:45

Цитата:
Я хочу с помощью VBA построить такие процедуры, которые бы работали в зависимости от того или иного клика мыши.
Используйте требуемые события листа (книги):
Worksheet_SelectionChange
Worksheet_BeforeRightClick
Worksheet_BeforeDoubleClick

и др.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127

Предыдущая тема: VS 2010


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