Но а если, допустим, мне надо обращаться к обычным подобным переменным? Если переменных подобных очень много. Можно как то обращаться к ним через строку?
Sub test1()
sss = 5
Dim ttt()
ReDim mass_0(10)
ReDim mass(1 To sss)
For s = 1 To sss
jjj = 0
For i = 1 To 10
mass_0(jjj) = i * s
jjj = jjj + 1
Next i
mass(s) = mass_0
Next s
ttt = mass(2)
For iii = 0 To UBound(ttt, 1)
Cells(1+ iii, 1) = ttt(iii)
Next iii
End Sub
Вот сделал по подобию. Но теперь не понимаю как я могу получить данные допустим из второго массива.
Код
Sub test1()
sss = 5
ReDim mass_0(10)
ReDim mass(1 To sss)
For s = 1 To sss
jjj = 0
For i = 1 To 10
mass_0(jjj) = i * s
jjj = jjj + 1
Next i
mass(s) = mass_0
Next s
End Sub
У меня на самом деле массивы не одинаковые. Данные в них разные записываются. Вот допустим как в этом примере.
Добрый день! Помогите пожалуйста как это можно реализовать? Допустим у меня есть 5 переменных массива. Имена у них подобные: массив1, массив2 и т.д. Хочется сделать чтоб запись во все массивы происходила по циклу от 1 до 5. Что-то типа такого:
Код
for i=1 to 5
for r=1 to 10
массив&i(r-1)=r
next r
next i
Добрый день уважаемые форумчане!!! Уже давно работаю в Excel'е, но что-то не могу решить данную задачку, хотя на вид кажется очень простой. Например, нужно ввести даты понедельников октября 2011 года.
Додумался только до того, что бы показывалась дата понедельника недели: =B1-(ДЕНЬНЕД(B1;2)-1) B1 - дата. 1 - номер дня недели.
Private Sub CommandButton1_Click()
Dim i As Long
j = 0
For i = 0 To ListBox.ListCount - 1
If ListBox.Selected(i) Then
Cells(1+ j, 1) = ListBox.List(i, 0)
Cells(1+ j, 2) = ListBox.List(i, 1)
Cells(1+ j, 3) = ListBox.List(i, 2)
Cells(1+ j, 4) = ListBox.List(i, 3)
j = j + 1
End If
Next
End Sub
anvg , что то я не понял как пройтись циклом по свойству? с циклами я хорошо знаком, но чтоб надо было пройтись циклом по свойству, никогда с таким не встречался.
Читал!!!!! Разобарлся пока что только если без мульти выбора:
Код
Private Sub CommandButton2_Click()
With ListBox
Range("A1") = .List(.ListIndex, 0)
Range("B1") = .List(.ListIndex, 1)
Range("C1") = .List(.ListIndex, 2)
Range("D1") = .List(.ListIndex, 3)
End With
End Sub
Всем доброе утро! Интересовал такой же вопрос. Попробовал на своем примере, удалось выгрузить индекс выделенной строки в ячейку:
Код
Private Sub CommandButton2_Click()
With ListBox1
Range("L30") = .ListIndex
End With
End Sub
А теперь хотелось бы получить (допустим выгрузить в какую-либо ячейку) значение первого столбца выделенной ячейки, а лучше конечно значения первого столбца всех выделенных ячеек (если стоит мульти выбор). Не могу разобраться как можно это сделать.
Как я понял, тут три оси по вертикали и одна горизонтальная. Еще один выход построения, это построить допустим две линии по разным осям, а третью построить на одной из оси, только в масштабе, указав масштаб в названии оси.
Const Pi As Single = 3.14
Sub Коэффициент_трансформации()
Dim b As Single
Dim Ew As Single
Sheets("Лист1".ListBox1.Clear
For b = 1.6 To 1.76 Step 0.001
If Range("A1" = 1 Then
Ew = 2 * Pi * 2000 * b * 50 * 0.0001 / Sqr(1)
End If
If Range("A1" = 2 Then
Ew = 2 * Pi * 2000 * b * 50 * 0.0001 / Sqr(2)
End If
If Ew < 75 Then
With Sheets("Лист1".ListBox1
.AddItem
i = .ListCount - 1
.List(i, 0) = b
.List(i, 1) = Ew
End With
End If
Next b
End Sub
У меня по данной задачке еще вот один вопрос возник: Имеется макрос, который вы мне помогли написать:
Код
Const Pi As Single = 3.14
Sub Коэффициент_трансформации()
Dim b As Single
Dim Ew As Single
Sheets("Лист1".ListBox1.Clear
For b = 1.6 To 1.76 Step 0.001
Ew = 2 * Pi * 2000 * b * 50 * 0.0001 / Sqr(2)
If Ew < 75 Then
With Sheets("Лист1".ListBox1
.AddItem
i = .ListCount - 1
.List(i, 0) = b
.List(i, 1) = Ew
End With
End If
Next b
End Sub
Но возникла небольшая проблема. Например для параметра Ew у меня может быть два случая: 1. Если Range("A1" ) = 1, то Ew = 2 * Pi * 2000 * b * 50 * 0.0001 / Sqr(1) 2. Если Range("A1" ) = 2, то Ew = 2 * Pi * 2000 * b * 50 * 0.0001 / Sqr(2)
Если написать данное условие внутри цикла:
Код
Const Pi As Single = 3.14
Sub Коэффициент_трансформации()
Dim b As Single
Dim Ew As Single
Sheets("Лист1".ListBox1.Clear
For b = 1.6 To 1.76 Step 0.001
If Range("A1" = 1 Then
Ew = 2 * Pi * 2000 * b * 50 * 0.0001 / Sqr(1)
If Range("A1" = 2 Then
Ew = 2 * Pi * 2000 * b * 50 * 0.0001 / Sqr(2)
End If
If Ew < 75 Then
With Sheets("Лист1".ListBox1
.AddItem
i = .ListCount - 1
.List(i, 0) = b
.List(i, 1) = Ew
End With
End If
Next b
End Sub
то будет происходить ошибка, не знаю как написать данное условие внутри макроса. Помогите пожалуйста, кто знает решение данной проблемы.
Спасибо Вам большое, разобрался с Вашей помощью, оказывает все просто, присваиваешь i вначале, потом после записи в ячейку к i прибавляется 1. Только что то не получилось с загрузкой в листбокс, загрузился только первый столбик, в чем дело не могу понять.
Добрый День уважаемые форумчане! Пытаюсь изучать VBA в экселе и применять его к своим задачам. Суть вопроса состоит в следующем: Написал макрос цикла для значений от 1,6 до 1,76 с шагом 0,001 и написал формулу которая зависит от этих значений. Вот сам код:
Код
Sub Коэффициент_трансформации()
Dim b As Single
Dim Ew As Single
For b = 1.6 To 1.76 Step 0.001
Ew = 2 * Pi * 2000 * b * 50 * 0.0001 / (2 ^ (1 / 2))
Next b
Cells(1, 1) = b
Cells(1, 2) = Ew
End Sub
Нужно выгрузить сначала все значения b и все значения Ew, соответствующие значениям b в ячейки и так же в листбокс, а потом еще выгрузить строки например так же b и Ew только только когда Ew меньше 75. Данную задачу я сделал с помощью формул в ячейках и потом с помощью условного форматирования окрасил те строки для которых выполняется условие Ew<75. Помогите пожалуйста с данной задачкой. Файл прилагаю.
Извините. да немного перепутал. Допустим речь идет о столбце B. Но данные параметры находятся в ячейках B1, B6, B11, B16, B21, B26. В других ячейках B2, B3 и т.д. находятся какие либо слова, по которым не надо проводить закрашивание листов.
Вот код я изменил немного.
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("B1, B6, B11, B16, B21, B26")) Is Nothing Then
For i = 2 To Sheets.Count
Sheets(i).Tab.ColorIndex = xlNone
Next
For i = 1 To 26
If Not IsEmpty(Cells(i, 2)) Then
Sheets(Cells(i, 2).Value).Tab.ColorIndex = 3
End If
Next
End If
End Sub
Но не знаю как поменять данную строчку кода чтоб он не по всем 26 строчкам считывал а только по данным (1, 6, 11, 16, 21, 26):
С этим да, я уже разобрался. Но почему то когда вставляю в свой пример, у меня выводит ошибку на строчку кода: [CODE][/CODE] Sheets(Cells(i, 4).Value).Tab.ColorIndex = 3
А так впринципе листы закрашиваются даже с ошибкой... только не могу понять что за ошибка
Не могу под свой пример этот макрос переписать. Например если перемещаю диапазон A1:A6 в колонку B, получается диапазон B1:B6 и меняю в макросе естественно на диапазон B1:B6, то макрос почему то перестает работать
Разобрался немного. Исправил макрос. Теперь при выборе из ячеек А1:А6 закрашиваются ярлычки соответствующих выбранных листов, но если какой либо параметр убираешь из ячеек А1:А6, то закрашенные листы все равно остаются. Не могу сообразить как дописать макрос, чтобы при отсутствии параметра в ячейках А1:А6 на соответствующем листе убиралось бы закрашивание ярлычка листа. Файл переделанный прилагаю. Подскажите пожалуйста кто знает как сделать.
Добрый День Всем!!! Данный макрос привязал к своему примеру. Все хорошо работает. Только в моем примере нужно немного по другому реализовать. Допустим есть выбор в ячейках А1:А6 из диапазона D1:D6. Нужно чтобы При выборе хотя бы одного параметра в ячейках А1:А6 выделялся цветом соответствующий этому параметру лист. Повторений в ячейках А1:А6 быть не может. Файл примера прилагаю. Макрос немного изменил, написал сначала для ячейки А1. Почти все работает. Только остается заливка цветом ярлычка предыдущего выбора.