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 и какой это массив - трехмерный?
Супер! Спасибо огромное! Как альтернатива кнопкам клавиатуры: pageup и pagedown (они работают по умолчанию, кто не знал). Видео в ютуб не доступно, его нет, но итак все предельно просто и понятно.
Здравствуйте. Не могу понять, что не так делаю. Подскажите пожалуйста.
Код
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
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 не помогает. Это какое-то кэширование? Как его обойти?
Здравствуйте. Необходимо найти значение (вывести его в определенную ячейку), находящееся под текущей датой (даты меняются, соответственно и значения под ними тоже). Не смог разобраться с Индекс и Поискпоз. Подскажите, как решить эту задачу.
БМВ, вот спасибо. Это я и хотел услышать, в качестве подтверждения. То есть эксель сам перебирает каждый символ при бинарном или текстовом сравнении ячеек. Делал сортировку по алфавиту в vba по шаблону и случайно наткнулся на такое упрощение.
В двух ячейках два слова или буквосочетания, неважно:
Абтыш
Абуба
Пишу два условия и получаю результаты: 1. =ЕСЛИ(I2>I1;"Yes";"No") → Yes. 2. =ЕСЛИ(I2<I1;"Yes";"No") → No.
Как сравниваются эти буквосочетания? Почему второе значение ячейки больше значения в первой? Каждый символ имеет свой код. И сравнение происходит посимвольно, верно? И как только код одного , отличного от других, символа принимает код больше, то выполняется первое условие, и неважно, какие кодовые значение имеют другие, последующие символы верно?
А я разве писал, что это плохой сайт? Это ответ был агрессивному чудику в парике, который часто дает ответы типа: сами разбирайтесь. Вот я его и спросил, зачем тогда этот форум нужен!!!!!
Юрий М, да как бы и не растягивал. Ссылку на сайт не могу дать. Он локальный, на работе, поэтому картинку дал, думая, что она как-то поможет в решении.
, спасибо за исчерпывающий ответ. Я думал, на этом форуме могут помочь. А "начинайте разбираться" подходит для абсолютно любой темы форума. Зачем он тогда нужен?
Здравствуйте. Не стал новую тему создавать с таким же названием. Не знаю, правильно это или нет. В общем вопрос: как нажать на кнопку "Вход"? <input type="image" name="ctl00$Main$btn_OK" id="ctl00_Main_btn_OK" src="Pics/btn_Ok.png" style="border-width:0px;"> Совсем не разбираюсь в HTML и в DOM. Подскажите пожалуйста, в каком направлении двигаться, что делать?
МатросНаЗебре, ясно. Спасибо. Подскажите, в моем случае, для сокращения кода, возможно циклом сделать заполнение словарей? Вернее создание словарей: dic1, dic2, dic3 и тд. и также через цикл заполнить их ячейками из диапазонов, которые тоже будут определяться циклами или циклом? Попробую сам это это сделать. Так то задача решена, спасибо! Осталось только мне самому код сделать нормальным, а не таким избыточным, каким я его нагородил.
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? Подобного примера в инете я не нашел.
Mershik, неправильно выразился. Пусть это будет диапазон. Как уйти от излишнего перебора по условию. Если А1=0, то необходимо перейти ко второму элементу диапазона и присвоить его значение переменной а, если и второй элемент диапазона равен 0 (В1), то присвоить значение переменной а = С1, не доходя до Next и только потом перейти на перебор второго диапазона A2:C2. Просто если будет тысяча таких циклов, то Эксель зависнет.
Пример, в ячейках значения вида: 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