14 / 35 / 2
Регистрация: 19.11.2017
Сообщений: 135
1

Диапазон ячеек/столбцов

03.05.2018, 22:55. Показов 3478. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, друзья!

В общем имеется кнопка, код к ней, позволяющий строить нужные графики (вот её код)

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Private Sub CommandButton1_Click()
Dim mychart As Chart
Dim x As Single
Dim y As Single
a = InputBox("Введите a (в диапазоне от 0 до 1)")
    If a >= 0 And a <= 1 Then
        Cells(1, 6).Value = a
        x1 = 1
        x2 = 110
        h = 1
Set mychart = Worksheets(1).ChartObjects(1).Chart
mychart.SetSourceData Source:=Worksheets(1).Range("A1:D" & Trim(Str((Fix((x2 - x1) / h + 1)))))
fname = ThisWorkbook.Path & Application.PathSeparator & "picture.gif"
mychart.Export Filename:=fname, Filtername:="gif"
Image1.Picture = LoadPicture(fname)
    Else
        MsgBox "Внимание! Введите число от 0 до 1", 16
   End If
End Sub
Но вот в чём проблема. Строка
Visual Basic
1
mychart.SetSourceData Source:=Worksheets(1).Range("A1:D" & Trim(Str((Fix((x2 - x1) / h + 1)))))
строит график по столбцам в диапазоне A : D (захватывая при этом ненужные столбцы B и C) идёт накладывание информации, выглядит некорректно.

Подскажите пожалуйста, как можно исправить код, чтобы он захватывал столбцы только A и D. Скрывать столбцы B и C не выход, т.к. по ним так же строятся дополнительные графики.

Спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.05.2018, 22:55
Ответы с готовыми решениями:

Обработать выделенный диапазон ячеек, результат записать в смежный диапазон
Напишите в среде Excel макрос, который в выделенном диапазоне ячеек должен выполнять заданные...

Удалить пробелы в начале и конце ячеек выделенных столбцов ячеек
Доброй ночи! Имеется excel файл с большим количеством страниц, строк и столбцов. В ячейках:...

Определение координат центров ячеек из столбцов, текст которых - вписан в заголовки столбцов
Добрый вечер, специалисты по эксель. Помогите решить вопрос. На листе несколько столбцов с...

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

21
4131 / 2235 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
04.05.2018, 06:48 2
Visual Basic
1
mychart.SetSourceData Source:=Worksheets(1).Range("A1:A110,D1:D110")
1
14 / 35 / 2
Регистрация: 19.11.2017
Сообщений: 135
04.05.2018, 07:15  [ТС] 3
pashulka, как выход да, годится. Но как недавно оказалось, значений (строк) может быть гораздо больше. И 200 и 400.

Как грамотно написать этот код без привязки кол-ва строк? Т.е. задаётся весь столбец А и весь столбец D. Или построения/расчёты ведутся до последней записаной ячейки в строке нужного столбца (а координаты этой ячейки всегда могут быть разными А110, А218..)

Надеюсь на Вашу помощь.
0
4131 / 2235 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
04.05.2018, 07:26 4
Visual Basic
1
mychart.SetSourceData Source:=Worksheets(1).Range("A:A,D:D")
и Excel сам определит количество заполненных ячеек, во всяком случае, в старых версиях.
В новых (начиная с 2007) надо смотреть(тестировать)
1
14 / 35 / 2
Регистрация: 19.11.2017
Сообщений: 135
04.05.2018, 07:27  [ТС] 5
pashulka, вот спасибо, сегодня всё проверю!
0
14 / 35 / 2
Регистрация: 19.11.2017
Сообщений: 135
04.05.2018, 22:42  [ТС] 6
pashulka, к сожалению такая форма записи в 2010 Excel не поддерживается
Миниатюры
Диапазон ячеек/столбцов  
0
4131 / 2235 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
05.05.2018, 06:02 7
Такой синтаксис допустим и в Excel 2010, а чтобы найти причину, лучше посмотреть не скриншот, а Ваш файл .xls(.xlsm) с данными и макросом.
1
14 / 35 / 2
Регистрация: 19.11.2017
Сообщений: 135
05.05.2018, 06:33  [ТС] 8
pashulka, да, посмотрите пожалуйста как будет у Вас время.
Вложения
Тип файла: rar Программа + данные.rar (141.8 Кб, 7 просмотров)
0
4131 / 2235 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
05.05.2018, 07:04 9
Лучший ответ Сообщение было отмечено SamTy как решение

Решение

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub CommandButton2_Click() 'Кнопка "Построить график"
    Dim mychart As Chart, fname$
    
    Application.DisplayAlerts = False
    
    fname = ThisWorkbook.Path & "\Данные.xlsx"
    With Workbooks.Open(fname, 0)
         Set mychart = .Worksheets(1).ChartObjects(1).Chart
         mychart.SetSourceData Source:=.Worksheets(1).Range("A:A,D:D")
 
         fname = ThisWorkbook.Path & "\picture.gif"
         mychart.Export Filename:=fname, Filtername:="gif"
         Image1.Picture = LoadPicture(fname)
         
         .Close saveChanges:=True 
         'False - закрыть без сохранения и тогда DisplayAlerts = False/True не нужны
    End With
    
    Application.DisplayAlerts = True
