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

» Excel VBA (часть 3)

Автор: LaCastet
Дата сообщения: 31.10.2013 15:42
galex87

Цитата:
Пробовал получить хотя бы значение из второй колонки, по которой идет поиск, но Excel заругался. Пробовал так:
Sheets("Лист2").Cells(1, 2).Value = Sheets("Лист1").[B:B].Find(Sheets("Лист2").Cells(1, 1).Value, Sheets("Лист1").Cells(Rows.Count, 2).End(xlUp).Offset(1), xlPrevious)
и
Sheets("Лист2").Cells(1, 2).Value = WorksheetFunction.Find(Sheets("Лист2").Cells(1, 1).Value, Sheets("Лист1").Cells(Rows.Count, 2).End(xlUp).Offset(1), xlPrevious)

Попробуйте так:

Sheets("Лист1").Columns("B:B").Select

Selection.Find(What:=Sheets("Лист2").Cells(1, 1).Value, , LookIn:=xlValues, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate

'Номер строки
FindRow=ActiveCell.Row

'Значение 4-ой колонки найденной строки
FindValue=ActiveCell.Cells(1,4).Value

Автор: panda3
Дата сообщения: 01.11.2013 18:11
Ну чо за извраты, мы ж в екселе, пусть он и ищет:

Код: WorksheetFunction.VLookup(Sheets("Лист2").Cells(1),Sheets("Лист1").Range("B:D"),3,False)
Автор: Fsp050
Дата сообщения: 02.11.2013 11:46

Цитата:
Простейший метод кнопки будет : Developer->Insert->Button (Forms или ActiveX Control) -> Assign macro-выбрать из того что уже есть (Название/текст можно потом поменять), или напрямую прописать в зависимости какое имя кнопке присвоено:

vikkiv
а где этот девелопер.
Автор: Leojse
Дата сообщения: 06.11.2013 19:02
Здравствуйте. Помогите, пожалуйста, написать пользовательскую функцию.
Нужно подсчитать сумму отдельно знаменателей и числителей, т.е. , на пример, в А1 занесено 1/45,
в А2 занесено 2/45, а в итоговой ячейке А3 должно быть 3/90. Так же, хотелось бы, чтобы функция учитывала только видимые ячеки.

Добавлено:
Забыл добавить, что в суммируемом диапазоне могут быть пустые ячейки (если это важно).
Автор: aidomars
Дата сообщения: 06.11.2013 19:35
Leojse
А в каком формате 1/45 записано? Просто так дробь в ячейку не записать вроде.
Автор: Leojse
Дата сообщения: 06.11.2013 20:32
В формате текста.
Автор: AndVGri
Дата сообщения: 07.11.2013 01:52
Leojse
Пробуйте

Код:
Public Function SpecialSum(ByVal this As Range) As String
Dim pCell As Range, sText As String
Dim sumA As Double, sumB As Double, pos As Long
sumA = 0: sumB = 0
For Each pCell In this
If Not pCell.EntireRow.Hidden Then
sText = pCell.Value
pos = InStr(sText, "/")
If pos > 0 Then
sumA = sumA + CDbl(Mid$(sText, 1, pos - 1))
sumB = sumB + CDbl(Mid$(sText, pos + 1))
End If
End If
Next
SpecialSum = Format$(sumA, "0") & "/" & Format$(sumB, "0")
End Function
Автор: aidomars
Дата сообщения: 07.11.2013 09:35
Вдогонку, извращение с массивами и сплитом, с комментариями.

Код: Public Function SpecialSum(ByVal this As Range) As String
Dim sum(0 To 1) As Variant ' определяем массив
For Each pCell In this ' цикл по ячейкам
' если ячейка не скрыта и содержит "/" - собираем строчку p, типа "/1/4/2/4/1/8"
If Not pCell.EntireRow.Hidden And InStr(pCell.Value, "/") > 0 Then p = p & "/" & pCell.Value
Next
o = Split(p, "/") ' формируем массив o из строки p с разделителем "/", где o(1)=1, o(2)=4 и т.д.
For i = 1 To UBound(o) ' цикл по массиву o
' присваиваем в массив sum(0) и sum (1) чет и нечет
sum(i Mod 2) = sum(i Mod 2) + CDbl(o(i))
Next
SpecialSum = sum(1) & "/" & sum(0)
End Function
Автор: Leojse
Дата сообщения: 07.11.2013 10:18
AndVGri
aidomars
Спасибо Вам огромное за помощь! Жалко, что на форуме нет кнопки "спасибо", я бы вам уже сто раз нажал)
Автор: Leojse
Дата сообщения: 07.11.2013 18:12
А можно еще вопрос?...
Оба вышеуказанных кода работают, но есть вопрос по коду от AndVGri
Функция округляет до целых чисел, т.е. 8,6+8,1=17, а не 16,7. Поменял Double на Single, но все равно происходит округление.. что сделал не так?...
Автор: aidomars
Дата сообщения: 08.11.2013 05:43
Leojse

