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

Страницы: 1 2 3 4 След.
Определить верхнюю границу массива.
 
Рано задал вопрос на форуме, ответ простой: msgbox ubound (q(1)) или ubound(q(2)) - если размер диапазонов одинаковый, либо циклом, если разный.

Остался другой вопрос: это трехмерный массив или все еще двухмерный, подскажите?  
Изменено: НСС - 28.03.2024 22:04:25
Определить верхнюю границу массива.
 
Здравствуйте. Есть такой массив:
Код
    For b = 1 To 2
        
            Select Case b
                 Case 1
                      rnge = "A1:A30"
                 Case 2
                      rnge = "B1:B30"
            End Select
            
            q(b) = Range(rnge).Value
    Next b

Получаем:

q(1)(1,1) = значение 1
q(1)(1,2) = значение 2
...
q(1)(1,30) = значение 30

q(2)(1,1) = значение 1
q(2)(1,2) = значение 2
...
q(2)(1,30) = значение 30

Вопрос: как получить верхнюю границу массива? Ubound(q) выведет 2, а нужно 30. Не могу правильно записать функцию Ubound и какой это массив - трехмерный?

msgbox ubound(q.....)?
Ушел из жизни Сергей (Serge_007)
 
Мои соболезнования близким! Частенько через поиск на его сайт заходил за решениями. Слишком рано, еще достаточно молодой, жаль....
С помощью функции Format преобразовать числа в дату.
 
БМВ, ваш слэш помог. Спасибо.
Цитата
написал:
вы хотите получить текст или дату , которая будет потом отформатирована?
Все равно. Это только для визуального информирования пользователя.  
С помощью функции Format преобразовать числа в дату.
 
Всем привет. Подскажите, как поставить точку. Либо, если возможно, другим способом.
Код
Cells(35 + j, 2).Value = Format(j, "'00.") & Format(Z, "00") & ".24"
Получаем 14,03.24, а надо 14.03.24.  
Скопировать код листа в другие листы книги.
 
Здравствуйте. Как событие одного листа скопировать в события всех остальных листов? Например, такой код:
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveCell.Calculate
End Sub
Изменено: НСС - 12.12.2023 00:48:29
Можно ли есть лапшу, провонявшуюся гарью?
 
Цитата
написал:
Если не ошибаюсь, то Игорь Гончаренко на другом форуме модератор, Так вот если он тут себе позволял то, за что его забанили
Если про бан правда, то моя вера в справедливость начинает оживать.  
Включаем прокрутку колёсиком мышки для ListBox и ComboBox на x86 и x64
 
Супер! Спасибо огромное! Как альтернатива кнопкам клавиатуры: pageup и pagedown (они работают по умолчанию, кто не знал). Видео в ютуб не доступно, его нет, но итак все предельно просто и понятно.
Изменено: НСС - 28.07.2023 12:21:05
Ошибка при записи в массив из неактивного листа.
 
Все понял. Спасибо.  
Ошибка при записи в массив из неактивного листа.
 
New, спасибо! Не могли бы вы объяснить, почему следующий код работает без оператора With... End with:
Код
for i = 1 to LR
 a(i) = Sheets("DB").Range("A" & i).Value
next i
Изменено: НСС - 25.07.2023 02:18:41
Ошибка при записи в массив из неактивного листа.
 
Здравствуйте. Не могу понять, что не так делаю. Подскажите пожалуйста.
Код
dim baseArray(), LR&

LR = Sheets("DB").Cells(Rows.Count, 2).End(xlUp).Row

redim baseArray(1 to LR)

For i = 1 To ubound(baseArray)
    baseArray(i) = Sheets("DB").Range(Cells(i, 2), Cells(i, 4))
Next i

Этот код привязан к кнопке, кнопка находится на форме. Форма запускается с "Листа1", а запись в массив должна производиться с другого листа "DB".

Суть в том, что ссылаясь на диапазон неактивного листа, появляется ошибка: Run-Time Error 1004. Application-defined or object-defined error. Если же я активирую лист DB и запускаю код, то все работает (т.е. запускаю код с листа DB). Причем в коде есть и другие массивы, они работают, ссылаясь на неактивный лист DB, типа:
Код
for i = 1 to LR
 a(i) = Sheets("DB").Range("A" & i).Value
next i

Изменено: НСС - 25.07.2023 01:38:39
Кэширование при парсинге сайта, Всегда одно и то же значение, как обойти кэширование.
 
Игорь, большое спасибо.  
Кэширование при парсинге сайта, Всегда одно и то же значение, как обойти кэширование.
 
Здравствуйте. Есть такой пример из интернета:
Код
Sub dollar()

Dim textHTTP As Object
Dim URL, Txt, Kurs As String
Dim posUSD, k As String

URL = "https://www.cbr.ru"
Set textHTTP = CreateObject("MSXML2.XMLHTTP")

textHTTP.Open "GET", URL, False
textHTTP.Send
'Ждем загрузку сайта статус 200
If textHTTP.Status = 200 Then
'Получаем текст сайта в переменной txt
    Txt = textHTTP.responseText
