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
Добрый день. Нужна функция стандартного отклонения видоизмененная. Нашел на просторах инета. Подскажите почему она "двоит"?
Код
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
Не нашел моего примера, есть только сравнение таблиц при одинаковом значении.
На форме имеется два листбокса. На верхнем (Л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). В первом имеется общи список товаров, а во втором "объединеные группы товаров". В каждом файле по одной умной таблице. Во втором файле есть второй столбец со ссылками (привязанными) на первый файл. Как вытащить формулой (допускатется создать самому) во второй файл цену товара на каждый предмет. Во так выглядит код ссылки во втором файле
В функции ВПР число 38 может принимать от 38 до 36( она же E2-2 далее по вормуле). Функция ИЛИ выдает только истина или ложь а как вписать значение не могу додуматься.
Помогите обучить формулу выбирать большее значение из столбца (т.е. если в столбце есть 38,37,36 то выбрать 38, если есть 37,36 то выбрать 37...)
Вместо 38 (или E2-2) надо вставить формулу, только какую?
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
В массив данный записал , а вот внести эти данные обратно не получется((((
ПС, туговато воспринимаю я массивы, точнее работу с ними.
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 из одной процедуры в другую. Загвоздка в том что процедуры с привязанными событиями. Может есть обход.
Код
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
Я дико извиняюсь за свою невнимательность . Помогите мне. почему 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
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
Не могу понять почему не копируется значение ячейки во втором столбце второго листа в первый столбец первого листа ПС. оказывается запускал не с того листа.
Код
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
вот функция которая возвращает правльное округление
Код
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
Прошло много времяни. И вот я что то начал соображать. Загвоска: нужно определить диапазон 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
все занют комбинацию клавиши Ctrl + Space - Вывести список всех функций, методов, констант, свойств и - Для завершения набора имени смотрим файл КонтрлСП. там показан список из классов (F2 VBA) . Я так понял что Ctrl + Space выводит список из класса <globals> (см файл глобал)
Вопрос как при помощи сочетании клавиши вывести весь список классов (например Font не выводиться ни как)
Имеются много данных.эти данные необходимо посчитать по формулам и записать результат. Я формулами добился только расчета. Как применяя формулы автоматически добавлять результат в нужном месте. У меня 3 загвоздки: 1. как автоматически вставлять строку перед началом нового наименования ( синий шрифт) 2. как заставить эксель самому определять диапазон для расчета( красный шрифт) 3. ( зеленый шрифт) возможно вытекает из п.2
Задача этого файла: Брать данные из столбцов "Ручной журнал" --> определять "продолжительность"( сколько строк) подсчета( это максимально одна неделя, т.е. пон, ... пят, суб). я смог вывести только чтоб мне эксель писал где именно заканчивается неделя и начинается новая, но заставить автоматически выводить результат - ума не приложу
Прошу помощь или дать направление --- не прошу писать громозкие формулы но если есть похожая фнкция которая поможет облегчить оформление буду благодарен. ПС: Прилагаю файл. Там 3 наименования по наименованию "ФБС" я вручную подсчитал как должно быть( залилвка зеленая) Спасибо всем кто-чем поможет.