Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Парсинг сайта Поверки СИ
 
Имеется сайт с поверками средств измерений (например счетчики воды) https://fgis.gost.ru/fundmetrology/cm/results
Хотел вытащить данные в виде текст  с этой страничке https://fgis.gost.ru/fundmetrology/cm/results/1-34756749
Но при просмотре кода страницы не увидел данных, отображаемых на веб странице. Но при просмотре кода они там есть.
Помогите вытащить HTML текст в VBA
Код
Sub Аршин()
Dim XMLHTTP As Object
Dim URL$, Txt$

URL = "https://fgis.gost.ru/fundmetrology/cm/results/1-34756749"
Set XMLHTTP = CreateObject("MSXML2.XMLHTTP")

XMLHTTP.Open "GET", URL, False
XMLHTTP.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36"
XMLHTTP.SEND
If XMLHTTP.Status = 200 Then
    Txt = XMLHTTP.responseText
       
    MsgBox Txt 

Else
    MsgBox "Отсутствует соединение..."
End If
Set XMLHTTP = Nothing
End Sub
Функция-макрос для стандартного отклоенния, VBA
 
Добрый день. Нужна функция стандартного отклонения видоизмененная. Нашел на просторах инета. Подскажите почему она "двоит"?
Код
Function СтандОтклон1(Arr)
    Dim x, aCnt&, aSum#, aAver#, tmp#
    For Each x In Arr
        aSum = aSum + x 'вычисляем сумму элементов массива
        aCnt = aCnt + 1 'вычисляем кол-во элементов
    Next x
    aAver = aSum / aCnt 'среднее значение
    For Each x In Arr
        tmp = tmp + (x - aAver) ^ 2 'вычисляем сумму квадратов разницы элементов массива и среднего значения
    Next x
    СтандОтклон1 = Sqr(tmp / (aCnt * (aCnt - 1))) 'вычисляем СТАНДОТКЛОН.Г()
End Function


Изменено: невеДимка Соколов - 26.06.2020 09:12:21 (доп. файл)
При помощи Find осуществить поиск по сцепленным двум столбцам, метод Find VBA
 
Можно ли при помощи Find осуществить поиск по сцепленным двум столбцам?
Снятие выделения в ListBox по событию Click
 
.
при клике на  ListBox2 выделение с  ListBox1 снимается
при клике на  ListBox1 выделение с  ListBox2 НЕ снимается

ListBox1 (1,2,3) - мультиселект
ListBox2 (4,5,6) - одиночная
Изменено: невеДимка Соколов - 14.10.2019 11:01:14
Занести в ListBox разницу двух таблиц в одной книге, VBA, ListBox
 
Не нашел моего примера, есть только сравнение таблиц при одинаковом значении.

На форме имеется два листбокса. На верхнем (Л1) то что уже есть, а на нижнем  (нужно сделать) то что осталось, т.е (Л2-Л1).
Не получается сформировать нижний листбокс.

Код
Option Explicit

'Л1
Dim ЛЛ1 As Worksheet ' Лист
Dim ТЛ1 As ListObject ' Таблица
Dim СЛ1 As ListRow ' Строка

'Л2
Dim ЛЛ2 As Worksheet ' Лист
Dim ТЛ2 As ListObject ' Таблица
Dim СЛ2 As ListRow ' Строка

Sub Добавить()
    Add.Show
