Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: VBA MS Office

Программирования для MS Office кроме ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: vba. дописать программу
 
 автор: sonya   (02.04.2010 в 11:31)   личное сообщение
 
 

есть программа, в результате которой на 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

  Ответить  
 
 автор: час   (02.04.2010 в 11:42)   личное сообщение
 
 

.
Потом сравнить второе число(т.е 3)

Круто....
Надо же так меня запутать , что я ваще ниче не рублю
3 перенести в 1 подставить заменить перенести затереть убрать, поправить всунуть и на выходе изменить.........
Ах да ещё ti И tj - это я понял - очень важные буквенные сочетания... - адрес ячейки!!!!!
====================================================================
Я пас

  Ответить  
 
 автор: sonya   (02.04.2010 в 11:51)   личное сообщение
 
 

что конкретно ты не понял?

  Ответить  
 
 автор: ДрЮня   (02.04.2010 в 13:11)   личное сообщение
 
 

а что не получается-то ?

  Ответить  
 
 автор: sonya   (02.04.2010 в 14:33)   личное сообщение
 
 

Пример:
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), если в столбце А она не встречалась)

  Ответить  
 
 автор: kot_k_k   (02.04.2010 в 16:24)   личное сообщение
 
 

читал, читал - ни фига не понятно.

  Ответить  
 
 автор: Волшебник   (04.04.2010 в 14:50)   личное сообщение
 
 

Мне кажется, человек хочет сделать что-то в виде картинки, типа японского кроссворда

  Ответить  
 
 автор: АлаяЗаря   (04.04.2010 в 15:27)   личное сообщение
 
 


не надо найти чему равен Rows, т.е, если в ячейке А1:1 ненулевой элемент, то Rows должен быть равен 1


rows на сколько понимаю это строка, т.е. если А1 равно нулю то вся строка должна быть пустая? или как?
If Range("A1") = 0 Then
i =1
Else
End If
.....
rows(i)

блин я правда не могу понять что требуется... =(

  Ответить  
 
 автор: snipe   (05.04.2010 в 06:00)   личное сообщение
 
 

dim Столбец as Long
dim Строка as Long
столбец=Cells(ti,tj).Column
строка=Cells(ti,tj).Row

хотя с другой стороны зачем искать номера столбцов и строк если для доступа к ячейке используются циклы а переменные циклов в данном случае и есть координаты ячейки (т.е Ваш Column и Row

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList