Здравствуйте, в одном из последних моих вопросов был совет начать работать с массивами. Вот уже на первом этапе возникла проблема - Как создать Массив, используя имя таблицы?
Sub io()
Dim v, x 'Объявление и инициализация массива Dim, Private, Public, ReDim, Static https://msdn.microsoft.com/RU-RU/library/office/gg251320.aspx
' но не указыван тип? https://msdn.microsoft.com/ru-ru/library/office/gg251750.aspx
With Sheets("СПБ") ' 'Оператор With используется для указания объекта, с которым мы будем работать.
'Здесь Лист СПБ. Sheets это вроде коллекция?
v = .Range(.[A3], .Cells(.UsedRange.Rows.Count, "R")).Value ' массив таблицы - там таблица от A до R
'квадратные скобки А3
'Свойства CurrentRegion и UsedRange очень полезны, когда программа работает с диапазонами, размерами которых Вы не можете управлять.
' Мы не знали колличство строк поэтому вместо строк пишем .UsedRange.Rows.Count?
'правда это была инфа из "MS Office. Руководство программиста по Visual Basic для MS Office 97" http://mf.grsu.by/UchProc/konspekt/VBA/ch02/ch04/ch03
ReDim x(1 To UBound(v), 1 To 18) 'Меняем размер массива?
End With
End Sub
Но почему в этом примере не дают таблице имя и не создают массив по имени таблицы?
Возник вопрос. Вообще можно создавать массивы указывая не конкретные ячейки, а имя таблицы? По логике, если для ComboBox можно указать имя, значит и для массива должна быть возможность.
Здравствуйте, знаю что подобные вопросы поднимались не раз. По поиску есть результаты, например, Аналог формулы ИНДЕКС в VBA в которой Казанский советовал "Функции ИНДЕКС, ПОИСКПОЗ и многие другие доступны в VBA:"
Код
Sub Макрос7()
i = Application.Match(Cells(23, 1), Range("A2:A20"), 0)
j = Application.Match(Cells(23, 2), Range("B1:G1"), 0)
Cells(24, 1).Value = Application.Index(Range("B2:G20"), i, j)
End Sub
Здесь пробовал гуглить "Application.Match", чтобы понять что оно делает, но информации на русском почти не нашел. Дальнейшие поиски
Скрытый текст
На одном форуме упоминалась тема "Синтаксис функции Match - VBA" с примером
Но и там я узнал только, что: Пример относительной ссылки (указывается смещение относительно выбранной ячейки ) записывается
Код
ActiveCell.Offset(4, 2).Range("A1").Select
На другом форуме к вопросу "В таблице нужно найти определенное значение и перенести значение ячейки, которая находится через одну справа в этой же строке в другой файл excel в определенное место." советуют
Код
Sub sieg()
Windows("Книга1").Activate 'переходим к файлу книга 1
x = InputBox("введите искомое значение") 'делаем запрос какое нужно искать значение
c = Cells.Find(What:=x).Column ' определяем номер столбеца в котором нужное значение
r = Cells.Find(What:=x).Row 'определяем номер строки в котором нужное значение
f = Cells(r, c + 2).Value 'запоминаем значение ячейки через одну справа от искомой
Windows("Книга2").Activate 'переходим к файлу книга2
Cells(2, 2).Value = f 'вставляем в ячейку с адресом 2,2 нужное значение
End Sub
Более-менее осознал. По аналогии для моего случая можно:
Искать через Finf точно так же определять номер столбца и строки
Смещаться, используя Offset , и подставлять то значение ячейки в Label
Но остается вопрос какой способ менее громоздкий? этот или с использованием "Application.Match" ведь так и не понял что он делает.
К чему стремлюсь В примере ComboBox2 берет значения колонки "Имя" в таблице "Список", а в Label4 подставляем соответствующее значение из колонки "Статус" той же таблицы.
Имеется ComboBox и TextBox Нужно, чтобы TextBox отображался только при определенных значениях в ComboBox Самый банальный вариант выглядит так
Код
Private Sub ComboBox3_Change()
If ComboBox3 = "Начисление" Then
TextBox1.Visible = True
ElseIf ComboBox3.Value = "Траты" Then
TextBox1.Visible = True
ElseIf ComboBox3.Value = "Отпуск" Then
TextBox1.Visible = True
Else
TextBox1.Visible = False
End If
End Sub
Хотел упростить написание, ведь условий может быть множество. В некоторых примерах пишут о записях вида
Код
If arg1 = "someText" OR "SomeOtherText"
Но если я пишу
Код
If ComboBox3 = "Начисление" Or "Отпуск" Then
TextBox1.Visible = True
Else
TextBox1.Visible = False
End If
то получаю ошибку Run-time error 13 Type mismatch Изменение на ComboBox3.Value не помогает. Или лучше это делать с помощью Case?
Добро время суток. Никак не могу понять как вставлять справа от заполняемой ячейки Таким макросом записываю дату из Lable8,
Код
Private Sub CommandButton1_Click()
' определяем последнюю заполненную ячейку в столбце А
' и смещаемся на одну ячейку вниз, чтобы получить незаполненную ячейку
Dim ra As Range
Set ra = Range("A" & Rows.Count).End(xlUp).Offset(1)
ra = Label8
End Sub
Он вставляет по нажатию кнопки дату из lable8 в лист "История" (так как его активным делаю) . Как в добавок к этому записывать рядом выбранное в форме Имя (из ComboBox1.Value) ?
П.с Если можно, подскажите еще как прикрепить запись к листу. "История" Не могу правильно вставить Worksheets.
Вычитание из числа двух формул с рандом. коэффициентом, каждое вычитание в новой строке,, Из числа вычитаются две формулы пока не достигнут 0, каждое вычитаение в новой строке. При достижении 0 вывод текста какая достигла.
Добрые сутки. Случалось у Вас задавать и добрые люди помогали найти решение. Проблемы были банальными, практически из-за незнания базовых формул и отсутствия опыта. Думаю сейчас столкнулся с чем-то поинтереснее, в любом случае не вижу решения и надеюсь на вашу помощь.
Всё так как в заголовке, есть число и есть 2 формулы, содержащие СЛУЧМЕЖДУ. Происходит вычитание, при этом, если число не достигло 0 эти формулы вычитаются еще раз. Это все записывается пошагово и при достижении 0 в конце выводится текст какая из формул его достигла, или обе.
Здравствуйте. Насколько понял без VBA рандомное число генерируется с помощью СЛУЧМЕЖДУ(минимум;максимум). Встала задача, чтобы случайное число зависело от смещения.
Имеется таблица
цифра
текст
получить из неё рандомный текст просто, достаточно указать СЛУЧМЕЖДУ(1;последняя_цифра) и через ВПР получить текст. Это я понимаю, но такая генерация не зависит от смещения. Если генерировать СЛУЧМЕЖДУ(1;последняя_цифра+смещение), то понятное дело мы выйдем из диапазона. Можно ли сделать, чобы при выходе за диапазон шло по второму кругу?
Например, СЛУЧМЕЖДУ выдает 5, а чисел всего 10, смещение задано 15 и в итоге получается 25. В таком случае нужно чтобы он выдал 5.
Полагал сделать обычную генерацию СЛУЧМЕЖДУ(1;последняя_цифра+смещение) в одной ячейки, а конченый результат получать в другой через
Здравствуйте. Вроде и простая задачка, а никак не найду решение. Имеем: Лист, где размещены названия объектов их состояние и количество. Необходимо: на другом листе при вводе названия объекта, чтобы шел поиск в диапазоне столбцов, которым задано имя и в соседние ячейки приписывалось его состояние и количество с первого листа.
Названия объектов в первом листе не дублируется, а вот состояние практически всегда. Желательно без VBA по нему крайне мало знаний.
Здравствуйте. К сожалению слабо знаком с Excel и самому не получается делать, хотя кажется решение доолжно быть не трудным. Обращаюсь за помощью)
Все банально. В таблице имеются наименовния, на этой же строке в другой ячейки числа (например цены)
Требуется, чтобы в"итого Наименование1" складывались числа из ячеек, которые напротив (или в той же строке) где само Наименование1 ) т.е. чтобы одна запись итого складывала все суммы одного товара, а другая другого.
Думал через функцию типа "=СЧЁТЕСЛИ(G2:G26;"Название" " чтобы проверяло в столбце, но она просто складывает найденные, а что дописать (и возможно ли) чтобы складывала числа из соседних ячеек хз)
Для наглядное, наверное, прикреплю файлик. Конечно наиболее интересно решение без макросов, но и от них не откажусь)