Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Закладки » Excel VBA (часть 3)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213

Открыть новую тему     Написать ответ в эту тему

partisan71

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Видеоинструкция Операторы слияния таблиц SQL JOIN в Excel Power Query.

Спасибо добрый человек!

Всего записей: 4 | Зарегистр. 02-04-2014 | Отправлено: 15:08 25-01-2024
Sniper1



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Господа, теперь помогите осуществить такое. Есть книга в которой надо при комбинации CTRL+SHIFT+N создавалась копия открытого листа, которому присваивается имя сегодняшней даты (на момент создания естественно), в таком формате 14.03.2010. И некоторые изменения в новом листе, как например то что в столбце H на старом листе, оказывается в столбце B нового листа а так же столбцы C, D, E, F, и G опустошаются. Заранее благодарю.

Всего записей: 319 | Зарегистр. 04-08-2003 | Отправлено: 10:04 14-03-2010
Swindler1

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте!  
Прошу помощи в следующем:  
Excel 2007  
 
Имею:  
С сервера программой IDLoader произодится загрузка исторических и текущих (постоянно изменяющихся) котировок выбранного финансового инструмента в текстовый файл (.csv). Произвел импорт этих внешних данных с минимально возможной периодичностью обновления - 1 мин.  
 
Получил:  
9 колонок исторических данных, с неимоверным количеством строк, с изменяющимися с периодичностью 1 раз/мин данными в самой "свежей" нижней строке.  
Эта масса данных с заданным (выбранным) интервалом построения свечи (чуть ниже поясню), к примеру - 5 мин, пополняется новой, становящейся "наисвежайшей", строкой.  
/О СВЕЧЕ: абсолютное соответствие с требуемыми данными для построения Биржевой диаграммы: цена открытия, максимальная, минимальная цены и цена закрытия; за выбранный интервал времени формируется "свечка"/  
 
Суть проблеммы:  
количество строк уже через пару дней перевалило за 4000 (!), построение вышеобозначенной диаграммы (она необходима) дается компьютеру все тяжелее, а ведь я еще ничего с этими данными-то и не делал, хотя планировал провести с ними весьма объемную работу...  
 
Что нужно получить:  
Допустим, мне достаточно для работы 500 строк (свечек на диаграмме).  
Задаю этот параметр каким-либо образом один раз, и в результате имею постоянное количество строк, при этом при появлении новой "самой свежей" (нижней) строки, происходит автоматическое удаление самой "старой" (т.е. верхней) строки (она идет второй, т.к. первая отдана под заголовки, формируемые в самом текстовом файле-источнике, что не мешеает) со смещением (синхронным, по всем колонкам, как загружаемым, так и моим, с формулами) всей таблицы вверх.  
/далее, введя нужные формулы в соседние колонки, на базе этого уже строю свои диаграммы и т.д. - эт уже мне по силам/  
Прошу Вас помочь мне это реализовать.  
 
Спасибо за внимание!

Всего записей: 7 | Зарегистр. 12-03-2010 | Отправлено: 08:53 14-03-2010
Sniper1



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
vlth
как вы смотрите на такой вариант?
 
Код:
 
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim cassa As String, varKassa As String
    If Target.Column = 6 Then
        If Target.Row >= 4 And Target.Row <= 104 Then
            On Error Resume Next
            cassa = Evaluate("Cassa")
            If Err.Number <> 0 Then a = ""
            If Target.Value <> "" Then
                varKassa = InputBox(Prompt:="Введите кассу", Default:=cassa)
                ActiveWorkbook.Names.Add Name:="Cassa", Visible:=False, RefersTo:=varKassa
                Cells(Target.Row, 7).Value = varKassa
            Else
            End If
        Else
        End If
    Else
    End If
End Sub
 
Sniper1
Откройте вашу книгу, нажмите комбинацию клавиш Alt+F11, в окне Projekt-VBAProjekt, найдите вашу книгу, найдите лист "Лист4(18.09.2009)", обязательно активируйте лист двойным щелчком мыши и вставте выше укузанный код.

 
Спасибо! вариант супер и тем более с объяснением на пальцах.