End Sub
Sub СформироватьСписки()
    
    Dim a As Range
    Dim b As Range
    
    Set ЛЛ1 = ThisWorkbook.Worksheets("Л1")
    Set ТЛ1 = ЛЛ1.ListObjects("тб_Мое")
    Set ЛЛ2 = ThisWorkbook.Worksheets("Л2")
    Set ТЛ2 = ЛЛ2.ListObjects("тб_Все")
    ' очистка
    Add.lb_all.Clear
    Add.lb_add.Clear
    Add.lb_all.ColumnWidths = "200,700"
    Add.lb_add.ColumnWidths = "200,700"
    ' заполнение верха Листбокса
    For Each СЛ1 In ТЛ1.ListRows
        Add.lb_all.AddItem СЛ1.Range(1)
        Add.lb_all.List(Add.lb_all.ListCount - 1, 1) = СЛ1.Range(2)
    Next СЛ1
    ------------------------------------------------------------------------------- Тут загвоска
    ' заполенние низа Листбокса
    
    For Each СЛ2 In ТЛ2.ListRows
    Set a = ТЛ2.ListColumns.Item(2).Range.Find(СЛ2.Range(2), , , xlWhole)
       
            For Each СЛ1 In ТЛ1.ListRows
            Set b = ТЛ1.ListColumns.Item(2).Range.Find(СЛ1.Range(2), , , xlWhole)
                If Not a Like b Then   ' если не найден артикуул
                    Add.lb_add.AddItem СЛ2.Range(1)
                    Add.lb_add.List(Add.lb_add.ListCount - 1, 1) = СЛ2.Range(2)
                ElseIf СЛ1.Range(2) Like СЛ2.Range(2) Then
                    Exit For
                End If
            
            Next СЛ1
    Next СЛ2

  ---------------------------------------------------------------------------
End Sub
Вытащить из ссылки наименование ячейки
 
Добрый день. Имеется два файла (F1, F2). В первом имеется общи список товаров, а во втором "объединеные группы товаров". В каждом файле по одной умной таблице.
Во втором файле есть второй столбец со ссылками (привязанными) на первый файл. Как вытащить формулой (допускатется создать самому) во второй файл цену товара на каждый предмет.
Во так выглядит код ссылки во втором файле
Код
='D:\[F1.xlsm]СписТов'!B2&" "&'D:\[F1.xlsm]СписТов'!C2&"; "
&'D:\[F1.xlsm]СписТов'!B3&" "&'D:\[F1.xlsm]СписТов'!C3&"; "
&'D:\[F1.xlsm]СписТов'!B6&" "&'D:\[F1.xlsm]СписТов'!C6
(тут 3 товара)
ПС: если как нибудь выцепить их этого кода значения этих ячеек (B2...B5), то через формулу СМЕЩ я бы доделал.
Поменять метод открытия гиперссылок в ексель
 
Можно ли поменять метод открытия гиперссылок в ексель, например, не просто по одному клику, а (как в ворде сделать ) с клавишей ctrl.
Выбор значения из диапазона значений и подстановка в Искомое значение.
 
