Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 29.11.2008, 16:29   #1
Марат707
 
Регистрация: 29.11.2008
Сообщений: 3
По умолчанию VBA построить квадратную матрицу

Мне надо на VBA построить квадратную матрицу типа этого
1 2 3 4
4 1 2 3
3 4 1 2
2 3 4 1
Пожалуйста помогите!!!

Последний раз редактировалось Марат707; 29.11.2008 в 16:43.
Марат707 вне форума
Старый 29.11.2008, 18:57   #2
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Помощь

Помогите нам и вы.
То, типа какой должна быть матрица, мало проясняет смысл вашего задания.
Должна ли она быть 4 на 4 или вообще N*N?

Может, просто набрать её, как вы это сделали, в 4 строки?!

(А тогда просто сделайте это, включив предварительно запись: в главном меню (верхняя часть документа Word) Сервис>Макрос>Начать запись><теперь печатайте свою матрицу, поэлементно (а не путём вставки)>Остановить запись.
Жмёте далее альт-F11 — вот и ваш макрос!
Sasha_Smirnov вне форума
Старый 29.11.2008, 19:50   #3
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Ну вас пока дождёшься...

Option Base 1

Sub MatrixCasual()
'печать кв. матрицы случайных чисел от (-10 до 10)
Dim dimension As Byte, massiv() As Integer
Dim i As Byte, answer As Long
dimension = Int(1 + 10 * Rnd)
answer = MsgBox("Печатать матрицу " & _
dimension & " на " & dimension & "?", vbYesNo)
If answer = vbNo Then Exit Sub

ReDim massiv(dimension ^ 2) 'размерность матрицы

With Selection '(в месте нахождения курсора)
.TypeParagraph 'печать абзаца
For i = 1 To UBound(massiv)
massiv(i) = Int(-10 + 20 * Rnd)
.TypeText vbTab & massiv(i) 'разделитель — tab*
'* вместо vbTab можно «нарисовать» пробел: " "
If i Mod dimension = 0 Then .TypeParagraph
Next
.TypeParagraph 'печать абзаца после матрицы
End With

Последний раз редактировалось Sasha_Smirnov; 29.11.2008 в 19:53.
Sasha_Smirnov вне форума
Старый 29.11.2008, 19:52   #4
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

End Sub ''
Sasha_Smirnov вне форума
Старый 29.11.2008, 23:59   #5
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Option Base 1
Sub MatrixCasualinTable()
'печать таблицы (случайных) чисел от (1 до 100)
Const separat As String * 1 = vbTab 'разделитель стобцов (символ)
Dim dimension As Byte, massiv() As Integer, i As Integer
dimension = Int(1 + 20 * Rnd)
If MsgBox("Печать квадратной (" & dimension & "*" & dimension & ") матрицы.", vbYesNo) _
= vbNo Then Exit Sub

ReDim massiv(dimension ^ 2) 'число ячеек таблицы

For i = 1 To UBound(massiv)
massiv(i) = Int(1 + 100 * Rnd)
Selection.TypeText massiv(i) & IIf(i Mod dimension = 0, vbLf, vbTab)
Next i

SendKeys "^+{home}", Tru 'выделяет текст до начала
Selection.ConvertToTable _ Separator:=vbTab 'преобразует "матрицу" в таблицу
Selection.HomeKey 'курсор - к началу выделения
SendKeys "{enter}", True 'ввод (символа) абзаца - ENTER
End Sub

(Перед End Sub четыре строчки можно выключить, и таблицы не будет.)
Sasha_Smirnov вне форума
Старый 30.11.2008, 00:08   #6
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Option Base 1
Sub MatrixCasualinTable()
'печать таблицы (случайных) чисел от (1 до 100)
Const separat As String * 1 = vbTab 'разделитель стобцов (символ)
Dim dimension As Byte, massiv() As Integer, i As Integer

dimension = Int(1 + 20 * Rnd)
If MsgBox("Печать квадратной (" & dimension & "*" & dimension & _
") матрицы.", vbYesNo) = vbNo Then Exit Sub

ReDim massiv(dimension ^ 2) 'число ячеек таблицы

For i = 1 To UBound(massiv)
massiv(i) = Int(1 + 100 * Rnd)
Selection.TypeText massiv(i) & IIf(i Mod dimension = 0, vbLf, vbTab)
Next i

'SendKeys "^+{home}", True 'выделяет текст до начала
'Selection.ConvertToTable 'Separator:=vbTab 'преобразует "матрицу" в таблицу
'Selection.HomeKey 'курсор - к началу выделения
'SendKeys "{enter}", True 'ввод (символа) абзаца - ENTER
End Sub
Sasha_Smirnov вне форума
Старый 30.11.2008, 04:40   #7
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Ну а вот так, надеюсь, вообще всё ясно, да?

Option Base 1
Sub MatrixCasual()
'печать кв. матрицы случайных целых чисел (из промежутка 0 до 9)

Const separat As String = " " 'разделитель стобцов (здесь: 2 пробела)
Dim dimension As Byte, massiv() As Integer, k As Integer, answer As Long

dimension = Int(1 + 10 * Rnd) 'КОЛИЧЕСТВО строк квадратной матрицы
answer = MsgBox("Печатать матрицу " & _
dimension & " на " & dimension & "?", vbYesNo)
If answer = vbNo Then Exit Sub 'прерывание, если ответили «Нет»

ReDim massiv(dimension ^ 2) 'количество всех элементов кв. матрицы

With Selection '(печать в месте нахождения курсора)

.TypeParagraph 'сначала печатаем абзац
For k = 1 To UBound(massiv)
massiv(k) = Int(0 + 10 * Rnd) 'случайное целое из диапазона [0;9]
.TypeText separat & massiv(k) 'разделитель столбцов и k-й элемент
If k Mod dimension = 0 Then .TypeParagraph
Next

End With
End Sub
Sasha_Smirnov вне форума
Старый 30.11.2008, 04:41   #8
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

(только при импорте в "тему" два пробела заменились на один)
Sasha_Smirnov вне форума
Старый 04.12.2008, 00:35   #9
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Погорячился я...

Цитата:
Сообщение от Sasha_Smirnov Посмотреть сообщение
Может, просто набрать её, как вы это сделали, в 4 строки?!

(А тогда просто сделайте это, включив предварительно запись: в главном меню (верхняя часть документа Word) Сервис>Макрос>Начать запись><теперь печатайте свою матрицу, поэлементно (а не путём вставки)>Остановить запись.)
Жмёте далее альт-F11
Далее (в открышемся* окне) контрол-R, раскрываете, нажав на +, папку Normal, в ней — Modules, а в модулях — двойной щёлк по NewMacros.
И вот он! Это и есть программа на VBA.
___________________________________
* если, разумеется, ваш Word не урезан по функциям до печатной машинки
Sasha_Smirnov вне форума
Старый 04.12.2008, 15:09   #10
Марат707
 
Регистрация: 29.11.2008
Сообщений: 3
По умолчанию

Спасибо большое!!!
Марат707 вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сложить матрицу... Zibiv Помощь студентам 7 19.05.2009 15:51
Задача на матрицу. Fest Помощь студентам 2 16.12.2007 05:54
Задачка на матрицу. Саня895 Помощь студентам 1 11.12.2007 08:45
Как посчитать матрицу? RECREATOR Помощь студентам 8 30.11.2007 07:10