Всего записей: 319 | Зарегистр. 04-08-2003 | Отправлено: 00:05 14-03-2010
ferias



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vlth
как вы смотрите на такой вариант?

Код:
 
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim cassa As String, varKassa As String
    If Target.Column = 6 Then
        If Target.Row >= 4 And Target.Row <= 104 Then
            On Error Resume Next
            cassa = Evaluate("Cassa")
            If Err.Number <> 0 Then a = ""
            If Target.Value <> "" Then
                varKassa = InputBox(Prompt:="Введите кассу", Default:=cassa)
                ActiveWorkbook.Names.Add Name:="Cassa", Visible:=False, RefersTo:=varKassa
                Cells(Target.Row, 7).Value = varKassa
            Else
            End If
        Else
        End If
    Else
    End If
End Sub

Sniper1
Откройте вашу книгу, нажмите комбинацию клавиш Alt+F11, в окне Projekt-VBAProjekt, найдите вашу книгу, найдите лист "Лист4(18.09.2009)", обязательно активируйте лист двойным щелчком мыши и вставте выше укузанный код.

Всего записей: 39 | Зарегистр. 28-06-2007 | Отправлено: 20:44 13-03-2010 | Исправлено: ferias, 20:48 13-03-2010
Sniper1



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Sniper1, насколько я понял задачу, Вам нужно что-то типа такого:
 
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
Static varKassa As Variant
If Not Intersect(Target, Me.Columns(6)) Is Nothing Then
    If Target.Cells.Count = 1 Then
        If Intersect(Target, Me.Columns(6)).Address = Target.Address Then
            varKassa = InputBox("Введите кассу", "Новая касса", varKassa)
            Target.Offset(, 1) = varKassa
        End If
    End If
End If
End Sub
 
Выложенный файл как использовать, я не понял: F4 и G4 у Вас заняты, похоже, под заголовки.
Приведённый код неплохо бы доработать для проверки вводимого номера кассы (сейчас этого не сделано, поскольку Вы не указали, каким может быть этот номер - тип значения, ограничение по кол-ву символов и т.д.).
 
Код необходимо вставить в модуль раб. листа

 
Мне надо вот такое как в этом файле сделанно. а вот теперь как этот макрос или как он там называется, перенести на мой файл

Всего записей: 319 | Зарегистр. 04-08-2003 | Отправлено: 18:32 13-03-2010
vlth

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sniper1, насколько я понял задачу, Вам нужно что-то типа такого:

Код:
Private Sub Worksheet_Change(ByVal Target As Range)
Static varKassa As Variant
If Not Intersect(Target, Me.Columns(6)) Is Nothing Then
    If Target.Cells.Count = 1 Then
        If Intersect(Target, Me.Columns(6)).Address = Target.Address Then
            varKassa = InputBox("Введите кассу", "Новая касса", varKassa)
            Target.Offset(, 1) = varKassa
        End If
    End If
End If
End Sub

Выложенный файл как использовать, я не понял: F4 и G4 у Вас заняты, похоже, под заголовки.
Приведённый код неплохо бы доработать для проверки вводимого номера кассы (сейчас этого не сделано, поскольку Вы не указали, каким может быть этот номер - тип значения, ограничение по кол-ву символов и т.д.).
 
Код необходимо вставить в модуль раб. листа

Всего записей: 258 | Зарегистр. 22-01-2008 | Отправлено: 17:33 13-03-2010 | Исправлено: vlth, 17:46 13-03-2010
Sniper1



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Люди добрые, помогите с мной созданной для работы таблицей.  
 
Надо так сделать, если ввожу сумму в F4 и нажимаю применить то сразу же что б выскакивало окошко для G4 что б ввести в нём номер кассы, но если можно что б этот номер в этом окошке фиксировался для следующей такой же операции что б не надо было его вводить постоянно, например в следующий раз я ввожу сумму в F5 а для G5 вылазит тоже окошко с предыдущим номером кассы и я тока нажимаю ок. вообщем пока я этот номер кассы сам не поменяю он там что б оставался. можно вообще такое сделать?
 
Файл таблицы

