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

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

Модерирует : gyra, Maz

Widok (17-05-2007 19:48): лимит страниц. продолжаем здесь  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

Widok



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

Просьба к посетителям топика дополнять шапку наиболее часто задаваемыми вопросами со ссылками на ответы в обязательном порядке

 
  • Смена представления имен столбцов с буквенного на цифровое и обратно
  • Надстройки "Сумма прописью"
  • Список соответствия имен функций в английской и русской версиях Excel
  • Описание Microsoft Excel File Format
     
     
    Предыдущие ветки топика: Часть 1 |
     
    Все вопросы по программированию (макросы, скрипты, пользовательские функции и т.п.) обсуждаются в теме Excel VBA в разделе Прикладное программирование.
     
    При необходимости выложить скриншот пользуйтесь сервисом ImageShack® (ограничение на размер файла <1.5 Mb)

  • Всего записей: 24190 | Зарегистр. 07-04-2002 | Отправлено: 15:32 01-04-2006 | Исправлено: Maz, 22:45 24-02-2017
    Mushroomer



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Yuk
    Есть таблица с данными:
    Параметр1 Параметр2 Параметр3 Сумма
    Параметр1, Параметр2  - числа
    Параметр3 - текст
    Сумма - сумма
    Напиши, пожалуйста, пользовательскую функцию, которая будет по трем параметрам (т.е. это входные аргументы) выдавать соответствующую сумму, т.е. значение четвертого столбца у найденной строчки. Я посмотрел и не нашел как это сделать стандартными средствами Можно искать только одно значение в таблице, а мне нужно сразу три.

    Всего записей: 22840 | Зарегистр. 19-01-2002 | Отправлено: 15:31 29-06-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mushroomer
    Это можно делать стандартными средствами через объединение 3-х столбцов во вспомогательном столбце: =A1&B1&C1
    Если без вспомогательного столбца, то да, нужна своя функция. Посмотрю.
     
    Добавлено:
    Pazan

    Цитата:
    а вот, чтобы не писАло в ячейке,а использовалось диалоговое окно.

    Тогда нужна пользовательская функция на VBA.

    Цитата:
    если создана формула в английской версии, она будет корректно работать в русской и наоборот?

    А вот это меня тоже интересует. У кого есть оба - русский и английский эксель, проверьте пожалуйста.

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 19:23 29-06-2006
    Pazan



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

    Цитата:
    Тогда нужна пользовательская функция на VBA.  

    1. а как функция будет постоянно следить за изменениями в данной ячейке?
    2. а если макросы отключены
    3. если будет подтверждение об эквивалентности перевода формул -- сообщи, плз
     
    Добавлено:
    хотя, по идее, должно быть, как в 1С -- рус/англ

    ----------
    Почему глупый, потому что бедный... Почему бедный, потому что глупый...

    Всего записей: 924 | Зарегистр. 17-11-2002 | Отправлено: 19:30 29-06-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Pazan
    1. как и любая другая функция
    2. тогда естественно не будет работать
    3. не очевидно

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 19:35 29-06-2006
    Pazan



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

    Цитата:
    как и любая другая функция  

    написать сможешь?

    Цитата:
    не очевидно

    ті хочешь сказать, что не совпадает функциональность формул и могут біть неверніе значения?

    Всего записей: 924 | Зарегистр. 17-11-2002 | Отправлено: 19:38 29-06-2006
    Yuk



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

    Цитата:
    ті хочешь сказать, что не совпадает функциональность формул и могут біть неверніе значения?
    Русское название функции может не распознаться в английском. Я не уверен как сохраняются функции в экселе. Также возможна проблема с разделителем (в английском , вместо ;).
     
     
    Добавлено:
    Mushroomer
    Типа такого:
    Код:
    Function MatchRange(lookup As Range, from As Range, _
                        Optional first As Boolean = True)
        Dim test As Boolean
        If lookup.Rows.Count > 1 Or _
        lookup.Columns.Count <> from.Columns.Count Then
            MatchRange = "#ERROR"
            Exit Function
        End If
        For r = 1 To from.Rows.Count
            test = True
            For c = 1 To from.Columns.Count
                If from(r, c) <> lookup(1, c) Then
                    test = False
                    Exit For
                End If
            Next
            If test Then
                MatchRange = r
                If first Then
                    Exit For
                End If
            End If
        Next
    End Function

    В ячейку вводится например =MatchRange(D10:F10, A1:C5, 0)
    1-й аргумент должен иметь 1 строку, число столбцов в обоих областях должно совпадать.
    Последний аргумент опциональный - true или 1 (по умолчанию) выводит номер первого совпадающего ряда, false или 0 - последнего. Если ничего не найдено, результат - 0. Если ошибка - #ERROR.
     
     
    Добавлено:
    В русском экселе не забудь про разделители. , ->;

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



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

    Цитата:
    В русском экселе не забудь про разделители. , ->;

    типа 1,000.00?

    Всего записей: 924 | Зарегистр. 17-11-2002 | Отправлено: 20:15 29-06-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Pazan
    Это для Mushroomera, разделители аргументов в формуле.

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



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Yuk
    Цитата:
    Это можно делать стандартными средствами через объединение 3-х столбцов во вспомогательном столбце: =A1&B1&C1  
    Спасибо. Этого имхо будет достаточно. Жаль, сам не сообразил хотя что-то похожее не раз советовал другим

    Всего записей: 22840 | Зарегистр. 19-01-2002 | Отправлено: 21:43 29-06-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mushroomer
    А функцию пробовал? Или я зря время убил?
     
    Pazan
    А это тебе:

    Код:
    Function IF_MSG(cond As Boolean, trueval As Variant, msg As String)
        If cond Then
            IF_MSG = trueval
        Else
            IF_MSG = ""
            MsgBox msg, vbCritical
        End If
    End Function

    В ячейку:  =IF_MSG(SUM(I7:I52)>=1000;SUM(I7:I52);"Сумма должна быть не меньше 1000")
    Я обратил условие так, чтобы сообщение появлялось при невыполнении условия. Вроде логичнее. Кстати, что должно быть в ячейке, если сумма < 1000. Пока я сделал, что ничего (строка IF_MSG = ""). Можешь туда вставить что нибудь.

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 21:59 29-06-2006
    Pazan



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Yuk
    СУММ(I7:I52)

    Всего записей: 924 | Зарегистр. 17-11-2002 | Отправлено: 22:02 29-06-2006
    Yuk



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

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 22:50 29-06-2006
    Mushroomer



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Yuk
    Цитата:
    А функцию пробовал? Или я зря время убил?
    С функцией буду разбираться завтра. (т.к. данные на работе). Но вот что непонятно.
    Цитата:
    В ячейку вводится например =MatchRange(D10:F10, A1:C5, 0) 1-й аргумент должен иметь 1 строку, число столбцов в обоих областях должно совпадать.

    Я, когда описывал словами будущую функцию, имел в виду вот такой запрос: =MatchRange(A1, K1, L1, A1:C5, 0), где A1, К1 - числа, L1 - текст (т.е. нет единой строки, а есть три значения для поиска), а  A1:C5 - это таблица в которой ищется, причем она расположена на отдельном листе (это я, правда, забыл написать ). А возвращается значениe D столбца этой таблице в той строке, которая совпала по этим трем значениям.

    Всего записей: 22840 | Зарегистр. 19-01-2002 | Отправлено: 01:12 30-06-2006 | Исправлено: Mushroomer, 01:13 30-06-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mushroomer
    То, что таблица на отдельном листе, нет проблем, должно работать. А вот то что у тебя multiple areas в 1-м аргументе - плохо. Я предполагал, что данные для поиска расположены вместе, как в таблице, причем 1-я ячейка соответствует 1-му столбцу в таблице и т.д. Если делать каждую ячейку аргументом, то что получится, если завтра тебе понадобятся 2 параметра, а послезавтра 4? Решения, конечно есть, надо подумать.

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 01:27 30-06-2006
    Mushroomer



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Yuk
    Цитата:
    если завтра тебе понадобятся 2 параметра, а послезавтра 4
    Я точно знаю, что у меня будет только три отдельных параметра.

    Цитата:
    Решения, конечно есть, надо подумать
    Если сложно, то не заморачивайся. У меня есть уверенность, что через дополнительный столбец я это за 10 минут сделаю.

    Всего записей: 22840 | Зарегистр. 19-01-2002 | Отправлено: 02:01 30-06-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mushroomer
    Новая версия с небольшой модификацией:

    Код:
    Function MatchRange(lookup As Range, from As Range, _
                        Optional first As Boolean = True)
        Dim test As Boolean
        Dim arr() As Variant
        Dim i As Long
        If lookup.Cells.Count <> from.Columns.Count Then
            MatchRange = "#ERROR"
            Exit Function
        End If
        ReDim arr(1 To lookup.Cells.Count)
        i = 1
        For Each a In lookup.Areas
            For Each cl In a
                arr(i) = cl.Value
                i = i + 1
            Next
        Next
        For r = 1 To from.Rows.Count
            test = True
            For c = 1 To from.Columns.Count
                If from(r, c) <> arr(c) Then
                    test = False
                    Exit For
                End If
            Next
            If test Then
                MatchRange = r
                If first Then
                    Exit For
                End If
            End If
        Next
    End Function

    Теперь можно вводить сколько угодно областей, лишь бы число ячеек в первом аргументе равнялось числу столбцов во 2-м.
    Можно например так:
    Код:
    =matchrange((A1,K1:L1),Sheet1!A1:C5,0)

    Обрати внимание, что в случае multiple areas в 1-м аргументе, они заключаются в скобки и перечисляются через запятую. Опять же, не забудь про ; вместо , в русском.
    Да, если тебе нужна сумма из 4-го столбца, используй функцию ИНДЕКС, с MATCHRANGE вместо номера строки.
     
    Потестируй, даже если тебе не понадобится, думаю, функция полезная, кому-нибудь да пригодится.

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 08:51 30-06-2006 | Исправлено: Yuk, 08:54 30-06-2006
    Lesovik

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Приветствую.
    У нас в сетке расшарено несколько файлов в формате MS Excel; периодически в том же каталоге появляются похожие файлы или их копии, вида  
    Измененная копия <Имя файла>.xls.  
    И изменения сохраняются в них. Если, конечно, изменения были. Иначе содержимое просто остается идентичным...
    Например, файл с именем Контроллер.xls, а новый файл создается с именем  
    Измененная копия Контроллер.xls
    Мы никак не можем понять, чей Excel и при каких условиях создает файл копии.
    Пакеты MS Office людей разные - и 2000, и XP, и 2003.
    Или может Excel тут вообще не при чем, и эти файлы создает какой-нить бэкапер или синхронизатор?..
     
    Поделитесь, кто в курсе...  

    Всего записей: 190 | Зарегистр. 06-02-2003 | Отправлено: 20:03 30-06-2006 | Исправлено: Lesovik, 20:04 30-06-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Lesovik
    Если не ошибаюсь, такое имя создается в следующем случае. При попытке открыть файл, который уже кем-то открыт, Эксель предлагает его открыть только на чтение. При сохранении изменений предлагается сохранить файл под новым именем, и "Измененная копия" подставляется по умолчанию.
    Выяснить, кто сохранил, думаю, можно в зависимости от типа сети. В Novell, например, это в свойствах файла.
    Из моего опыта подобное использование экселя создает кучу проблем. Мы в конце концов дозрели до использования баз данных с веб интерфейсом.

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 20:17 30-06-2006
    Lesovik

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Yuk, в описанном тобой случае по умолчанию файлу присваевается имя вида Копия <Имя файла>.xls
    Так что это не тот случай..

    Всего записей: 190 | Зарегистр. 06-02-2003 | Отправлено: 22:10 30-06-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Lesovik
    Возможно. У меня нет русской версии, так что проверить не могу. Но ты уверен, что это так для всех версий экселя?
    Цитата:
    Пакеты MS Office людей разные - и 2000, и XP, и 2003.
    Я бы перепроверил.  
    Если да, то эксель тут скорее всего ни при чем.

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 22:58 30-06-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

    Компьютерный форум Ru.Board » Компьютеры » Программы » Microsoft Excel FAQ (часть 2)
    Widok (17-05-2007 19:48): лимит страниц. продолжаем здесь


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru