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

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

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

ShIvADeSt (23-04-2007 01:59): http://forum.ru-board.com/topic.cgi?forum=33&topic=8273  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

RUSmafia



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

 
 
Обсуждаем вопросы только по Excel VBA
(программирование макросов, скриптов, пользовательских функций и т.п.).
Приветствуются ссылки на ресурсы и справочную литературу по теме.
 
Вопросы по работе с MS Excel, не относящиеся к программированию, задаем в теме Excel FAQ

 
Обратите внимание, этот топик для помощи в изучении и использовании VBA. Посему запросы типа "Напишите мне такой-то макрос, я VBA не знаю и знать не хочу" не приветствуются.
Древняя мудрость: "Накорми голодного рыбой и он погибнет, научи его ловить рыбу и ты спасешь его."(R)
 
Информация общего характера:
  • Список соответствия имен функций в английской и русской версиях Excel
  • Описание Microsoft Excel File Format
     
    Рекомендации:
    Если у Вас есть проблема, не решаемая стандартными средствами Excel (об этом можно уточнить здесь) или требующая автоматизации, попробуйте для начала записать макрос самим Excel через меню Сервис (Tools) - Макрос (Macro) - Начать запись (Record New Macro). Подробнее здесь. В большинстве случаев получившийся код (Сервис-Макрос-Макросы-Изменить) Вас не удовлетворит, но подскажет, какие объекты-методы-свойства использовать.  
    Другой Ваш помощник - Просмотр объектов (Object Browser). Ну и встроення помощь (F1), естественно.
     
    Если Вы в тупике, покажите Ваш код (или часть кода) здесь.  Если вылазит ошибка, цитируйте ее полностью. Если код слишком большой, используйте тeг [more].
    Используйте отладчик - Breakpoints (F9), Watches (Shift-F9), Steps (F8 и др.) Сильно облегчает поиск ошибок.

     
    Рекомендуется к прочтению:
  • Первые шаги с Excel VBA
  • Excel VBA: Приёмы программирования
  • WinApi. Лекция из курса "Основы офисного программирования и язык VBA" (для продвинутых)
  • Daily Dose of Excel (eng.) - тематический блог: советы по работе с Excel и прочие материалы
  • Excel Macros & Excel VBA Code Tips, Tricks (eng.) - советы, трюки и уловки
  • Mr. Excel (forum) (eng.) - весьма оживленный форум по Excel&VBA.
     
    Родственные топики:
  • Вопросы по работе с MS Excel - Excel FAQ - часть 1, часть 2
  • Технические проблемы с MS Office 2003 или Office XP.
  • Word VBA все вопросы по Word VBA туда
  • Access все вопросы по программированию в Access туда
  • Книжульки по VBA - книги по программированию с использованием VBA
     
    Конкретные вопросы:
    Форма-заставка
    Как запустить макрос при изменении положения курсора или значения ячейки
  • Пример 1
  • Пример 2
  • Пример 3 (проверка области)
  • Пример 4
  • Пример 5
    Зацикливание в функции Change или SelectionChange
     
    Ранжирование без пробелов (макрос включает функции сортировки массива и удаления дубликатов, работает и в Excel 2007)
  • под Office 97
     
    Добавление в главное меню своего пункта, ассоциированного с макросом
    Создание ярлыка на рабочем столе
    Снятие защиты листа при забытом пароле
    Смена раскладки клавиатуры
    Скролл формы колесом прокрутки мыши
    Оптимизация кода по быстродействию использованием массивов

  • Всего записей: 556 | Зарегистр. 31-07-2002 | Отправлено: 21:40 14-10-2004 | Исправлено: lucky_Luk, 20:44 13-04-2007
    opx

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Огромный респект всем. Большое спасибо.

    Всего записей: 5 | Зарегистр. 13-09-2006 | Отправлено: 00:19 14-09-2006
    tennisprof

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте!  
     
     Необходимо в ExceL суммировать 2 3 4 5 столбцы, изходя из условия что в первом столбце одниковые значения и потом результат записывать в строку где были одинаковые значения в первом столбце, например  
       
    Исх.  
       1   2    3    4     5  
       3   5    6    7     5  
       1   2    4    6     8  
       4   3    5    7     9  
     
    Рез.  
       3   5    6    7     5  
       1   4    7    10   13  
       4   3    5    7     9  
     
    Как это сделать! Помогите пожалуйста , строк около 5 тысяч  
     
    Добавлено:
    Здравствуйте!  
     
     Необходимо в ExceL суммировать 2 3 4 5 столбцы, изходя из условия что в первом столбце одниковые значения и потом результат записывать в строку где были одинаковые значения в первом столбце, например  
       
    Исх.  
       1   2    3    4     5  
       3   5    6    7     5  
       1   2    4    6     8  
       4   3    5    7     9  
     
    Рез.  
       3   5    6    7     5  
       1   4    7    10   13  
       4   3    5    7     9  
     
    Как это сделать! Помогите пожалуйста , строк около 5 тысяч

    Всего записей: 4 | Зарегистр. 15-09-2006 | Отправлено: 13:30 15-09-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Проще сделать без VBA, через СУММЕСЛИ:

    Код:
    =СУММЕСЛИ(Лист1!$A$1:$A$5000;$A1;Лист1!B$1:B$5000)

    Данные на листе Лист1, начиная с А1.
    Надо поместить уникальные значения из столбца А, например, на другой лист, начиная с А1 (это 2-й параметр). Формулу рядом в В1 и скопировать во все строки и столбцы с B по E.
    Как взять уникальные значения (хотя это и не обязательно), обсуждалось много раз в Excel FAQ.

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 17:44 15-09-2006
    tennisprof

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо!
     
       Я попробовал так сделать, но не получилось (а точнее получилось только в одной ячейке и то если 0 то не работает). Делаю наверное, что-то не то.... впервый раз такие действия выполняю.
      Я делал так:
     
    A B  
     
    1 2  
    3 5  
    1 2  
    4 3  
     
     
    1.Скопировал Столбец А на другой лист
    2. И под 4 (A5) написал формулу =СУММЕСЛИ(Лист1!$A$1:$A$4;$A1;Лист1!B$1:B$4)  
    3. После этого она мне выдала ответ 7(2+7 (правильно)но! если  2 стоит 0 пишет 0 хотя на самом деле 5), только она пишет результат только в одной ячеке а не на месте 5 или 2 удаляя строку с двойкой
     
     
    ПОЖАЛУЙСТА НАПИШИТЕ ЕЩЕ РАЗ !

    Всего записей: 4 | Зарегистр. 15-09-2006 | Отправлено: 01:57 16-09-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    tennisprof
    Формула
    Цитата:
    =СУММЕСЛИ(Лист1!$A$1:$A$4;$A1;Лист1!B$1:B$4)
    в твоем примере должна выдать 4 (2+2 из столбца В). Конечно, если это данные с листа Лист1.
     
    Как это работает.
    Первые параметр (Лист1!$A$1:$A$4) - где искать
    Второй параметр ($A1) - что искать (в данном случае в ячейке А1 - 1)
    Третий параметр - какие данные суммировать.
    В твоем примере 1 в столбце А в 2-х ячейках - в строке 1 и 3. В столбце В им соответствуют числа 2 и 2. В сумме получается 4. Опять же, если мы работаем в Листе1. Вообще, если не нужно переносить данные между листами, Лист1! можно убрать.
     
    $$ нужны для правильного изменения адресации при копировании формулы в другие ячейки. $ около столбца означает не изменять адрес столбца при копировании, около строки - не изменять адрес строки. Т.о. $A1 означает изменять строку, но не столбец.

    Цитата:
    если  2 стоит 0 пишет 0 хотя на самом деле 5), только она пишет результат только в одной ячеке а не на месте 5 или 2 удаляя строку с двойкой

    Здесь ничего не понял.

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 04:47 16-09-2006
    opx

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

    Цитата:
    opx  
    Примерно так:  
     
    Код:For Each c In Selection  
        If InStr(c.Value, "11") > 0 Or InStr(c.Value, "гг") > 0 Then  
            c.Offset(0, 1).Value = c.Value  
        End If  
    Next  

     
    Yuk, а по подробней ты не мог бы объяснить. Два дня парился над этими 5 строками, но так ничего и не получилось.

    Всего записей: 5 | Зарегистр. 13-09-2006 | Отправлено: 12:05 16-09-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    opx
    Ну, я вроде все раньше написал. А каждый раз объяснять что делать с кодом VBA уже поднадоело. Давай конкретно: что делал, что получилось, что не получилось, если вылезали ошибки, то какие и на каком шаге, в каком месте кода.  
     
    Да, тебе надо вставить этот код в Sub test() ... End Sub
    Здесь что-ли проблемы?

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 19:45 16-09-2006
    SERGE_BLIZNUK

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

    Цитата:
    Yuk, а по подробней ты не мог бы объяснить

    я хоть и не Yuk но хочу ответить, пока он сам не ответил ;-)))
    1) что значит - не получилось?... вы создали функцию на VBA, вставили туда код и что - выделили свои данные, нажали выполнить макрос и что... он ничего не делает? выдаёт ошибку?...
    2) мой вариант смотрели?.. тоже не работает?..
     
    Добавлено:
    во... уже пост появился.. за Yuk не успеешь ответить ;-))))))))

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 19:48 16-09-2006
    DiMaS_2006



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Доброго времени суток!
    Посоветуйте, пожалуйста: Есть очень много вот такого вида данных. Нужно удалить все строки, кроме тех, которые содержат наибольшие значения из второго столбца; наибольшими они должны быть из диапазона, начинающегося целым числом, и заканчивающегося числом, предшествующим следующему целому. То есть: в массиве  от 854 до 854,91 самое большое число из столбца B - 5345,5 - эта запись нужна, остальные из этого диапазона можно убрать. Числа в первом столбце идут от 500 до 1500, шаг и размер диапазона может варьироваться.  
    853,91    3037,3
    854    2388,3
    854,09    1978,8
    854,18    2071,7
    854,27    2631,5
    854,36    3551,1
    854,45    4525,8
    854,55    5177
    854,64    5345,5
    854,73    4875,1
    854,82    3902,5
    854,91    2796,5
    855    1809,2
    855,09    1204
    855,18    1107,6

    Всего записей: 523 | Зарегистр. 01-08-2006 | Отправлено: 14:51 17-09-2006
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    DiMaS_2006
     
    смотри целую программу тут
    удачи.

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 00:05 18-09-2006 | Исправлено: SERGE_BLIZNUK, 00:11 18-09-2006
    DiMaS_2006



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    SERGE_BLIZNUK
    Пребольшое спасибо! уже правлю результаты целыми файлами сразу!


    ----------
    Маленькими шагами к большой цели

    Всего записей: 523 | Зарегистр. 01-08-2006 | Отправлено: 14:11 18-09-2006
    tennisprof

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо Yuk большое за помощь в суммировании.
       

    Всего записей: 4 | Зарегистр. 15-09-2006 | Отправлено: 14:40 18-09-2006
    DONRU1



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    DiMaS_2006
    Как вариант. За мастерами не угонишься.
    Sub fgh()
    Dim i As Integer, a As Integer, Row1 As Integer, FirstSum As Long
        a = 0 'нужно если первый элемент - не целое число
        For i = 1 To 20
            If Cells(i, 1) = "" Then Exit Sub
            If IsNumeric(Cells(i, 1)) = True And Right(Cells(i, 1) * 100, 2) = "00" Then
                FirstSum = Cells(i, 2)
                Row1 = i
                i = i + 1
                a = a + 1
            End If
            If a > 0 Then
                If Cells(i, 2) < FirstSum Then
                    Rows(i & ":" & i).Delete Shift:=xlUp
                Else
                    FirstSum = Cells(i, 2)
                    Rows(Row1 & ":" & Row1).Delete Shift:=xlUp
                End If
                i = i - 1
            End If
        Next i
    End Sub

    Всего записей: 32 | Зарегистр. 19-04-2006 | Отправлено: 20:19 18-09-2006
    PavelO

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здраствуйте, уважаемые форумчане!
    Подскажите, пожалуйста как бы мне так получше код составить, в котором каждый из ста label'ов должен иметь caption такой же как и каждая из ста ячеек.  

    Всего записей: 27 | Зарегистр. 19-09-2006 | Отправлено: 11:01 19-09-2006
    Xttx



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как в екселе сгруппировать одинаковые строчки, т.е в sql - select * from [asdf] GROUP BY [что_то_там].
     
    Есть нечто такое
    1010    x    1348    1600    x    1936    630
    x    1094    1348    x    1684    1936    x
    1010    x    1348    1600    x    2002    630
    x    1094    1348    x    1748    2050    x
     
     
    Нужно что б одинаковые строчки сливались в одну, игнорируя "х"!!!!
    То есть в данном приере первые две строчки одинаковые. А остальные разные из за предпоследних двух колонок..
     
    Предположительно сначала "х" заменить на пробел. А дальше???
    Подскажите пожалуйсто.

    Всего записей: 539 | Зарегистр. 04-07-2002 | Отправлено: 14:16 19-09-2006
    SERGE_BLIZNUK

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

    Цитата:
    sql - select * from [asdf] GROUP BY [что_то_там].  

    1) любой нормальный SQL сервер не даст вам выполнить подобный код!
    выбирать можно только те поля, которые есть в group by
    select [что_то_там] from [asdf] GROUP BY [что_то_там]
    2) приведите пример строчек, которые (по вашему мнению) должны остаться после группировки - по вашему же примеру... если будет понятно, что вы хотите, может и получится вам помочь ;-)

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 17:07 19-09-2006 | Исправлено: SERGE_BLIZNUK, 17:08 19-09-2006
    Kurbanov



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте у меня такой вопрос В VBA Я не силен задачка по сути не сложная
    короче необходимо что бы при нажатии кнопки (елементы управления ) в EXCEL выходило окошко с возможностью указать нужную ячейку с данными  данные экспортировались с другого листа  этого же документа EXcel за ранее спасибо.

    Всего записей: 4 | Зарегистр. 10-08-2006 | Отправлено: 17:16 19-09-2006
    jtyler



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как сделать эмуляцию движения мышки и щелчка по кнопке?  
     
    Например как будто пользователь выбирает что-то в котекстном меню. Только ето надо не для проверки что выбрал пользователь, а для эмуляции самого пользователя.

    Всего записей: 8 | Зарегистр. 27-07-2006 | Отправлено: 17:56 19-09-2006
    DiMaS_2006



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    DONRU1
    Тебе тоже большое спасибо. Сохраню, пригодится!

    Всего записей: 523 | Зарегистр. 01-08-2006 | Отправлено: 18:00 19-09-2006
    Yuk



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

    Цитата:
    код составить, в котором каждый из ста label'ов должен иметь caption такой же как и каждая из ста ячеек.


    Код:
    Private Sub UserForm_Activate()
    Dim i As Long
    Dim c as Control
    i = 0
    For Each c In Controls
        If TypeOf c Is msforms.Label Then
            c.Caption = Sheets("Sheet1").Cells(i, 1).Text
            i = i + 1
        End If
    Next
    End Sub

     
    Kurbanov

    Цитата:
    необходимо что бы при нажатии кнопки (елементы управления ) в EXCEL выходило окошко с возможностью указать нужную ячейку с данными


    Код:
    Private Sub CommandButton1_Click()
    Dim rng
    Set rng = Application.InputBox( _
        Prompt:="Select a cell", _
        Type:=8)
    MsgBox rng.Address
    End Sub


    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 20:33 19-09-2006
       

    Страницы: 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

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Excel VBA
    ShIvADeSt (23-04-2007 01:59): http://forum.ru-board.com/topic.cgi?forum=33&topic=8273


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru