Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 10.08.2012
Сообщений: 21
1

Обработать выделенный массив с изменением данных согласно формулам из примера

16.11.2014, 01:05. Показов 455. Ответов 2
Метки нет (Все метки)

Здравствуйте форумчане!
Помогите, пожалуйста, с вопросами...

У меня есть исходный массив, который нужно преобразовать по определенным формулам и вывести на новый лист.

На данный момент:
выделил исходный массив - активировал код - получил на новом листе почти то, что нужно - и все...


(1)
Подскажите, как при запуске кода можно предоставить выбор для выделения требуемого диапазона?
То есть чтобы появлялись надписи и соответствующие кнопки:
- "Выделите исходный массив!"
- ОК
- "Вы уверены?"
- ДА / НЕТ
Если выбрал ДА - пошел цикл программы, если - НЕТ, то все сначала.

(2)
А еще не могу понять каким образом по ходу заполнения нового массива на новом листе осуществить изменение цвета по нужным правилам?

СПАСИБО!

Вот код:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Sub Task()
    Dim A As Integer, B As Integer, aa As Integer, bb As Integer, i As Integer, j As Integer
    
    MsgBox "Выделите исходные данные!"
    
    ' Определяем координаты выделенного диапазона
    A = Selection.Row
    B = Selection.Column
    aa = Selection.Rows.Count + A - 1
    bb = Selection.Columns.Count + B - 1
    
    ' Отключаем обновление экрана
    Application.ScreenUpdating = False
    
    ' Суммируем столбцы и выводим среднее значение под каждым столбцом
    For i = B To bb
    Cells(aa + 1, i) = Application.Average(Range(Cells(A, i), Cells(aa, i)))
    Next
    
    ' Суммируем строки и выводим среднее значение за каждой строкой
    For i = A To aa
    Cells(i, bb + 1) = Application.Average(Range(Cells(i, B), Cells(i, bb)))
    Next
    
    ' Суммируем весь массив и выводим среднее значение
    Cells(aa + 1, bb + 1) = Application.Average(Range(Cells(A, B), Cells(aa, bb)))
    
    ' Создаем новый лист
    Worksheets.Add.Name = "Итог"
    Sheets("Лист1").Select
    
    ' Записываем в новый лист на теже места измененные данные (согласно формулам)
    For i = A To aa
        For j = B To bb
            Sheets("Итог").Cells(i, j) = (Cells(i, j) - Cells(i, bb + 1) * Cells(aa + 1, j) / Cells(aa + 1, bb + 1)) / Sqr(Cells(i, bb + 1) * Cells(aa + 1, j) / Cells(aa + 1, bb + 1))
            Sheets("Итог").Cells(i, j).NumberFormat = "0.00"
        Next
    Next
    
    ' Включаем обновление экрана
    Application.ScreenUpdating = True
 
End Sub
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Миниатюры
Обработать выделенный массив с изменением данных согласно формулам из примера  
Вложения
Тип файла: xlsx Question.xlsx (11.0 Кб, 2 просмотров)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.11.2014, 01:05
Ответы с готовыми решениями:

Обработать одномерный массив согласно условию
В одномерном массиве, состоящем из n целых элементов, вычислить: - сумму элементов массива,...

Обработать одномерный массив согласно условию задачи
1. Найти сумму отрицательных элементов массива. 2. Найти произведение элементов массива,...

Обработать одномерный массив согласно условию задачи
В одномерном массиве, состоящем из n целых элементов, вычислить: 1) номер максимального элемента...

Обработать одномерный массив согласно условию задачи
Доброго времени суток. Не могли бы вы мне помочь написать программу в С++, буду очень благодарен,...

2
6825 / 2767 / 520
Регистрация: 19.10.2012
Сообщений: 8,433
16.11.2014, 01:29 2
По коду:
1.
Visual Basic
1
Worksheets.Add.Name = "Итог"
Точно там уже нет такого листа?

2.
Visual Basic
1
    Sheets("Лист1").Select
Точно там уже есть такой лист?
0
0 / 0 / 0
Регистрация: 10.08.2012
Сообщений: 21
16.11.2014, 22:50  [ТС] 3
Hugo121,
Вот, что получилось...

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
Sub Task()
    Dim A As Integer, B As Integer, aa As Integer, bb As Integer, i As Integer, j As Integer
    Dim iList As Worksheet, wix As Boolean
    
    ' Получаем имя активного листа, на котором выделили данные
    sName = ActiveSheet.Name
    
    ' Определяем координаты выделенного диапазона
    A = Selection.Row
    B = Selection.Column
    aa = Selection.Rows.Count + A - 1
    bb = Selection.Columns.Count + B - 1
    
    ' Отключаем обновление экрана
    Application.ScreenUpdating = False
    
    ' Суммируем столбцы и выводим среднее значение под каждым столбцом
    For i = B To bb
    Cells(aa + 1, i) = Application.Average(Range(Cells(A, i), Cells(aa, i)))
    Next
    
    ' Суммируем строки и выводим среднее значение за каждой строкой
    For i = A To aa
    Cells(i, bb + 1) = Application.Average(Range(Cells(i, B), Cells(i, bb)))
    Next
    
    ' Суммируем весь массив и выводим среднее значение
    Cells(aa + 1, bb + 1) = Application.Average(Range(Cells(A, B), Cells(aa, bb)))
    
    ' Проверяем наличие листа "Итог" в книге: если его нет - создаем; если он есть - очищаем
    For Each iList In Worksheets
        If iList.Name = "Итог" Then
            Sheets("Итог").Cells.Delete
            GoTo 1
        End If
    Next
    Worksheets.Add.Name = "Итог"
1:
    
    ' Делаем активным лист, на котором был выделен диапазон исходных значений
    Sheets(sName).Select
    
    ' Записываем в новый лист на те же места измененные данные (согласно формулам)
    For i = A To aa
        For j = B To bb
            Sheets("Итог").Cells(i, j) = (Cells(i, j) - Cells(i, bb + 1) * Cells(aa + 1, j) / Cells(aa + 1, bb + 1)) / Sqr(Cells(i, bb + 1) * Cells(aa + 1, j) / Cells(aa + 1, bb + 1))
            Sheets("Итог").Cells(i, j).NumberFormat = "0.00"
        Next
    Next
    
    ' Включаем обновление экрана
    Application.ScreenUpdating = True
 
End Sub
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.11.2014, 22:50

Какой командой в макросе обработать выделенный в ячейке кусок текста?
Возникла необходимость обработать макросом только часть содержимого ячейки. А какая комманда...

Нарисовать три графика согласно формулам
здравствуйте! помогите пожалуйста, мне нужно по формулам в картинке составить 3 графика в C#:...

Обработать текст согласно условию
Дана строка текста, в которой слова разделены пробелами. Необходимо: - определить количество слов...

Обработать вещественное число согласно условию
Всем привет! У меня есть число , припустим , это 0,12345678 мне надо из этого числа сделать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.