'Находим позицию строки USD
    posUSD = InStr(1, Txt, "USD")
    k = InStr(posUSD, Txt, "right mono-num")
    Kurs = Mid(Txt, k + 16, 8)
    MsgBox "Куср доллара ЦБ: " & Kurs
Else
    MsgBox "Нет отклика с сайта"
End If
Set textHTTP = Nothing

End Sub

И вот он выдает всегда один и тот же результат. Даже, если я меняю URL, меняю значения переменных. Повторное открытие книги, с уже измененным URL не помогает. Это какое-то кэширование? Как его обойти?  
Найти значение в диапазоне, соответствующее текущей дате.
 
Спасибо за подсказки-решения. Вечером протестирую.  
Изменено: НСС - 15.07.2022 11:52:05
Найти значение в диапазоне, соответствующее текущей дате.
 
Спасибо. Оба варианта рабочие. Немного изменил диапазон, добавил 31-ое число, какое в этом случае будет решение? Как расширить диапазон в формуле?



Изменил формулы на:
Код
=ИНДЕКС(A:L;СУММ(ЕСЛИ(C2:L9=ДЕНЬ(СЕГОДНЯ());СТРОКА(C2:L9)))+1;СУММ(ЕСЛИ(C2:L9=ДЕНЬ(СЕГОДНЯ());СТОЛБЕЦ(C2:L9))))
и
Код
=СУММЕСЛИ(C2:L8;ДЕНЬ(СЕГОДНЯ());C3:L9)
Правильно? Вроде работает.
Изменено: НСС - 14.07.2022 12:32:57
Найти значение в диапазоне, соответствующее текущей дате.
 
Здравствуйте. Необходимо найти значение (вывести его в определенную ячейку), находящееся под текущей датой (даты меняются, соответственно и значения под ними тоже). Не смог разобраться с Индекс и Поискпоз. Подскажите, как решить эту задачу.

Сравнение слов (строк) в ячейках.
 
БМВ, вот спасибо. Это я и хотел услышать, в качестве подтверждения. То есть эксель сам перебирает каждый символ при бинарном или текстовом сравнении ячеек. Делал сортировку по алфавиту в vba по шаблону и случайно наткнулся на такое упрощение.  
Сравнение слов (строк) в ячейках.
 
Здравствуйте. Подскажите, следующее:

В двух ячейках два слова или буквосочетания, неважно:
Абтыш
Абуба
Пишу два условия и получаю результаты:
1. =ЕСЛИ(I2>I1;"Yes";"No") → Yes.
2. =ЕСЛИ(I2<I1;"Yes";"No") → No.

Как сравниваются эти буквосочетания? Почему второе значение ячейки больше значения в первой?
Каждый символ имеет свой код. И сравнение происходит посимвольно, верно? И как только код одного , отличного от других, символа принимает код больше, то выполняется первое условие, и неважно, какие кодовые значение имеют другие, последующие символы верно?

Коды для символов:

Абтыш 192 225 242 251 248
Абуба  192 225 243 225 224 → Yes

В инете скудная, общая информация, не смог найти ответ.  
Изменено: НСС - 02.05.2022 23:29:40
Как средствами vba нажать кнопку на сайте
 
А я разве писал, что это плохой сайт? Это ответ был агрессивному чудику в парике, который часто дает ответы типа: сами разбирайтесь. Вот я его и спросил, зачем тогда этот форум нужен!!!!!
Как средствами vba нажать кнопку на сайте
 
Удаляйте все. Я не знаю, как HTML код скопировать из браузера. Он выделяется только по строчно, а не весь. Попросил помощи безуспешно.  
Как средствами vba нажать кнопку на сайте
 
Юрий М, да как бы и не растягивал. Ссылку на сайт не могу дать. Он локальный, на работе, поэтому картинку дал, думая, что она как-то поможет в решении.  
Как средствами vba нажать кнопку на сайте
 
, спасибо за исчерпывающий ответ. Я думал, на этом форуме могут помочь. А "начинайте разбираться" подходит для абсолютно любой темы форума. Зачем он тогда нужен?
Как средствами vba нажать кнопку на сайте
 


Здравствуйте. Не стал новую тему создавать с таким же названием. Не знаю, правильно это или нет.
В общем вопрос: как нажать на кнопку "Вход"?  
<input type="image" name="ctl00$Main$btn_OK" id="ctl00_Main_btn_OK" src="Pics/btn_Ok.png" style="border-width:0px;">
Совсем не разбираюсь в HTML и в DOM. Подскажите пожалуйста, в каком направлении двигаться, что делать?  
Изменено: НСС - 26.01.2022 22:54:50
Перейти на другой элемент коллекции в цикле For Each по условию.
 
МатросНаЗебре, ясно. Спасибо. Подскажите, в моем случае, для сокращения кода, возможно циклом сделать заполнение словарей? Вернее создание словарей: dic1, dic2, dic3 и тд. и также через цикл заполнить их ячейками из диапазонов, которые тоже будут определяться циклами или циклом? Попробую сам это это сделать. Так то задача решена, спасибо! Осталось только мне самому код сделать нормальным, а не таким избыточным, каким я его нагородил.  :)  
Изменено: НСС - 29.12.2021 10:25:52
Перейти на другой элемент коллекции в цикле For Each по условию.
 