Добрый день. Пытаюсь внедрить в формулу ВПР для поиска искомого значения несколько вариантов значений
Код
=ВРЕМЯ(ВПР(38;E2:G11;2;0);ВПР(E2-2;E2:G11;3;0)-ВРЕМЯ(F2;G2;)

В функции ВПР число 38 может принимать от 38 до 36( она же E2-2 далее по вормуле). Функция ИЛИ выдает только истина или ложь а как вписать значение не могу додуматься.

Помогите обучить формулу выбирать большее значение из столбца (т.е. если в столбце есть 38,37,36 то выбрать 38, если есть 37,36 то выбрать 37...)

Вместо 38 (или E2-2) надо вставить формулу, только какую?

высотаЧасы:Минуты
408:40
409:40
409:50
3810:04
3710:14
3610:24
3610:34
3410:44
3211:04
3011:14

Изменено: невеДимка Соколов - 28.09.2017 08:21:09
Замена(дополнение) значений, VBA
 
В продолжении темы
"вывод уникальных значений"
Обратно ввести дополнительный значения в строки таблицы

Код
Sub ЗаменаСлов()
    Dim s As String
    Dim avArr, lr As Long
    Dim lLastR As Long
    Dim lToFindCol As Long, lToReplaceCol As Long, lLookAt As Long
lLookAt = 1
lToFindCol = 1
lToReplaceCol = 2
'Получаем с листа Соответствия значения, которые надо заменить в диапазоне
    With ThisWorkbook.Worksheets("Март16")
        lLastR = .Cells(.Rows.Count, 1).End(xlUp).Row
        avArr = .Cells(1, 11).Resize(lLastR, 5)
    End With
'// дальше не выходит задача((((

'заменяем
    For lr = 1 To UBound(avArr, 1)
        s = avArr(lr, lToFindCol)
        If Len(s) Then 'если значение для замены не пустое
            Worksheets("Март16").Columns(16).Replace s, avArr(lr, lToReplaceCol), lLookAt
        End If
    Next lr
End Sub
В массив данный записал ,  а вот внести эти данные обратно не получется((((

ПС, туговато воспринимаю я массивы, точнее работу с ними.
вывод уникальных значений по двм столбцам, VBA
 
Код
Sub Extract_Unique()
    Dim vItem, avArr, li As Long
    ReDim avArr(1 To Rows.Count, 1 To 1)
    With New Collection
        On Error Resume Next
        For Each vItem In Range("A2", Cells(Rows.Count, 1).End(xlUp)).Value
            'Cells(Rows.Count, 1).End(xlUp) – определяет последнюю заполненную ячейку в столбце А
            .Add vItem, CStr(vItem)
            If Err = 0 Then
                li = li + 1: avArr(li, 1) = vItem
            Else: Err.Clear
            End If
        Next
    End With
    If li Then [E2].Resize(li).Value = avArr
End Sub
Помогите усовершенствовать код. Нужно что бы уникальные значения собираль по двум столбцам а не с одного
Пользовательский формат числа
 
Имееются числа
7,5
10
12,5
15
20
25
Необходимо чтоб при вводе ячейку числа 20 выглядело как 20 без запятых и нулей  лишних, а при вводе в эту же ячейку 12,5 отображалось именно так,  а не 13
Пока имею такой формат  
0,#
Передать номер строки combobox из одной процедуры в другую, VBA EXEL
 
Передать номер строки combobox из одной процедуры в другую.
Загвоздка в том что процедуры с привязанными событиями.
Может есть обход.
Код
Private Sub UserForm_Initialize() ' заполняем список №составов

Dim lin As Integer
lin = 2

    Do Until База_составы.Cells(lin, 1) = ""
        ComboSostav.AddItem База_составы.Cells(lin, 1).Value
    lin = lin + 1
    Loop

End Sub
Код
Private Sub ComboSostav_Change()

Dim стрк As Integer
стрк = 8 '  сюда надо передать из процедуры UserForm_Initialize строку которая выбрана

ListPesok.Clear
ListSheben.Clear
ListOPGS.Clear
ListDobavka.Clear

ListPesok.AddItem База_составы.Cells(стрк, 2).Value
ListSheben.AddItem База_составы.Cells(стрк, 3).Value
ListOPGS.AddItem База_составы.Cells(стрк, 4).Value
ListDobavka.AddItem База_составы.Cells(стрк, 5).Value

End Sub
Обычная сортировка по цвету макросом, VBA EXEL
 
Добрый денек.
С виду простой макрос по сортировке строк по цвету. Записал макрос. Хотел его отредактировать, но возникает ошибка
Код
Option Explicit

Const НАЧстрока = 2
Const ССЫЛКА = 1
Const КОНцикл = 10

Sub СортировкаЦветовки()
    Dim ДиапазонТаблицы As Range
    Dim myWSheet As Integer
    
myWSheet = Worksheets("Основа").UsedRange.Rows.Count
Set ДиапазонТаблицы = Worksheets("Основа").Range(Cells(НАЧстрока, ССЫЛКА), Cells(myWSheet, КОНцикл))

    With ActiveWorkbook.Worksheets("Основа").Sort
    .SortFields.Clear
    .SortFields.Add(ДиапазонТаблицы, xlSortOnCellColor, xlAscending, , xlSortNormal).SortOnValue.Color = RGB(120, 50, 180)
    .SortFields.Add(ДиапазонТаблицы, xlSortOnCellColor, xlAscending, , xlSortNormal).SortOnValue.Color = RGB(250, 0, 0)
    .SortFields.Add(ДиапазонТаблицы, xlSortOnCellColor, xlAscending, , xlSortNormal).SortOnValue.Color = RGB(100, 50, 0)
    .SortFields.Add(ДиапазонТаблицы, xlSortOnCellColor, xlAscending, , xlSortNormal).SortOnValue.Color = RGB(250, 250, 0)
    .SortFields.Add(ДиапазонТаблицы, xlSortOnCellColor, xlAscending, , xlSortNormal).SortOnValue.Color = RGB(250, 250, 250)
    .SortFields.Add(ДиапазонТаблицы, xlSortOnCellColor, xlAscending, , xlSortNormal).SortOnValue.Color = RGB(0, 180, 250)
    .SortFields.Add(ДиапазонТаблицы, xlSortOnCellColor, xlAscending, , xlSortNormal).SortOnValue.Color = RGB(0, 180, 50)
    .SetRange ДиапазонТаблицы
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
    End With
End Sub

Знаю что СНОВА У МЕНЯ банальная ошибка, но не вижу.(((
Определить выбор диапазона ячеек, VBA EXEL
 
Я дико извиняюсь за свою невнимательность . Помогите мне.
почему diop1 не получат свой диапазон ?
Код
Dim stroka1 As Range
Dim stroka2 As Range
Dim strokaSR1 As Range
Dim strokaSR2 As Range
Dim diop1 As Range
Dim diop2 As Range

   Set stroka1 = Worksheets(1).Cells(1, 1)
   Set stroka2 = Worksheets(1).Cells(1, 15)
   Set strokaSR1 = Worksheets(1).Cells(2, 1)
   Set strokaSR2 = Worksheets(1).Cells(2, 5)

  
   diop1 = Range(stroka1, stroka2) ' тут мне VBA ругается
   diop2 = Range(strokaSR1, strokaSR2)

 '/// Мне нужно чтоб к диапазону от stroka1 до stroka2(без прерываний) применялись следующ. свойства
With diop1
            .HorizontalAlignment = xlCenter 'выравнивание по горизотали
            .VerticalAlignment = xlCenter 'выравнивание по вертикали
            .WrapText = False 'перенос текста
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
            .Font.Name = "Times New Roman"
            .Font.FontStyle = "обычный" 'полужирный курсив
            .Font.Size = 14
End With

ПС. еще раз извините за невнимательность
Изменено: невеДимка Соколов - 07.02.2016 09:29:01
Сортировка в VBA, VBA EXEL
 
Помогите. Я уже сам свою ошибку найти не могу.

Код
Sub Сортировка(ByVal ИмяЛиста As String)
    Dim ДиапазонТаблицы As Range
Set ДиапазонТаблицы = Worksheets(ИмяЛиста).Range("O3").CurrentRegion
    With Worksheets(ИмяЛиста).Sort
        .SortFields.Clear
        .SortFields.Add Key:=ДиапазонТаблицы.Columns(16), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SortFields.Add Key:=ДиапазонТаблицы.Columns(17), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SortFields.Add Key:=ДиапазонТаблицы.Columns(18), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SortFields.Add Key:=ДиапазонТаблицы.Columns(15), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SetRange ДиапазонТаблицы '.SetRange ActiveSheet.UsedRange ///.SetRange Range("A1").CurrentRegion
        .Orientation = xlSortRows 'XlSortOrientation (xlSortRows, xlSortColumns, xlTopToBottom)Ориентация сортировки
        .Header = xlNo 'Задает, содержит ли первая строка заголовочную информацию; по умолчанию используется значение xlNo; если нужно, чтобы Excel определил это самостоятельно, укажите xlGuess
        .MatchCase = False 'True - сортировка с учетом регистра букв, False - без учета; для сводных таблиц не используется
        .SortMethod = xlPinYin 'Тип сортировки.Некоторые из этих констант могут быть недоступны в зависимости от поддержки языков например, "Английский (США)"), выбранных или установленных. Может быть одно из следующих значений XlSortMethod: 1)xlStroke.Сортировка по количеству штрихов в каждом знаке. 2)xlPinYin.Порядок сортировки для символов, основанный на фонетике китайского языка
        .Apply '/**//*//**//* тут  выдает ошибку
    End With
End Sub
Подробно макрос в файле
Не копируется значение на другой лист, VBA
 
Не могу понять почему не копируется значение ячейки во втором столбце второго листа в первый столбец первого листа
ПС. оказывается запускал не с того листа.
Код
Sub ЛистСоответствия()
Dim i As Integer
Dim lLastRow As Integer
Dim k As Integer
Dim Наимен As String

'последняя строка в столбце 2 листа 2
lLastRow = Worksheets(2).Cells(Rows.Count, 2).End(xlUp).Row
'последняя строка в столбце 1 листа 1
k = Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row + 1

    For i = 3 To lLastRow
    Наимен = Worksheets(2).Cells(i, 2).Value
         If Worksheets(2).Cells(i, 2).Value <> Worksheets(2).Cells(i + 1, 2).Value Then ' доделал)))
             Worksheets(1).Cells(k, 1) = Наимен
          k = k + 1
        End If
    Next i
End Sub
Изменено: невеДимка Соколов - 25.01.2016 13:44:29
Функция ОКРУГЛЕНИЯ математическое, VBA EXEL
 
вот функция которая возвращает правльное округление
Код
Function фунОКРУГЛ(Число As Single, Optional DecPlaces As Integer = 1) As Single
'Число = CDbl(CStr(Число))
If DecPlaces >= 0 Then
    If Round(Число, DecPlaces) = Число Then фунОКРУГЛ = Число: Exit Function
Else
    If Int(Число * 10 ^ DecPlaces + 0.5) = Число * 10 ^ DecPlaces Then фунОКРУГЛ = Число: Exit Function
End If
фунОКРУГЛ = -Sgn(Число) * Int(-Abs(Число) * 10 ^ DecPlaces) / 10 ^ DecPlaces
End Function
Тупой вопрос (недогоняю, наверное опять логика страдает у меня)
Как ее использовать?! ( приведу часть своего кода)
Код
Sub ДобавСтрок()

    Dim строк As Integer
    Dim ОтпускНорм As Single
    Dim ЧислоСтрок As Integer  
    Dim ПрочнМин As Single
    Dim ПрочнСред As Single
    Dim ПрочнТребуем As Single
        
    строк = НАЧАЛcТРОКа
    
' тут операторы условия ......

    ОтпускНорм = Cells(строк, КОЛОНоТПУСК).Value ' допустим что значение возвращено 10,3333333

    Call фунОКРУГЛ(ОтпускНорм) ' тут оно говорит что 10,3
' А ДАЛЬШЕ ЧТО? сразу  записывать в ячейку?Но у меня там не все значения посчитаны!

    ЧислоСтрок = Worksheets(1).Cells(строк, КОЛОНпРОЧ).CurrentRegion.Rows.Count    
    ПрочнМин = WorksheetFunction. Min(Range(Cells(строк - ЧислоСтрок + 1, КОЛОНпРОЧ), Cells(строк, КОЛОНпРОЧ)))  
    ПрочнСред = WorksheetFunction. Average(Range(Cells(строк - ЧислоСтрок + 1, КОЛОНпРОЧ), Cells(строк, КОЛОНпРОЧ)))   
    ПрочнТребуем = 3.99 * Cells(строк - ЧислоСтрок + 1, КОЛОНоТПУСКнОРМ).Value

    ' записываем в ячейки
    Cells(строк - ЧислоСтрок + 1, КОЛОНоТПУСКнОРМ).Value = ОтпускНорм
  
    Cells(строк - ЧислоСтрок + 1, КОЛОНшТУК).Value = ЧислоСтрок
    Cells(строк - ЧислоСтрок + 1, КОЛОНпРОЧмИН).Value = ПрочнМин 
    Cells(строк - ЧислоСтрок + 1, КОЛОНпРОЧсРЕДН).Value = ПрочнСред 
    Cells(строк - ЧислоСтрок + 1, КОЛОНпРОЧтРЕБУЕМ).Value = ПрочнТребуем 
               
                    
End Sub
Изменено: невеДимка Соколов - 18.01.2016 20:20:14
VBA свойство CurrentRegion. Подсчет строк
 
Прошло много времяни. И вот я что то начал соображать.
Загвоска: нужно определить диапазон CurrentRegion, а он не считает
Нужно чтоб "rgn" возвратило число строк. Уже 3 часа читаю ничего не получается
Код
Sub ДобавСтрок() 
    Dim строк As Integer
    Dim rgn As Range
    строк = НАЧАЛcТРОКа
     
        Do While (Cells(строк, КОЛОНпРОЧ).Value) <> Empty ' пока не пустая ячейка
        '(Not (IsEmpty(Cells(строк, КОЛОНпРОЧ).Value))) //И ЯЧЕЙКА And Cells(строк + 1, КОЛОНПРОЧ)
             
            Do While (Cells(строк + 1, КОЛОНиЗГОТОВ).Value - Cells(строк, КОЛОНиЗГОТОВ).Value) >= 7 Or _
            Cells(строк, КОЛОНнЕДЕЛ).Value > Cells(строк + 1, КОЛОНнЕДЕЛ).Value Or _
            Cells(строк, КОЛОНиЗДЕЛ).Value <> Cells(строк + 1, КОЛОНиЗДЕЛ).Value
                Rows(строк + 1).Insert ' вставляем пустую строку
                Rows(строк + 1).ClearContents ' очищаем значения(пусто делаем)
                 
'Вот тут ЗАГВОСКА.
                Set rgn = Worksheets(1).Cells(строк, КОЛОНпРОЧ).CurrentRegion.Rows.Count 'считает количество строк'
                
                Cells(строк - rgn + 1, КОЛОНкЛАССБЕТ).Value = "B" & Cells(строк, КОЛОНбЕТОН).Value
                
                Cells(строк, КОЛОНоТПУСКНОРМ).Value = Cells(строк, КОЛОНоТПУСК).Value
                 
            строк = строк + 2
            Loop
             
        строк = строк + 1
        Loop
         
End Sub
Редактор VBA: вывести список ВСЕХ классов
 
все занют комбинацию клавиши Ctrl + Space - Вывести список всех функций, методов, констант, свойств и - Для завершения набора имени
смотрим файл КонтрлСП. там показан список из классов (F2 VBA) . Я так понял что Ctrl + Space выводит список из класса  <globals> (см файл глобал)

Вопрос как при помощи сочетании клавиши вывести весь список классов (например Font не выводиться ни как)

Рисунки удалены: превышение допустимого размера вложения [МОДЕРАТОР]
Вставка строки по формуле + авто подсчет диапазона
 
Имеются много данных.эти данные необходимо посчитать по формулам и записать результат. Я формулами добился только расчета. Как применяя формулы автоматически добавлять результат в нужном месте.
У меня 3 загвоздки:
1. как автоматически вставлять строку перед началом нового наименования ( синий шрифт)
2. как заставить эксель самому определять диапазон для расчета( красный шрифт)
3. ( зеленый шрифт) возможно вытекает из п.2

Задача этого файла: Брать данные из столбцов "Ручной журнал" --> определять "продолжительность"( сколько строк) подсчета( это максимально одна неделя, т.е. пон, ... пят, суб). я смог вывести только чтоб мне эксель писал где именно заканчивается неделя и начинается новая, но заставить автоматически выводить результат - ума не приложу

Прошу помощь  или  дать направление --- не прошу писать громозкие формулы но если есть похожая фнкция которая поможет облегчить оформление буду благодарен.
ПС: Прилагаю файл. Там 3 наименования по наименованию "ФБС" я вручную подсчитал как должно быть( залилвка зеленая)
Спасибо всем кто-чем поможет.
Изменено: невеДимка Соколов - 05.12.2015 23:33:49
Страницы: 1
Наверх