Всего записей: 319 | Зарегистр. 04-08-2003 | Отправлено: 12:30 13-03-2010
GenyaMS



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
в открытой раб книге- на листе - в выбранной колоонке получить номер строки в которой присутствуе какая-либо запись? говорят есть стандартная функция для этого, хотелось бы ее узнать?

Ну вот опять сам нашел нужную инфу: Cells = Worksheet.Cells.SpecialCells(11)
и пара ссылок по этой же теме: http://forum.developing.ru/archive/index.php/t-11695.html
и http://www.citforum.ru/programming/windows/excel_faq/part3.shtml#3.05
Может кому-то понадобится

Всего записей: 184 | Зарегистр. 24-01-2009 | Отправлено: 08:07 13-03-2010
Maximus777

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Oyger, флексгрид - это MSHFlexGrid, есть у всех. Но он сцабака не скроллится колесом. А вообще проблема родилась на пустом месте, раньше я использовал ListView и всё было пушисто. Но в один момент обновлённая система что-то поменяла внутри макроса и на старых системах ListView обломался. Даже создание контрола на форме в runtime не помогло. Пришлось отказаться от него. Влепил флексгрид, он даже ещё функциональнее, но вот с колесом полная засада. Может кто-нить посоветует лучший в мире грид? Чтоб функционировал как ListView в режиме report.

Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 14:37 12-03-2010
Oyger

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maximus777
У меня есть пример (сам в свое время сделал - работает) работы скрола. Но он был использован во фрайме и со списком (7 штук во фрейме) чекбоксов.
А что такое "флексгид" и "сабклассить оконную функцию" у Вас - я не знаю... помочь не могу

Всего записей: 122 | Зарегистр. 22-03-2007 | Отправлено: 14:16 12-03-2010 | Исправлено: Oyger, 14:19 12-03-2010
Maximus777

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
V4mp, мне помог приручить флексгрид вот такой файлец. Уже всяка поизвращался с ним, но скролл в нём это что-то с чем-то. Надо сабклассить оконную функцию, чтобы всего навсего прокрутить грид. Мне пока это не удалось. Те примеры, что нашёл в сети просто валят весь ексель.

Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 18:01 11-03-2010 | Исправлено: Maximus777, 18:04 11-03-2010
crotoff

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
удалил задачу, т.к. решил через формулы удобнее

Всего записей: 961 | Зарегистр. 17-04-2007 | Отправлено: 14:57 11-03-2010 | Исправлено: crotoff, 15:15 11-03-2010
vlth

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Начал пробовать For each, потом понял, если я строки уаляю, то и диапазон который я задаю тоже изменяется.

А переопределить диапазон в цикле не получится?
 
Добавлено:

Цитата:
как-нибудь посмотреть, естьли в ней объединенные ячейки и разом их удалть, может SpecialCells помочь?

 
Вот что даёт запись макроса:
Код:
Application.FindFormat.MergeCells = True
    Cells.Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=True).Activate
    Cells.FindNext(After:=ActiveCell).Activate

Так что если используется excel новее 97-го, ответ положительный относительно "разом их удалить"
SpecialCells остаётся не у дел.

Всего записей: 258 | Зарегистр. 22-01-2008 | Отправлено: 12:57 11-03-2010 | Исправлено: vlth, 13:32 11-03-2010
Johnson Finger



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vlth - спасибо Проблему примерно так и решил, когда явно задал индекс столбца (columns(1)).
Только теперь встал другой вопрос, как можно удалить строки, содержащие объединенные ячейки, ориентируясь по одному столбцу. Как бы можно было бы испольовать Do ... While, и пусть цикл работает, пока не наткнется на один критериев, который встречается в самом конце таблицы, но очень бы хотелось этого избежать, т.к. способ тупой, и медленный. Начал пробовать For each, потом понял, если я строки уаляю, то и диапазон который я задаю тоже изменяется. Так же отпал и просто For...next, т.к. он на сколько я понимаю, так же требует задать жесткий диапазон в котором будет прыгать цикл. А диапазон у меня получается динамическим. Вот если бы можо было сделать примерно так Do Z = 1 (это губо говоря адрес ячейки с кот начинаем) To "Конец" (а это текстовый критерий в ячейке, прочитав который цикл становится), но по-млему так неззя. Так что похоже придется просто прыгать на следующую очейку с помощью ActiveCell.offset(1,0).select и только так проверять является ли даная ячейка объединенной.
Либо в иеале, выделить вообще всю таблицу, как-нибудь посмотреть, естьли в ней объединенные ячейки и разом их удалть, может SpecialCells помочь? Ваше мнение?