Здравствуйте. Использовал вариант от МатросНаЗебре:
Код
    Dim dic As Object    Set dic = CreateObject("Scripting.Dictionary")
 
    Dim a As Range
    For Each a In Range("A1:C1")
        If a <> 0 Then dic.Item(a.Address(0, 0)) = 0
    Next
    Dim v As Variant
    For Each v In dic.Keys
        Set a = Range(v)
        'Ваши действия
        Debug.Print a.Value
    Next
Задачу решить удалось. Код получился громоздким у меня, т.к. я не достаточно хорошо разбираюсь в vba:
Код
    Set dic1 = CreateObject("Scripting.Dictionary")
    Set dic2 = CreateObject("Scripting.Dictionary")
    Set dic3 = CreateObject("Scripting.Dictionary")
    Set dic4 = CreateObject("Scripting.Dictionary")
    Set dic5 = CreateObject("Scripting.Dictionary")
......
For Each a In Range("A1:C1")
        If a <> 0 Then dic1.Item(a.Address(0, 0)) = 0
    Next
        For Each b In Range("A2:C2")
            If b <> 0 Then dic2.Item(b.Address(0, 0)) = 0
        Next
            For Each c In Range("A3:C3")
                If c <> 0 Then dic3.Item(c.Address(0, 0)) = 0
            Next
                For Each d In Range("A4:C4")
                    If d <> 0 Then dic4.Item(d.Address(0, 0)) = 0
                Next
                    For Each e In Range("A5:C5")
                        If e <> 0 Then dic5.Item(e.Address(0, 0)) = 0
                    Next
.......
    For Each v1 In dic1.Keys
        Set a = Range(v1)
            For Each v2 In dic2.Keys
                Set b = Range(v2)
                    For Each v3 In dic3.Keys
                        Set c = Range(v3)
                            For Each v4 In dic4.Keys
                                Set d = Range(v4)
                                    For Each v5 In dic5.Keys
                                        Set e = Range(v5)

...... Здесь требуемые расчеты и результат

Next:Next:Next:Next:Next:Next:Next........
Все работает. Хотелось бы сократить код макроса. Подскажите, что означает условие: If a <> 0 Then dic.Item(a.Address(0, 0)) = 0, а именно "=0". Нулевая позиция элемента объекта Dictionary? Подобного примера в инете я не нашел.  
Перейти на другой элемент коллекции в цикле For Each по условию.
 
Mershik,спасибо за подсказку. Чуть позже вернусь к этой теме, если не справлюсь.
Изменено: НСС - 27.12.2021 10:01:09
Перейти на другой элемент коллекции в цикле For Each по условию.
 
Mershik, неправильно выразился. Пусть это будет диапазон. Как уйти от излишнего перебора по условию. Если А1=0, то необходимо перейти ко второму элементу диапазона и присвоить его значение переменной а, если и второй элемент диапазона равен 0 (В1), то присвоить значение переменной а = С1, не доходя до Next и только потом перейти на перебор второго диапазона A2:C2. Просто если будет тысяча таких циклов, то Эксель зависнет.  
Изменено: НСС - 27.12.2021 09:38:11
Перейти на другой элемент коллекции в цикле For Each по условию.
 
Здравствуйте. Подскажите, как можно пропустить один элемент коллекции и перейти к другому в цикле For Each по условию?
Код
For Each a in Range ("A1:C1")
If a = 0 then ....
Next
Вот после then необходимо, чтобы ссылка переменной a, при А1 = 0, была на B1, если B1 = 0, тогда на C1. Как это сделать?

Более подробно для понимания вопроса:
Код
For Each a in Range ("A1:C1")
For Each b in Range ("A2:C1")

Next:Next
Цель избежать излишнего перебора, если хотя бы один элемент равен 0.
Изменено: НСС - 27.12.2021 09:29:26
Условие для поиска максимального значения в ячейках, в которых встречаются буквенные символы.
 
Спасибо! И привет  ;)  Иногда забываю.  
Условие для поиска максимального значения в ячейках, в которых встречаются буквенные символы.
 
Пример, в ячейках значения вида: 5\3 5\2 6\3 9\2 7\2. Максимальное значение необходимо найти в цифрах до обратного слэша. Использую формулу массива {=МАКС(ЗНАЧЕН(ЛЕВСИМВ(C5:G5;1)))}. Максимальное значение из 5, 5, 6, 9 и 7 = 9.

Задача: найти максимальное значение вот в таком примере: 5\3 5\2 B\3 9\2 7\2. Здесь тоже 9 максимум, но каким условием его найти?
И подскажите, как найти максимальное значение если, допустим, до слэша все цифровые символы, но встречаются и однозначные, и двухзначные и трех, вида:
55\3 5\2 66666\3 9\2 77\2
Страницы: 1 2 3 4 След.
Наверх