End Sub
1
14 / 35 / 2
Регистрация: 19.11.2017
Сообщений: 135
05.05.2018, 07:14  [ТС] 10
pashulka, данные загружаются, но графика нет
Миниатюры
Диапазон ячеек/столбцов  
0
4131 / 2235 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
05.05.2018, 07:29 11
График есть, просто у Вас столбец D пустой, если заполните, увидите разницу.
1
14 / 35 / 2
Регистрация: 19.11.2017
Сообщений: 135
05.05.2018, 08:10  [ТС] 12
pashulka, ааа, верно, я просто для другого графика его сначала влепил, спасибо Вам, товарищ!

Добавлено через 23 минуты
pashulka, вот ещё вопрос небольшой к Вам, за что отвечает эта строка?

Visual Basic
1
.Close saveChanges:=True
Как понял, если она присутствует в коде, все значения с листа данных "пропадают" на время работы программы?

Добавлено через 7 минут
pashulka, по сути, можно ведь обойтись и без этих конструкций? Или они выполняют какую-то существенную работу?

Visual Basic
1
2
3
Application.DisplayAlerts = False
.Close saveChanges:=False
Application.DisplayAlerts = True
0
4131 / 2235 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
05.05.2018, 08:45 13
Лучший ответ Сообщение было отмечено SamTy как решение

Решение

Шутите ? ведь там даже комментарий есть, хотя и без него, всё ясно

Код
Книга.Закрыть СохранитьИзменения:=Да
Если закрыть книгу без сохранения, то DisplayAlerts = False/True не нужны, а если сохранить изменения, то появляется стандартное диалоговое окно "Предупреждение о конфиденциальной информации: ..." которое, лично мне, нафиг не нужно, и от которого можно избавиться именно с помощью DisplayAlerts = False/True
1
14 / 35 / 2
Регистрация: 19.11.2017
Сообщений: 135
05.05.2018, 08:51  [ТС] 14
pashulka, хорошо, тогда почему с применением данной конструкции на листе исходных данных после нажатия на кнопку "Построить график" появляется следующее?
Миниатюры
Диапазон ячеек/столбцов  
0
4131 / 2235 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
05.05.2018, 09:02 15
Исходные данные - это "Лист1" в книге "Данные.xlsx" и он не пустой

Что касается мусора на скриншоте, то он не имеет отношения к моему коду.
2
14 / 35 / 2
Регистрация: 19.11.2017
Сообщений: 135
05.05.2018, 09:06  [ТС] 16
pashulka, да, простите Павел, мой косяк, всё отлично, спасибо!
0
oh my god
1454 / 793 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
05.05.2018, 09:07 17
А вообще формат xlsx поддерживает работу макросов?, может изменить сам формат в xlsm или xls ?
0
14 / 35 / 2
Регистрация: 19.11.2017
Сообщений: 135
05.05.2018, 09:16  [ТС] 18
fever brain, у меня файл "Программа" изначально сохранён с поддержкой макросов
Миниатюры
Диапазон ячеек/столбцов  
0
4131 / 2235 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
05.05.2018, 09:17 19
fever brain, Файл "Данные.xlsx" используется только как источник данных и графика. Макросы находятся в файле "Программа.xlsm" и такое разделение, возможно, требование преподавателя.
0
14 / 35 / 2
Регистрация: 19.11.2017
Сообщений: 135
05.05.2018, 13:42  [ТС] 20
pashulka, Павел, подсобите пожалуйста ещё немножко

В общем имеем кнопку, позволяющую накладывать фильтры на график, построенный по исходным данным. Вот её код:

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
Private Sub CommandButton4_Click()
    Dim mychart As Chart, x, y, h As Single, s, v As String, fname As String
        a = InputBox("Введите a (в диапазоне от 0 до 1) через запятую")
            If a >= 0 And a <= 1 Then
                Cells(1, 6).Value = a
                x1 = 1
                x2 = 110
                h = 1
                
                    Set mychart = Worksheets(1).ChartObjects(1).Chart
                    mychart.SetSourceData Source:=Worksheets(1).Range("A:A,D:D" & Trim(Str((Fix((x2 - x1) / h + 1)))))
                    fname = ThisWorkbook.Path & Application.PathSeparator & "picture.gif"
                    mychart.Export Filename:=fname, Filtername:="gif"
                    Image1.Picture = LoadPicture(fname)
                    
                        s = "=$F$1*$B5+(1-$F$1)*$b4"
                        v = "=$F$1*$B4+(1-$F$1)"
                            Cells(4, 4).Formula = v
                            Cells(5, 4).Formula = s
            Else
                MsgBox "Внимание! Введите число от 0 до 1", 16
            End If
 
                For i = 5 To (Fix((x2 - x1) / h))
                    Cells(5, 4).AutoFill Range(Cells(5, 4), Cells(Rows.Count, "B").End(xlUp).Offset(, 2))
                Next
End Sub
Но Ваш совет не удаётся правильно реализовать в нём. Не посмотрите в чём дело?
Миниатюры
Диапазон ячеек/столбцов  
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.05.2018, 13:42
Помогаю со студенческими работами здесь

Выделить диапазон ячеек в Excel
Помогите люди добрые! Нужно написать макрос в Excel. Задание следующее - Выделить диапазон ячеек и...

Как выделить диапазон ячеек ?
Задача простая, но нигде не могу найти как оформить синтаксис Нужно выделить диапазон из ячеек...

Combobox и диапазон ячеек в Excel
Используется лист1 экселя, как миниатюрная база данных. На листе2 есть списки с данными, которые...

Вставка выделенных ячеек в диапазон
Здравствуйте! Подскажите, как выделенный диапазон ячеек скопировать на диапазон. Вот что у меня...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru