|
|
|
| есть программа, в результате которой на 3-ий лист екселя выводится матрица,(дальше в нее надо добавить следующее:) в которой надо пробежаться по 1-ой строке и записать “ti” - номер ненулевых элементов(ti-первый элемент из № ячейки, если допустить, № ячейки – это(ti,tj)). В примере это 1 3
Потом сравнить второе число(т.е 3) в строке с числами(т.е с 1), которые есть в столбце и, если его нет, то занести его в столбец(т.к. 3 – нет, то занести ее в столбец).
Дальше надо перейти на № той строки, который указан последний в столбце(т.е 3).Затем ищем ненулевой элемент в следующей строке(т.е 3-ей). В 3-ей строке ненулевой элемент находится на 2-ом месте, значит пишем 2. Затем смотрим нет ли 2 в столбце(т.к ее нет), то добавляем ее в столбец.Дальше смотрим на 2-ую строку, т.к ненулевой элементстоит на 3-м месте, а 3 уже есть в столбце, то надо выйти из программы
Пример:
2 0 3
0 0 4
0 8 0
1 3
3 2
2
Sub Кнопка1_Щелчок()
'Обьявляются массивы, правда размер не указан, типа Variant.
'В этот тип могут попадать переменные любых типов
Dim MatrArr1(), MatrArr2(), MatrArr3() As Variant
Dim i, j As Integer 'Счетчики цикла
Dim mCols, mRows As Integer 'Задаются строки и столбцы
Dim tmpRange1, tmpRange2, tmpRange3 As String
Application.Workbooks(1).Worksheets(1).Activate
i = 1 'i присваивается значение 1
j = 1 'j присваивается значение 1
Do
i = i + 1 'увеличиваем i на 1
Loop While Cells(i, j).Value <> "" 'до тех пор пока ячейка не станет пустой
mCols = i - 1 'разность элементов строки
i = 1 'i присваивается значение 1
Do
j = j + 1 'увеличиваем j на 1
Loop While Cells(i, j).Value <> "" 'до тех пор пока ячейка не станет пустой
mRows = j - 1 'разность элементов
tmpRange1 = CStr("=Лист1!R1C1:R" & mCols & "C" & mRows & "")
tmpRange2 = CStr("=Лист2!R1C1:R" & mCols & "C" & mRows & "")
tmpRange3 = CStr("=Лист3!R1C1:R" & mCols & "C" & mRows & "")
ActiveWorkbook.Names.Add Name:="Matr1", RefersToR1C1:=tmpRange1
ActiveWorkbook.Names.Add Name:="Matr2", RefersToR1C1:=tmpRange2
ActiveWorkbook.Names.Add Name:="Matr3", RefersToR1C1:=tmpRange3
MatrArr1 = Range("Matr1")
MatrArr2 = Range("Matr2")
MatrArr3 = Range("Matr3")
For i = 1 To mCols '
For j = 1 To mRows '
MatrArr3(i, j) = MatrArr1(i, j) - MatrArr2(i, j) 'Присвоение значения разности матриц MatrArr1 и MatrArr2 матрице MatrArr3
Next j
Next i
Application.Workbooks(1).Worksheets(3).Activate
Range("Matr3").Value = MatrArr3
End Sub | |
|
| |
|
|
|
|
| что конкретно ты не понял? | |
|
| |
|
|
|
|
| Пример:
2 0 3
0 0 4
0 8 0
1 3
3 2
2
надо пробежаться по 1-ой строке и записать “Rows” - номер ненулевых элементов в строке(Rows -первый элемент из № ячейки, если допустить, № ячейки – это(Rows,cols)). В примере это 1 3
Потом сравнить второе число(т.е 3) в строке с числами(т.е с 1), которые есть в столбце и, если его нет, то занести его в столбец(т.к. 3 – нет, то занести ее в столбец).
Дальше надо перейти на № той строки, который указан последний в столбце(т.е 3).Затем ищем ненулевой элемент в следующей строке(т.е 3-ей). В 3-ей строке ненулевой элемент находится на 2-ом месте, значит пишем 2. Затем смотрим нет ли 2 в столбце(т.к ее нет), то добавляем ее в столбец. Дальше смотрим на 2-ую строку, т.к ненулевой элемент стоит на 3-м
месте, а 3 уже есть в столбце, то надо выйти из программы
не могу найти номер ненулевого элемента(номер ячейки в екселе состоит из Rows,cols)....мне надо найти чему равен Rows, т.е, если в ячейке А1:1 ненулевой элемент, то Rows должен быть равен 1, а потом надо эту единицу занести в столбец(т.е ячейку А2:1), если в столбце А она не встречалась) | |
|
| |
|
|
|
| читал, читал - ни фига не понятно. | |
|
| |
|
|
|
| Мне кажется, человек хочет сделать что-то в виде картинки, типа японского кроссворда | |
|
| |
|
|
|
|
не надо найти чему равен Rows, т.е, если в ячейке А1:1 ненулевой элемент, то Rows должен быть равен 1
|
rows на сколько понимаю это строка, т.е. если А1 равно нулю то вся строка должна быть пустая? или как?
If Range("A1") = 0 Then
i =1
Else
End If
.....
rows(i)
блин я правда не могу понять что требуется... =( | |
|
| |
|
|
|
| dim Столбец as Long
dim Строка as Long
столбец=Cells(ti,tj).Column
строка=Cells(ti,tj).Row
хотя с другой стороны зачем искать номера столбцов и строк если для доступа к ячейке используются циклы а переменные циклов в данном случае и есть координаты ячейки (т.е Ваш Column и Row | |
|
| |