Всего записей: 1177 | Зарегистр. 06-08-2006 | Отправлено: 11:09 11-03-2010
vlth

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Johnson Finger, а зачем столбец выделять? - просто ищите в нём значение, получайте адрес ячейки, содержащей это значение и т.д.

Код:
Dim c As Range
Set c = Worksheets(1).Columns(1).Find("a", LookIn:=xlValues)
If Not c Is Nothing Then MsgBox c.Address
Значение из объединённой ячейки, правда, так выловить не удастся: его поиск по любому из 4-х столбцов диапазон из объединённых ячеек не вернёт.

Всего записей: 258 | Зарегистр. 22-01-2008 | Отправлено: 10:37 11-03-2010
visual73



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GenyaMS
стандартная только такая:
выделяешь первую ячейку столбца в котором есть данные, двойной щелчок на нижней кромки курсора перемещает курсор по столбцу вниз до непустой ячейки.
Всё остальное - нестандартно

Всего записей: 962 | Зарегистр. 26-12-2005 | Отправлено: 09:42 11-03-2010
Johnson Finger



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Господа, кто подскажет, есть таблица, состоящая из нескольких колонок, в некоторых из этих колонок есть объединенные ячейки (например, между столбцами с А по D имеется одна общая объединенная ячейка), в сязи с этим, макросом не удается выделить один конкретный столбец скажем, тот же А), он выделяет именно те колонки, в которых есть эта одна общая ячейка. Соответственно, если мне нужно с помощью макроса произвести поиск в столбце А, то получается он ищет не только в А, но в B,C,D. Как сделать (если можно), чтобы с помощью макроса выделялся только один столбец, пусть в нем и есть объединенная ячейка. Просто когда просто курсором щелкаешь по заголовку столбца, он вроде как выделяет его.

Всего записей: 1177 | Зарегистр. 06-08-2006 | Отправлено: 08:30 11-03-2010 | Исправлено: Johnson Finger, 08:38 11-03-2010
GenyaMS



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здраствуйте! подскажите пожалуйста - как в Excel в открытой раб книге- на листе - в выбранной колоонке получить номер строки в которой присутствуе какая-либо запись? говорят есть стандартная функция для этого, хотелось бы ее узнать???

Всего записей: 184 | Зарегистр. 24-01-2009 | Отправлено: 23:37 10-03-2010
V4mp



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vchobo
Все данные, которые идут с ms sql выводишь на отдельный скрытый лист, который не защищен.
А вот автофильтры и прочую красоту делаешь на другом листе, источником данных для которого и будет служить скрытый и не защищенный ранее лист.
А потом уже красивый лист можно защищать.
Как вариант

Всего записей: 65 | Зарегистр. 04-12-2008 | Отправлено: 16:21 10-03-2010 | Исправлено: V4mp, 16:36 10-03-2010
vchobo

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Народ, подскажите или ткните носом слепого!
Проблема такова:
Есть книга с листами, на которых размещены запросы из MS SQL по ODBC.
Все это красиво отформатировано, добавлены куча вычисляемых полей с автофильтрами (заполнение формулами соседних столбцов)...
Данные обновляются с частотой раз в минуту.
Вопрос:
Как можно защитить лист с таким запросом (скрыть формулы, защитить их от редактирования)?
Как только включаю любую защиту листа, даже скрывать формулы, перестает работать обновление и недоступны автофильтры.
Подскажите, решается ли проблема ?

Всего записей: 22 | Зарегистр. 01-12-2008 | Отправлено: 13:27 10-03-2010 | Исправлено: vchobo, 13:29 10-03-2010
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Закладки » Excel VBA (часть 3)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru