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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

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

ShIvADeSt



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

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

 
Обратите внимание, этот топик для помощи в изучении и использовании VBA. Посему запросы типа "Напишите мне такой-то макрос, я VBA не знаю и знать не хочу" не приветствуются.
Древняя мудрость: "Накорми голодного рыбой и он погибнет, научи его ловить рыбу и ты спасешь его."(R)
 
Предыдущие ветки топика: Часть 1, Часть 2
 
Информация общего характера:
  • Список соответствия имен функций в английской и русской версиях Excel
  • Описание Microsoft Excel File Format (eng.)
     
    Рекомендации:
    Если у Вас есть проблема, не решаемая стандартными средствами 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.
  • Приемы, хитрости, трюки и нюансы работы в Microsoft Excel - сайт "Планета Excel", целиком посвященный Excel и всему, что с ним связано.
  • Microsoft Excel: Таблицы и VBA. Справочник. Вопросы и Ответы. Советы. Примеры.  
     
    Родственные топики:
  • Вопросы по работе с MS Excel - Excel FAQ - часть 1, часть 2, часть 3
  • Технические проблемы с MS Office 2003 или Office XP.
  • Word VBA все вопросы по Word VBA туда
  • Access все вопросы по программированию в Access туда
  • Книжульки по VBA - книги по программированию с использованием VBA
     
    Конкретные вопросы:
    Форма-заставка
    Как запустить макрос при изменении положения курсора или значения ячейки
  • Пример 1
  • Пример 2
  • Пример 3 (проверка области)
  • Пример 4
  • Пример 5
    Зацикливание в функции Change или SelectionChange
     
    Ранжирование без пробелов (макрос включает функции сортировки массива и удаления дубликатов, работает и в Excel 2007)
  • под Office 97
     
    Добавление в главное меню своего пункта, ассоциированного с макросом
    Создание ярлыка на рабочем столе
    Снятие защиты листа при забытом пароле
    Смена раскладки клавиатуры
    Скролл формы колесом прокрутки мыши
    Оптимизация кода по быстродействию использованием массивов
    Найти "чужое" окно и нажать в нем кнопку (вписать текст в текстовое поле)
    Работа с UNICODE-символами в VBA: запись, чтение из ячейки, перевод в ASС и обратно
    Как программно подключить дополнительные библиотеки (например, "Microsoft Scripting Runtime" или "Microsoft ActiveX Data Objects 2.8 Library) через References
     
    Перечень основных ColorIndex'ов из MSDN
     

    Смежные темы:
    Программы » Microsoft Office 2019 & 365 | 2016 | 2013 | 2010 | 2007 | 2003
    Программы » OneNote | Outlook 2013 & 2016 & 2019 | Outlook 2010 | Microsoft Mathematics & Math Solver
    Программы » Word FAQ | Excel FAQ | Access FAQ
    Прикладное программирование » Word VBA | Access VBA  
    Андеграунд » Microsoft Office 2019 | 2016 | 2013 | 2010 | 2007 | 2003
    Андеграунд » OneNote | Visio | SharePoint Server | Project Server | Exchange Server
    Андеграунд » Надстройки (add-ins) и коммерческие макросы Excel
    Андеграунд » Самостоятельная сборка дистрибутивов Оffice 2007/2010/2013/2016 | MUI для Office 2007

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 10:16 11-01-2010 | Исправлено: ALeXkRU, 16:42 03-08-2021
    andrewkard1980

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

    Цитата:
    Это просто повторное описание

    Просто у Вас зеркальная таблица, по этому возникает дубляж, пробуйте так:

    Код:
     
    Sub CorrDescription()
    Dim sNmCl$, sNmRw$, sStr$
    Dim r As Range
    Dim oDict: Set oDict = CreateObject("Scripting.Dictionary"): oDict.CompareMode = vbBinaryCompare
    sStr = "При проведении корреляционного анализа были полученные статистически достоверные зависимости, так, "
    For Each r In Selection
        If r.Font.ColorIndex = 3 Then
        sNmCl = Cells(1, r.Column).Value
        sNmRw = Cells(r.Row, 1).Value
            If oDict.Exists(sNmCl & sNmRw) = False And oDict.Exists(sNmRw & sNmCl) = False Then
                If r.Value >= 0 Then
                    sStr = sStr & sNmCl & " положительно коррелирует с " & sNmRw & " (r = " & Application.Round(r.Value, 2) & ", p<0,05), "
                Else
                    sStr = sStr & sNmCl & " отрицательно коррелирует с  " & sNmRw & " (r = " & Application.Round(r.Value, 2) & ", p<0,05), "
                End If
                oDict.Item(sNmCl & sNmRw) = 1
                oDict.Item(sNmRw & sNmCl) = 1
            End If
        End If
    Next
    sStr = Left(sStr, Len(sStr) - 2) & "."
    Cells(Cells(Rows.Count, "A").End(xlUp).Row + 2, 1) = sStr
    End Sub
     

    Всего записей: 209 | Зарегистр. 01-05-2010 | Отправлено: 21:46 10-11-2014
    Fsp050

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    andrewkard1980, а теперь все как всегда впорядке
     
    а по поводу
    Цитата:
    заставить компутер делать выводы, т.е. вот он описал ,что вар 1 коррелирует с вар3, а вар 4 коррелирует с вар 5......... ,а далее вводная фраза Таким образом мы можем сделать вывод, что:  (смотрим с чем и как связана сначала первая переменная)  
    чем больше у человека вар1, тем больше у него выражено вар3, а также вар 4 , а также вар 6 и меньше у него выражено вар5(зависит от знака корреляции), после как все зависимости с вар 1 прописались переходим к след. переменной и в таком же духе, чем больше у человека там вар 3, тем больше вар 4 и меньше вар 5.

    Сможете помочь?
    Здесь по сути идентичная первой, надо просто другие вводные слова вставлять
    Таким образом мы можем сделать вывод, что
    чем больше   .... тем больше,  или чем больше, тем меньше (зависит от знака)

    Всего записей: 361 | Зарегистр. 02-04-2011 | Отправлено: 13:19 11-11-2014
    Leojse

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый вечер, уважаемые форумчане! Буду очень признателен за любую помощь в данном вопросе. Есть две книги, с которых собираются данные в сводную книгу. Помогите, пожалуйста, поправить макрос так, чтобы при сборе данных из книги 1, данные не копировались в сводную книгу, имеющих условие в виде даты (то есть, на пример, не должен копироваться адрес Нефедова 31в - 2, и Нефедова 31в-25 в сводную, так как есть условие в виде даты). Данные с условием в виде даты из книги 2 не копируются в сводную, но не знаю, как прописать также, чтобы такие данные с условием не копировались и из первой книги.
    Заранее огромнейшее спасибо за любую помощь!
    http://rghost.ru/59047772

    Всего записей: 107 | Зарегистр. 05-11-2009 | Отправлено: 20:27 13-11-2014
    ccna



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день, друзья!  
     
    Есть документ xls с настроенным макросом. В этой таблице формируется отчет поэтажного плана из графической программы. В настоящий момент таблица формирует отчет только по одному этажу, даже если выделены, скажем, с 1 по 17. То есть, действует это ограничение.  
     
    Задача: нужно, чтоб формировался отчет по всем этажам. То есть, устранить это ограничение.  
     
    Подскажите, как это сделать?  
    Заранее спасибо!  
     
     
     
     
    Вот содержание таблицы:  
     
    ' PlanCAD Automation Sample  
    ' Copyright (C) 2010 by Consistent Software, Inc.  
     
    Option Explicit  
     
    ' вызывается из Планкад  
    Sub PT_RunFunc(Objects As PTObjects, ptApp As PTApplication)  
      Dim floor As PTFloor  
      If Objects.Count > 0 Then  
        Dim obj As IPTObject  
        For Each obj In Objects  
          If obj.Type = ptObjTypeFloor Then  
            Set floor = obj  
            Exit For  
          End If  
        Next  
      End If  
       
      If Not floor Is Nothing Then  
        UpdateReport floor, ptApp  
      Else  
        MsgBox "Неверные данные!"  
      End If  
    End Sub  
     
    ' обновить отчет по этажу  
    Sub Update()  
     ' получить модель плана  
      Dim ptApp As PTApplication  
      Set ptApp = GetPlanModel  
       
      ' получить этаж по номеру  
      Dim floor As PTFloor  
      Set floor = GetFloorById  
      If floor Is Nothing Then  
        MsgBox "Нет этажа с таким номером!"  
        Exit Sub  
      End If  
     
      ' обновить  
      Sheets("Экспликация этажа").Select  
      UpdateReport floor, ptApp  
       
    End Sub  
         
    ' обновить отчет по этажу  
    Sub UpdateReport(floor As PTFloor, ptApp As PTApplication)  
     
      ' площади этажа  
      Dim totalArea As Double, flatArea As Double  
      Dim livingArea As Double, subsdArea As Double, balcArea As Double  
      totalArea = flatArea = livingArea = subsdArea = balcArea = 0#  
       
      ' заполняем данные по помещениям и входящим в них комнатам  
      Dim row As Integer  
      row = 12  
      Dim obj As IPTObject  
      For Each obj In floor.Objects  
        ' квартира  
        If obj.Type = ptObjTypeFlat Then  
          UpdateFlat obj, floor, totalArea, flatArea, livingArea, subsdArea, balcArea, row  
        End If  
      Next  
       
      ' вспомогательные чп (не входящие в помещения)  
      UpdateRooms floor.Objects, Nothing, floor, totalArea, flatArea, livingArea, subsdArea, balcArea, row  
       
      ' &#232;&#242;&#238;&#227;&#238;  
      Cells(row, 1).Formula = ""  
      Cells(row, 2).Formula = floor.floorId  
      Cells(row, 3).Formula = ""  
      Cells(row, 4).Formula = ""  
      Cells(row, 5).Formula = ""  
      Cells(row, 6).Formula = ""  
      ' площадь с учетом неотапливаемых &#247;&#239;  
      If totalArea > 0 Then Cells(row, 7).Formula = totalArea Else Cells(row, 7).Formula = ""  
      ' общая площадь  
      If flatArea > 0 Then Cells(row, 8).Formula = flatArea Else Cells(row, 8).Formula = ""  
      ' жилая  
      If livingArea > 0 Then Cells(row, 9).Formula = livingArea Else Cells(row, 9).Formula = ""  
      ' подсобная  
      If subsdArea > 0 Then Cells(row, 10).Formula = subsdArea Else Cells(row, 10).Formula = ""  
      ' лоджий, балконов  
      If balcArea > 0 Then Cells(row, 11).Formula = balcArea Else Cells(row, 11).Formula = ""  
      ' высота  
      Cells(row, 12).Formula = floor.Height  
      Cells(row, 13).Formula = ""  
      Cells(row, 14).Formula = ""  
      row = row + 1  
       
      ' clear last records  
      While Cells(row, 2).Formula <> "" Or Cells(row, 3).Formula <> "" Or Cells(row, 4).Formula <> ""  
        Range(Cells(row, 1), Cells(row, 14)).ClearContents  
        row = row + 1  
      Wend  
       
    End Sub  
     
    ' обновить информацию о помещении  
    Sub UpdateFlat(flat As PTFlat, floor As PTFloor, ByRef totalArea As Double, ByRef flatArea As Double, ByRef livingArea As Double, ByRef subsdArea As Double, ByRef balcArea As Double, ByRef row As Integer)  
     
      ' части помещения  
      Dim flatTotalArea As Double, flatFlatArea As Double  
      Dim flatLivingArea As Double, flatSubsdArea As Double, flatBalcArea As Double  
      flatTotalArea = flatFlatArea = flatLivingArea = flatSubsdArea = flatBalcArea = 0#  
      UpdateRooms flat.Objects, flat, floor, flatTotalArea, flatFlatArea, flatLivingArea, flatSubsdArea, flatBalcArea, row  
       
      ' итого  
      Cells(row, 1).Formula = ""  
      Cells(row, 2).Formula = floor.floorId  
      Cells(row, 3).Formula = flat.FlatId  
      Cells(row, 4).Formula = ""  
      Cells(row, 5).Formula = ""  
      Cells(row, 6).Formula = ""  
      ' площадь с учетом неотапливаемых&#247;&#239;  
      If flatTotalArea > 0 Then Cells(row, 7).Formula = flatTotalArea Else Cells(row, 7).Formula = ""  
      'общая площадь  
      If flatFlatArea > 0 Then Cells(row, 8).Formula = flatFlatArea Else Cells(row, 8).Formula = ""  
      ' жилая  
      If flatLivingArea > 0 Then Cells(row, 9).Formula = flatLivingArea Else Cells(row, 9).Formula = ""  
      ' подсобная  
      If flatSubsdArea > 0 Then Cells(row, 10).Formula = flatSubsdArea Else Cells(row, 10).Formula = ""  
      ' лоджий, балконов  
      If flatBalcArea > 0 Then Cells(row, 11).Formula = flatBalcArea Else Cells(row, 11).Formula = ""  
      ' высота  
      Cells(row, 12).Formula = flat.Height  
      Cells(row, 13).Formula = ""  
      Cells(row, 14).Formula = ""  
       
      totalArea = totalArea + flatTotalArea  
      flatArea = flatArea + flatFlatArea  
      livingArea = livingArea + flatLivingArea  
      subsdArea = subsdArea + flatSubsdArea  
      balcArea = balcArea + flatBalcArea  
      row = row + 1  
     
    End Sub  
     
    ' обновить части помещения  
    Sub UpdateRooms(rooms As PTObjects, flat As PTFlat, floor As PTFloor, ByRef totalArea As Double, ByRef flatArea As Double, ByRef livingArea As Double, ByRef subsdArea As Double, ByRef balcArea As Double, ByRef row As Integer)  
     
      Dim obj As IPTObject  
      For Each obj In rooms  
        If obj.Type = ptObjTypeRoom Then  
          Dim room As PTRoom  
          Set room = obj  
          If (flat Is Nothing) = (room.flat Is Nothing) Then  
            ' литера  
            Cells(row, 1).Formula = room.Litera  
            ' этаж  
            If Not floor Is Nothing Then Cells(row, 2).Formula = floor.floorId Else Cells(row, 2).Formula = ""  
            ' помещение  
            If Not flat Is Nothing Then Cells(row, 3).Formula = flat.FlatId Else Cells(row, 3).Formula = ""  
            ' номер &#247;&#239;  
            Cells(row, 4).Formula = room.RoomId  
            ' назначение  
            Cells(row, 5).Formula = room.Description  
            ' формула  
            Cells(row, 6).Formula = room.area.Formula  
            ' &#239;&#235;&#238;&#249;&#224;&#228;&#252; &#247;&#239;  
            Dim roomArea As Double  
            roomArea = FormatNumber(room.area, 1)  
            'площадь с учетом неотапливаемых чп  
            Dim area As Double  
            area = FormatNumber(roomArea * room.AreaFactor, 1)  
            totalArea = totalArea + area  
            If area > 0 Then Cells(row, 7).Formula = area Else Cells(row, 7).Formula = ""  
            'общая площадь  
            If room.AreaCategory = ptAreaCategoryLiving Or room.AreaCategory = ptAreaCategorySubsidiary Then  
              area = FormatNumber(roomArea * room.AreaFactor, 1)  
              flatArea = flatArea + area  
            Else  
              area = 0#  
            End If  
            If area > 0 Then Cells(row, 8).Formula = area Else Cells(row, 8).Formula = ""  
            ' жилая  
            If room.AreaCategory = ptAreaCategoryLiving Then  
              area = roomArea  
              livingArea = livingArea + area  
            Else  
              area = 0#  
            End If  
            If area > 0 Then Cells(row, 9).Formula = area Else Cells(row, 9).Formula = ""  
            ' подсобная  
            If room.AreaCategory = ptAreaCategorySubsidiary Then  
              area = FormatNumber(roomArea * room.AreaFactor, 1)  
              subsdArea = subsdArea + area  
            Else  
              area = 0#  
            End If  
            If area > 0 Then Cells(row, 10).Formula = area Else Cells(row, 10).Formula = ""  
            ' лоджий, балконов  
            If room.AreaCategory = ptAreaCategoryCold Then  
              area = FormatNumber(room.area * room.AreaFactor, 1)  
              balcArea = balcArea + area  
            Else  
              area = 0#  
            End If  
            If area > 0 Then Cells(row, 11).Formula = area Else Cells(row, 11).Formula = ""  
            ' высота  
            Cells(row, 12).Formula = room.Height  
            Cells(row, 13).Formula = ""  
            Cells(row, 14).Formula = ""  
            row = row + 1  
          End If  
        End If  
      Next  
    End Sub  
     
    ' возвращает этаж по номеру  
    Function GetFloorById(sFloorId As String, ptApp As PTApplication) As PTFloor  
      Set GetFloorById = Nothing  
      Dim floor As PTFloor  
      For Each floor In ptApp.ObjectsByType(ptObjTypeFloor)  
        If floor.floorId = sFloorId Then  
          Set GetFloorById = floor  
          Exit For  
        End If  
      Next  
    End Function  
     
    ' returns the plan model  
    Function GetPlanModel() As PTApplication  
      Dim app  
      Set app = CreateObject("PlanCad.Application")  
      app.Visible = True  
      Set GetPlanModel = app.Documents.ActivePlanModel  
    End Function

    Всего записей: 182 | Зарегистр. 12-11-2005 | Отправлено: 11:08 14-11-2014
    litmax

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите, пожалуйста, как решить такую задачу. Она формулами точно не решается. Я пробывал. но для профессионалов, которые любят решать что-то неординарное, она понравится, 100%.
    необходимо подсчитать веса слов вот по этой формуле

    Ni,k это сколько раз то или иное слово появилось в одном параграфе.
    параграф имеется ввиду, там где есть красная строка

     
    Nk-сколько раз то или иное слово  появилось во всем тексте
    |D| это количество параграфов
    Ni,s означает, что в знаменателе находится сумма по всем параграфам, кроме рассматриваемого.
    т.е. вот есть 10 параграфов, 9 рассматривается, один нет. когда он рассмотрелся и данные по словам, которые в нем есть уже как бы в числителе, все  с ним работа закончена, начинаете с другим параграфом из 10, и данные этого первого параграфа учитываются в знаменателе.
     
    Только можно ли встроить функцию, типа мессейдж бокса, чтобы  можно было настраивать  какое слово можно считать редким, а какое частым.Например, если встретилось больше 10 раз в параграфе, оно частое, а если меньше 3 раз, оно редкое.
    например, так, извините за пэинт))

    И если вдруг прога заметит, что какое то слово частое или редкое, оно в обсчет по этой формуле не пойдет.
    Конечно, нужно учитывать морфологию, чтобы слова синий и синяя для  компа значили одно и тоже. Это делается путем стемминга. сжатый, сжатие, сжимать это одно слово.
     
     
    на выходе эксель должен показывать  нечто вроде
    слово 1 0,456
    слово 2= 0,999
    слово 3= 0,576

    Всего записей: 9 | Зарегистр. 10-09-2014 | Отправлено: 00:29 15-11-2014 | Исправлено: litmax, 00:30 15-11-2014
    Futurism

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите, пожалуйста, написать макрос.
    http://rghost.ru/59143337
    Там где у чисел стоит звездочка(*) не важно сколько, одна, 2, три звезды то число пометить красным цветом.

    Всего записей: 1200 | Зарегистр. 04-02-2011 | Отправлено: 10:20 19-11-2014
    psiho

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

    Цитата:
    Помогите, пожалуйста, написать макрос.
    Там где у чисел стоит звездочка(*) не важно сколько, одна, 2, три звезды то число пометить красным цветом.

    А зачем Вам макрос? Это же можно сделать простым условным форматированием

    Всего записей: 247 | Зарегистр. 26-10-2006 | Отправлено: 20:54 19-11-2014
    Futurism

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

    Всего записей: 1200 | Зарегистр. 04-02-2011 | Отправлено: 13:16 21-11-2014
    VictorKos



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

    Цитата:
    да, можно, но вот удалить звездочку автозаменой нельзя.

    Как заменить/удалить/найти звездочку

    Всего записей: 304 | Зарегистр. 20-03-2005 | Отправлено: 22:46 22-11-2014
    Futurism

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    VictorKos
    Может глянете, что тут не так я делаю

    как тильду не ставлю , ничего не меняется
    http://rghost.ru/59235966

    Всего записей: 1200 | Зарегистр. 04-02-2011 | Отправлено: 13:22 24-11-2014
    grinchukav

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Futurism
    Снимите галочку "Ячейка целиком"

    Всего записей: 67 | Зарегистр. 28-02-2008 | Отправлено: 13:45 24-11-2014
    Futurism

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    grinchukav
    Спасибо Вам, теперь сработало.

    Всего записей: 1200 | Зарегистр. 04-02-2011 | Отправлено: 14:01 24-11-2014
    shune4ka

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Знающие люди, помогите написать макрос для логирования.  
     
    Суть такая. Есть база данных на листе "общий список".  
    Сканнируются баркоды из этого списка.  
    По найденному в списке баркоду заполняется форма для печати.  
    Есть лист "Скан". Где в первый столбец необходимо логировать все отсканнированные баркоды, которые были найдены. По ним уже формулами подтягивается необходимая информация.  
     
    Часть с печатью вроде сделала. Баркод сканнируется в синее поле, находится в столбце B, из строки с баркодом заполняется форма на скрытом листе "new_45".  
    А вот с логированием проблема. Бьюсь весь день, а какая-то ерунда получается.  
     
    Пробовала сканнирование перенести на лист "скан". Чтобы по заполненной на этом листе строке происходила печать, а данные в табличку подтягивались с листа с базой "общий список", но так не смогла, подтягиваются только Н/Д. Хотя наверное это более оптимальный вариант...  
    Помогите, пожалуйста!  
    Заранее очень признательна.
    Ссылка на файл:
    https://drive.google.com/file/d/0B16thjjI9osNWlI5T3hlTlZ4b0E/view?usp=sharing
     
    Добавлено:
    справилась сама. спасибо

    Всего записей: 10 | Зарегистр. 14-01-2008 | Отправлено: 09:50 26-11-2014
    Fsp050

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    помогите, пожалуйста, вопрос такой же из серии описания корр. анализа, но только уже кросс табы
    Помогите пожалуйста, решить задачу сходную с описанием корреляционного анализа , но тут автоматическом описании результатов кросстабов (перекрестных таблиц).
    Например, это одно из результатов кросс
     
    http://rghost.ru/59366557
    Принцип описания должен следовать такому порядку.
     
    Первоначально мы описываем максимально число. В этом случае: 11 человек (Информация взята из клетки E6), которые принадлежат ко второй группе, по первому вопросу (он первый, т.к. там , цифра 1 стоит в этой колонке I) дали ответ 1, среднее количество людей , а именно 4 Ответили 2 и 3 соответственно (потому что мы имеем такое же количество людей, которые вложили иной ответ, иногда такое бывает)
     
    После этого, макросы будут описывать первую группу максимальные, среднее, минимальные значения, аналогичным способом: в то же время в первой группе: 9 человек поставили ответ 3, и так далее /
    Конечно же, я не знаю, как, но макрос должен увидеть, какая цифра может быть большой , а какая средней, и какая минимальной
    Обязательно, что после каждого описания таблиц макросы должны указать, что различия стат.лостоверны и эти данные (хи-квадрат = 16,557, р &#8804; 0,05), взяты из соответствующей ячейки
    Ну, после описания первого макросы таблицы начинается описать следующим.
     
    На практике это должно быть так
    (вводные слова) в изучении взаимосвязи между несколькими качественными характеристиками мы обнаруживаем, что:
    Наибольшее количество людей, которые принадлежат к второй группе, а именно 11 человек на первый вопрос ответили 1, средее количество людей, а именно 4 Ответили 2 и 3 соответственно! В то же время (введение слов), наибольшее количество тех, кто принадлежит к первой группе, а именно 9 человек на первый вопрос поставили ответ3 и так далее. Эти различия были статистически значимыми (хи-квадрат = 16,557, р &#8804; 0,05)
     
     
    курсив вводные слова, которые должны быть записаны в структуре макросов
    жирным шрифтом является информация, которую мы видим в наших таблицах
     
     
    На самом деле, нам с коллегами часто приходится иметь дело с качественными переменными, такие ,как люди, объекты и так далее и мы можем работать с сотнями подобных или более сложных таблиц, где размерность не 1 на 2, а 10 на 20, как минимум , и мы тратим много драгоценного времени на их описании, это рутинная работа, которая должна быть легче, чтобы не тратить время.
    Пожалуйста, помогите.
     

    Всего записей: 361 | Зарегистр. 02-04-2011 | Отправлено: 17:52 01-12-2014
    frb_noname

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго времени суток!
     
    Подскажите пожалуйста, что делаю не так с массивом (в него нужно будет записать данные каждой активной ячейки колонки из отфильтрованного диапазона)
     

    Код:
     
     
    Dim i As Integer
    Dim mystr(1 To 10) As Single
    i = 1
     
      Sheets("zvonki").Select
        With ActiveSheet  
          Set Y = .Range("G2:G" & .Cells(.Rows.Count, "G").End(xlUp).Row)
        End With
       
        For Each firstCell In Y.Cells.SpecialCells(xlCellTypeVisible)
          With firstCell
            firstCell.Activate
            mystr(i) = ActiveCell.Value
            i = i + 1
            MsgBox mystr(i)
          End With
        Next
     
     

     
    На строке          
    mystr(i) = ActiveCell.Value  
    ошибка typemismatch (RunTimeError 13)
     
    Спасибо.

    Всего записей: 47 | Зарегистр. 03-11-2008 | Отправлено: 11:27 02-12-2014
    andrewkard1980

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    frb_noname
    Какое значение і при ошибке?

    Всего записей: 209 | Зарегистр. 01-05-2010 | Отправлено: 02:28 03-12-2014
    frb_noname

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

    Всего записей: 47 | Зарегистр. 03-11-2008 | Отправлено: 09:03 03-12-2014
    Fsp050

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    andrewkard1980
    а мне не сможете помочь? Только на Вас и надежда

    Всего записей: 361 | Зарегистр. 02-04-2011 | Отправлено: 10:47 03-12-2014
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    frb_noname
     
    Раз i=1, то скорее всего у вас в первой ячейке видимого диапазона строковый заголовок отфильтрованного столбца таблицы. Да и какой смысл в активации ячейки перед тем как получить её значение? Лучше так.

    Код:
     
        For Each firstCell In Y.Cells.SpecialCells(xlCellTypeVisible)
            If Application.WorksheetFunction.IsNumber(firstCell.Value) Then
                mystr(i) = firstCell.Value
                i = i + 1
                MsgBox mystr(i)
            End If
         Next  
     

    Fsp050
    Вам может лучше сюда? Тем более что вас несколько человек с коллегами, а что-то писать код не один из вас не начал.

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 04:34 05-12-2014
    PetrK



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как выполнить макрос только на выделенных листах книги?
     
    Выделяю несколько листов в одной книге, запускаю макрос. Часть команд применяется ко всем выделенным листам(установка границ ячейки), часть часть команд применяется только к активному листу(присвоение значений ячейки).
     
    Выполнять макрос для всех страниц книги не подходит.
     

    Код:
     
    Sub DefaultView()
        k = ActiveWorkbook.Worksheets.Count
        'Настраиваем ширину столбцов
        Columns("A:A").Select
        Selection.ColumnWidth = 16
        Columns("B:B").Select
        Selection.ColumnWidth = 70
        Columns("C:C").Select
        Selection.ColumnWidth = 16
        Columns("D:D").Select
        Selection.ColumnWidth = 17
        Columns("E:E").Select
        Selection.ColumnWidth = 7
        Columns("F:F").Select
        Selection.ColumnWidth = 17
        Columns("G:G").Select
        Selection.ColumnWidth = 24
        'настраиваем границы и устанавливаем фильтр в A4:G5
        Range("A4:G5").Select
        With Selection.Borders(xlEdgeLeft)
            .LineStyle = xlContinuous 'тип линии: сплошная
            .ColorIndex = 0 'цвет:черный
            .TintAndShade = 0 'изменение цвета (темнее или свтлее): без изменений
            .Weight = xlThin 'тип линии: тонкая
        End With
        With Selection.Borders(xlEdgeTop)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
        With Selection.Borders(xlEdgeBottom)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
        With Selection.Borders(xlEdgeRight)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
        With Selection.Borders(xlInsideVertical)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
        With Selection.Borders(xlInsideHorizontal)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
            Range("A4:G5").AutoFilter
    'настраиваем границы и делаем шрифт жирным в A4:G4
        Range("A4:G4").Select
        Selection.Font.Bold = True
        Selection.Borders(xlDiagonalDown).LineStyle = xlNone
        Selection.Borders(xlDiagonalUp).LineStyle = xlNone
        With Selection.Borders(xlEdgeBottom)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlMedium
        End With
    'настраиваем выравнивание в шапке таблицы
        Range("A4:G4").Select
        With Selection
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlCenter
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
    'настраиваем выравнивание в таблице
        Range("A5:G5").Select
        With Selection
            .HorizontalAlignment = xlGeneral
            .VerticalAlignment = xlCenter
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
    'присваиваем значения шапке таблицы
        Range("A4").Value = "Модель"
        Range("B4").Value = "Описание"
        Range("C4").Value = "Фирма"
        Range("D4").Value = "Цена, руб."
        Range("E4").Value = "Кол., шт."
        Range("F4").Value = "Сумма, руб."
        Range("G4").Value = "Примечания"
        Range("A3").FormulaR1C1 = _
            "=MID(CELL(""filename"",RC),FIND(""]"",CELL(""filename"",RC))+1,31)"
    End Sub
     
     

    Всего записей: 134 | Зарегистр. 27-05-2006 | Отправлено: 17:05 09-12-2014
    Открыть новую тему     Написать ответ в эту тему

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