Код: SpecialSum = Format$(sumA, "0.00") & "/" & Format$(sumB, "0.00")
SpecialSum = sumA & "/" & sumB
Автор: AndVGri
Дата сообщения: 08.11.2013 06:25
Или заменить
SpecialSum = Format$(sumA, "0") & "/" & Format$(sumB, "0")
на
SpecialSum = CStr(Math.Round(SumA, 4)) & "/" & CStr(Math.Round(SumB, 4))
надеюсь, больше 4-х знаков после запятой не будет.
Автор: kot1313
Дата сообщения: 08.11.2013 11:57
Подскажите пожалуста, как сделать так, чтоб при нажатии Ctrl-F в Excel
окно поиска появлялось сразу с поиском по книге, а не по листу.
(В ветке Excel FAQ сказали, что в этом топике есть ответ на этот вопрос, но я никак не могу найти это решение...)
Заранее Спасибо
Автор: aidomars
Дата сообщения: 08.11.2013 15:35
kot1313
http://excelvba.ru/code/SearchCells
Автор: kot1313
Дата сообщения: 11.11.2013 02:10
aidomars
На это дополнение мне уже указывали в Топике Excel FAQ.
Оно не совсем подходит - много дишних кликов мышкаой !!!
Нужно автоматизированное - чтоб нажал CTRL-F и сразу вылез поиск по книге !
Автор: kovireshad
Дата сообщения: 11.11.2013 10:51
Подскажите, возможно ли вообще сделать в Excel такое:
Есть лист в нем существует много полей, но необходимо, чтобы значения 2-х ячеек ( периодически они меняются), переносились в новый лист по расписанию, к примеру в 23.00, и к ним добавлялась ячейка с датой, когда происходит перенос, и получается ежедневное построчное заполнение, самостоятельно по расписанию.
Возможно достаточно сумбурно написала, просто не совсем понимаю, возможно ли это реализовать и каким способом
Автор: aidomars
Дата сообщения: 11.11.2013 12:14
kovireshad
Возможно
Автор: Futurism
Дата сообщения: 11.11.2013 20:17
подскажите, пожалуйста, пытаюсь облегчить себе задачу.
Есть одна большая таблица. КАК сделать так, чтобы напротив каждой строки стояли кнопки, которые бы копировали определенные ячейки на определенные листы. В разных таблицах, столбцы стоят в разной последовательности.

По моим подсчетам нужно сделать восемь кнопок.

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

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

для примера даю свои наметки
Должно быть в итоге все тоже самое, только больше таблиц и кнопки должны работать с выделенной строкой и копировать в первую пустую строку нужного листа.
т.е. чтобы система видела
1строка занята
2строка занята
а вот 3 свободна
http://rghost.ru/50104418
Автор: AndVGri
Дата сообщения: 12.11.2013 01:05
Futurism
Так что подсказать? Что то в вашем файле никаких кнопочек, ни попытки написания кода не увидел.
Автор: kovireshad
Дата сообщения: 12.11.2013 08:08
aidomars
Подскажите, а это делается макросом? и сложно ли человеку, который никогда не писал макросы, а только пользовался формулами в Excel, написать его. Либо лучше обратиться к специалисту. Просто если это не сложно и надо изменить немного, какой-то уже готовый макрос, я бы попробовала сама, если есть ссылка на подобный пример.
Если долго, то возможно кто-нибудь взялся бы за такую задачу, и какова будет стоимость данной работы
Автор: aidomars
Дата сообщения: 12.11.2013 09:21
kovireshad
Книга открыта постоянно?
Файл для общего доступа?
Кто вносит изменения?
Судя по Вашим вопросам, сами Вы точно его не напишите, разбирающемуся хватит и 10 мин.
Стоимость будет 0, если конечно задача не обрастет кучей хотелок).
Желательно выложить файл с описанием, что где и куда.
Автор: machonin09
Дата сообщения: 12.11.2013 10:17
Здравствуйте! Программа выводит отчет в Excel 2007. Все содержимое корректно и полно отображается на экране, но при выводе на печать часть строки "съедается", таким образом, что пропадает кусок текста (примерно пол-строчки). Т.е. при просмотре отчета я вижу, что до нижнего края строки есть еще пару миллиметров, но в Предварительном просмотре и на распечатанном листе часть строки "съедается".
Помогите пожалуйста, написать макрос для увеличения высоты строк, начиная с верхнего левого угла указанного диапазона.
Автор: Futurism
Дата сообщения: 13.11.2013 22:12

Цитата:
Futurism
Так что подсказать? Что то в вашем файле никаких кнопочек, ни попытки написания кода не увидел.

AndVGri
блин, я файл утерял нужный, но ладно. А подсказать как в миф воплотить эту идею.
Автор: kovireshad
Дата сообщения: 14.11.2013 09:15
aidomars
Здравствуйте, если вам несложно посмотрите
1. Книга открывается обычно несколько раз за день
2. Она не для общего пользования
3. Информацию вносит и редактирует только один человек

Что хотелось бы:
Из листа "Динамика" переносились в лист "Лимит" 2 ячейки D54 и E54 (они меняют значение от нескольких раз за день до 1 раза в неделю)
в листе "Лимит" при каждом открытии файла или по расписанию 1 раз в день (лучше по расписанию), формировалась новая строка
в столбце А дата, текущее число,
значение D54 (лист "Динамика") в столбец F
значение E54 (лист "Динамика") в столбец C
Лист "Лимит" в нем каждая строчка будет соответствовать новому дню

Вот такие вот хотелки к документу
Заранее, спасибо

http://rghost.ru/50161105
Автор: aidomars
Дата сообщения: 14.11.2013 10:20
kovireshad
В принципе ерунда, вот только "при каждом открытии файла или по расписанию 1 раз в день (лучше по расписанию)" не проще ли заменить на "нажатие кнопки"? Изменил значения, нажал кнопку - добавилась нужная строка.
Это проще и надежней имхо.
Автор: kovireshad
Дата сообщения: 14.11.2013 10:28
aidomars
Можно и по кнопке, а где она обычно размещается? просто на листе "динамика", там дальше еще столбцов 8, я просто их удалила пока
И еще если за день 2 раза нажать кнопку, то это будет 2 новые строки? Хотелось бы чтобы 1 дню соответствовала 1 строка, или так невозможно?
Автор: aidomars
Дата сообщения: 14.11.2013 11:14
Кнопку хоть где можно разместить (на листе) и перетаскивать можно. Удаление столбцов/строк для нее не важно.
Можно сделать проверку, если есть уже строчка с сегодняшним днем, то ничего не делать.
Автор: kovireshad
Дата сообщения: 14.11.2013 11:30
aidomars
Если есть вариант проверки, то тогда все устраивает. Подскажите, а вы могли бы написать этот макрос?
Автор: aidomars
Дата сообщения: 14.11.2013 11:49
Напишу, вечером только.
Автор: kovireshad
Дата сообщения: 14.11.2013 12:14
aidomars
Спасибо большое

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127

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


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