Excel макрос ячейка на другом листе

 

макс 1

Пользователь

Сообщений: 114
Регистрация: 03.01.2013

#1

20.08.2021 20:11:31

У меня есть кусок макроса, который определяет какой макрос выполнить макрос1 или макрос2, и как видно из кода выполнение макроса1 происходит до суммарного времени, которое получается при сложении значений времени из ячеек D4 и D5 в активном листе, в которых введено время в формате 00:00:00

Код
Sub транслировать_видео_из_текущего_плейлиста()
If Sheets("лист1").Range("A5").Value = ЛОЖЬ Then
макрос1 True, [D4].Value + [D5].Value
Else
макрос2 False
End If
End Sub

Так вот вопрос мой такой — как мне прописать адреса ячеек D4 и D5 не из активного листа, а из другого с его названием?
Т.е. я так понимаю должно быть что-то типа
макрос1 True, [Лист2!D4].Value + [Лист2!D5].Value
Но такой вид конечно не работает, а какой вид должен быть подскажите?

Изменено: vikttur20.08.2021 21:08:30

 

New

Пользователь

Сообщений: 4581
Регистрация: 06.01.2013

#2

20.08.2021 20:25:48

— Странно, вы уже правильно обращаетесь к ячейке А5 листа «Лист1», но не знаете как строчкой ниже обратиться к ячейкам D4 и D5 на другом листе. Вы сами можете посмотреть ответ в своём же коде строчкой выше
— Мне кажется ЛОЖЬ надо писать в кавычках
— код макроса в своём сообщении на форуме надо выделять мышкой и нажать на кнопочку «<…>» выше окна с вашим текстом.

Код
Sub транслировать_видео_из_текущего_плейлиста()
    If Sheets("лист1").Range("A5").Value = "ЛОЖЬ" Then
        макрос1 True, Sheets("лист2").Range("D4").Value + Sheets("лист2").Range("D5").Value
    Else
        макрос2 False
    End If
End Sub

Изменено: New20.08.2021 22:19:18

 

макс 1

Пользователь

Сообщений: 114
Регистрация: 03.01.2013

вы пробовали для начала сами проверить работает так или нет? НЕТ так не работает!
Жду другого решения…..

Изменено: vikttur20.08.2021 21:08:58

 

БМВ

Модератор

Сообщений: 21376
Регистрация: 28.12.2016

Excel 2013, 2016

#4

20.08.2021 20:29:18

Лист2.[D4] + Лист2.[D5] ну или Лист2.Range(«D4») + Лист2.Range(«D5») если и имя и кодовое имя совпадают.

Цитата
БМВ написал:
Мне кажется ЛОЖЬ надо писать в кавычках

это и не нужно да и например для фильтра опасно. Сие может подвести. Оно в разной локализации по разному будет. А вот просто значение в ячейке нормально, да и лучше Not Sheets(«лист1»).Range(«A5»)

Изменено: БМВ20.08.2021 20:33:50

По вопросам из тем форума, личку не читаю.

 

New

Пользователь

Сообщений: 4581
Регистрация: 06.01.2013

макс 1, ну, вы приложите свой файл с вашими макросами, а я уж так и быть, попробую

Изменено: New20.08.2021 20:30:12

 

макс 1

Пользователь

Сообщений: 114
Регистрация: 03.01.2013

#6

20.08.2021 20:44:40

вот пожалуйста для эксперимента выкладываю пример с макросом и там на листе1 в ячейке B4 задайте текущее время и к нему прибавляется + 1минута, которая уже введена в соседней ячейке C4, чтобы макрос выполнялся по времени до наступления текущего времени на 1 минуту большего.
И на Листе2 нажмите на кнопку, чтобы проверить как работает макрос, он с периодичностью в 1 секунду переходит на листе2 с ячейки F6 на ячейку F7 и наоборот.
И в макросах за это отвечает код:

Код
Sub проба()
проверка True, [B4].Value + [C4].Value
End Sub

Если запустить макрос «проба» на Листе1, то он будет работать, так как значения из ячеек B4 и C4 он увидит в этом листе !
Вот и проверьте свои предложенные варианты! Они не пашут!  Жду очень правильного решения….

Прикрепленные файлы

  • проба.xlsm (22.97 КБ)

 

New

Пользователь

Сообщений: 4581
Регистрация: 06.01.2013

#7

20.08.2021 20:50:08

А где тут указание листа у ячеек B4 и С4? Вы что не видите, что на Лист2 эти ячейки пустые?
намекаю — может быть надо добавить имя листа у указанных ячеек как я показал или как показал БМВ ?

Код
Sub проба()
    проверка True, [B4].Value + [C4].Value
End Sub

Изменено: New20.08.2021 22:20:50

 

макс 1

Пользователь

Сообщений: 114
Регистрация: 03.01.2013

#8

20.08.2021 20:52:14

Вы вообще не поняли что мне нужно, но это уже не важно, я сам методом тыка разобрался, вот как надо писать:

Код
Sub проба()
проверка True, [Лист1!B4].Value + [Лист1!C4].Value
End Sub

Изменено: vikttur20.08.2021 21:10:34

 

RAN

Пользователь

Сообщений: 7091
Регистрация: 21.12.2012

#9

20.08.2021 20:54:31

Цитата
макс 1 написал:
вот как надо писать

Так не надо. Надо правильно.  :)

 

БМВ

Модератор

Сообщений: 21376
Регистрация: 28.12.2016

Excel 2013, 2016

#10

20.08.2021 20:56:21

Цитата
макс 1 написал:
макрос1 True, [Лист2!D4].Value + [Лист2!D5].ValueНо такой вид конечно не работает, а какой вид должен быть подскажите?
Цитата
макс 1 написал:
проверка True, [Лист1!B4].Value + [Лист1!C4].Value

и где разница в синтаксисе?

По вопросам из тем форума, личку не читаю.

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

макс 1, Вы видите, как другие оформляют код? Вот и Вы делайте так же: ищите кнопку <…> и исправьте свои сообщения.

 

sokol92

Пользователь

Сообщений: 4445
Регистрация: 10.09.2017

#12

21.08.2021 17:59:26

Цитата
БМВ написал:
Оно в разной локализации по разному будет.

Если мы заботимся о корректной работе при любых региональных настройках,

то

, как минимум:

  • никакой кириллицы для внутренних (Codename) имен листов, книги, модулей (2.1)
  • никакой кириллицы в текстовых литералах (3.1)

Владимир

Susume

0 / 0 / 0

Регистрация: 05.12.2013

Сообщений: 21

1

Как присвоить значение ячейки одного листа и поставить ее в другой лист

05.12.2013, 09:14. Показов 11496. Ответов 22

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Подскажите пожалуйста! Как присвоить значение ячейки одного листа и поставить ее в другой лист

Visual Basic
1
2
3
4
dim a 
dim name as string
name = "Лист3"
а = worksheets(name).cells(1, 1).Value

ругается проверка, worksheets(name).cells(1, 1).Value — не возвращает значение заданной ячейки заданного листа



0



5590 / 1580 / 406

Регистрация: 23.12.2010

Сообщений: 2,366

Записей в блоге: 1

05.12.2013, 10:04

2

В строке «Dim а» объявляется «а» латиницей, в строке «а=» стоит кириллица. После исправления все работает.



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

05.12.2013, 10:20

3

А какая разница в данном куске кода? Ну есть одна неиспользуемая переменная, и одна необъявленная…
Option explicit ведь нет, ругаться некому
А ошибка может быть в случае отсутствия такого листа.
У меня никаких ошибок нет — я о листе позаботился.



0



Susume

0 / 0 / 0

Регистрация: 05.12.2013

Сообщений: 21

05.12.2013, 13:25

 [ТС]

4

Кликните здесь для просмотра всего текста

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
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range
    Dim name As String
    Dim a As Variant
    Dim i As Integer, j As Integer
 
 
    Set KeyCells = Range("b11:b13")
        If Not Application.Intersect(KeyCells, Range(Target.Address)) _
        Is Nothing Then
            If Range("b11").Value <> "" Then               
                name = Range("b11").Value                                           
                If Range("b12").Value <> "" Then
                    i = Range("b12").Value
                    If Range("b13").Value <> "" Then
                        j = Range("b13").Value
                        
                        If Sheets(name) Is Nothing Then
                            Range("b14").Value = "NA"
                        Else
                          
                            a = Sheets(name).Cells(i, j).Value
                        
                            If IsNumeric(a) Then
                                Range("b14").Value = "Число"
                                Else: Range("b14").Value = "Не число"
                            End If
                        End If
                    End If
                End If
            End If
        End If
End Sub

Ячейки:
b11= 1
b12= 2
b13= Лист1
a = Sheets(name).Cells(i, j).Value — не возвращает значение ячейки на первом листе, сам макрос запускается на 2 листе
Помогите пожалуйста, запарился не могу считать ячейку с другого листа и все тут



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

05.12.2013, 13:49

5

Ну значит нет листа «1»

P.S. Вот не пойму — неужели интересно полдня играть в «угадай что у меня не так»? Почему не показать сразу с вопросом файл и сразу получить корректный правильный ответ?



0



0 / 0 / 0

Регистрация: 05.12.2013

Сообщений: 21

05.12.2013, 13:59

 [ТС]

6

Есть Лист1 в книге
если написать такую строку
a = Sheets(name).Range(«a2»).Value все возвращает значение
но в Range я не могу поставить I, J чтобы у меня по заданной ячейке брало
не пойму просто почему
а = Sheets(name).Cells(i, j).Value возвращает Empty , толи надо Лист1 сделать активным толи что

в тексте программы есть проверка на существование данного листа name = b13 = Лист1
If Sheets(name) Is Nothing Then



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

05.12.2013, 14:18

7

Я говорил не про Лист1, а про лист «1».
Ну так получается по описанию и коду.
А что там на самом деле — нам отсюда не видать.



0



0 / 0 / 0

Регистрация: 05.12.2013

Сообщений: 21

05.12.2013, 14:38

 [ТС]

8

Извини за мою неграмотность и тупость, но можно для особо одаренных объяснить



0



0 / 0 / 0

Регистрация: 05.12.2013

Сообщений: 21

05.12.2013, 15:14

 [ТС]

9

отправляю файл там 2 задачи, 1 я решил , 2 задача на 2 листе
строка а = Sheets(name).Cells(i, j).Value возвращает Empty постоянно
Скопировал код в новую созданную книгу , все работает, так почему же тут не работает,
что блокирует взятие значения у ячейки?

извиняюсь в код надо в начале добавить строку On Error Resume Next



0



Hugo121

6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

05.12.2013, 15:51

10

Вот не зря в умных книгах и форумах пишут: используйте Option Explicit!
Попробуйте поиспользовать — и сразу найдёте ошибку!
И ведь KoGG уже о ней всё сказал — не заметили?
С именем листа порядок — это Вы так коряво описали, что я коряво понял…

Добавлено через 11 минут
Ещё что — проверку наличия листа лучше осуществлять отдельной функцией:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub tt()
    If Sh_Exist("Лист1") Then
        MsgBox "Лист есть!"
    End If
End Sub
 
'Функция обязательно должна присутствовать в модуле
'Ей проверяем наличие листа
Function Sh_Exist(sName As String)
    Dim wsSh As Worksheet
    On Error Resume Next
    Set wsSh = Sheets(sName)
    Sh_Exist = Not wsSh Is Nothing
End Function

ну или можно и в этот код просто добавить On Error Resume Next, но как-то это не по-феншую…
И нужно отключить события на время работы кода, чтоб он по два раза не срабатывал, сам на свою работу.

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

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
Option Explicit
 
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range
    Dim name As String
    Dim a As Variant
    Dim i As Long, j As Long
 
    Set KeyCells = Range("b11:b13")
    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
       Is Nothing Then
        If Range("b11").Value <> "" Then
            name = Range("b11").Value
            If Range("b12").Value <> "" Then
                i = Range("b12").Value
                If Range("b13").Value <> "" Then
                    Application.EnableEvents = False
                    j = Range("b13").Value
 
                    If Not Sh_Exist(name) Then
                        Range("b14").Value = "NA"
                    Else
                        a = Sheets(name).Cells(i, j).Value
                        If IsNumeric(a) Then
                            Range("b14").Value = "Число"
                        Else: Range("b14").Value = "Не число"
                        End If
                    End If
                    Application.EnableEvents = True
                End If
            End If
        End If
    End If
End Sub

Function Sh_Exist(sName As String) поместите в стандартный модуль.
Хотя можно и в модуле листа расположить — работает, но лучше думаю в стандартный.



1



0 / 0 / 0

Регистрация: 05.12.2013

Сообщений: 21

05.12.2013, 15:53

 [ТС]

11

С переменной не объявленной понял
на счет On Error Resume Next очень разумно спс.
Но главное та не работает:
a = Sheets(name).Cells(i, j).Value — не возвращает значение ячейки, он присваевает а = Empty
2 день изучаю этот vba, много возможностей и много путаницы



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

05.12.2013, 15:58

12

Похоже что не поняли…
У Вас две разных переменных!



0



0 / 0 / 0

Регистрация: 05.12.2013

Сообщений: 21

05.12.2013, 16:04

 [ТС]

13

я скопировал то что вы написали,
извините но все равно не могу понять



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

05.12.2013, 16:59

14

Ещё раз — у Вас есть переменная a, и есть переменная а. Это две разные переменные!
И естественно, когда присваиваете значение одной, вторая остаётся как была. Если была empty — так и останется empty.



1



0 / 0 / 0

Регистрация: 05.12.2013

Сообщений: 21

05.12.2013, 17:25

 [ТС]

15

Покажите пожалуйста в коде
Dim a As Variant — объявил переменную
a = Sheets(name).Cells(i, j).Value — присвоил значение переменной
IsNumeric(a) — проверил число ли это



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

05.12.2013, 18:13

16

Ну если напишите так — то заработает, Option Explicit на a не ругается



0



Susume

0 / 0 / 0

Регистрация: 05.12.2013

Сообщений: 21

05.12.2013, 18:48

 [ТС]

17

но ведь так и написано в коде

Кликните здесь для просмотра всего текста

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
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range
    Dim name As String
    Dim a As Variant
    Dim i As Long, j As Long
 
    Set KeyCells = Range("b11:b13")
    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
       Is Nothing Then
        If Range("b11").Value <> "" Then
            name = Range("b11").Value
            If Range("b12").Value <> "" Then
                i = Range("b12").Value
                If Range("b13").Value <> "" Then
                    Application.EnableEvents = False
                    j = Range("b13").Value
 
                    If Not Sh_Exist(name) Then
                        Range("b14").Value = "NA"
                    Else
                        a = Sheets(name).Cells(i, j).Value
                        If IsNumeric(Sheets(name).Cells(i, j).Value) Then
                            Range("b14").Value = "×èñëî"
                        Else: Range("b14").Value = "Íå ÷èñëî"
                        End If
                    End If
                    Application.EnableEvents = True
                End If
            End If
        End If
    End If
End Sub

переменная а все равно равна empty



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

05.12.2013, 18:54

18

И что, не работает?
Покажите файл, где не работает ЭТОТ код.



0



0 / 0 / 0

Регистрация: 05.12.2013

Сообщений: 21

05.12.2013, 19:13

 [ТС]

19

лист1
строка 12
столбец 3
значение у ячейки = «»
а — все равно Empty
IsNumeric(Sheets(name).Cells(j, i).Value) — дает почему то истину и в ячейку b14 пишется что это число



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

05.12.2013, 19:27

20

Строку поменяйте с столбцом — первое значение это строка, второе — столбец (в (cells(x,y))

Добавлено через 1 минуту
И в любом случае, что 3-12, что 12-3 — там на листе пусто!

Добавлено через 3 минуты
Да, и кстати — пустая ячейка проходит проверку на isnumeric!



1



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

05.12.2013, 19:27

20

Обращение к ячейке на листе Excel из кода VBA по адресу, индексу и имени. Чтение информации из ячейки. Очистка значения ячейки. Метод ClearContents объекта Range.

Обращение к ячейке по адресу

Допустим, у нас есть два открытых файла: «Книга1» и «Книга2», причем, файл «Книга1» активен и в нем находится исполняемый код VBA.

В общем случае при обращении к ячейке неактивной рабочей книги «Книга2» из кода файла «Книга1» прописывается полный путь:

Workbooks(«Книга2.xlsm»).Sheets(«Лист2»).Range(«C5»)

Workbooks(«Книга2.xlsm»).Sheets(«Лист2»).Cells(5, 3)

Workbooks(«Книга2.xlsm»).Sheets(«Лист2»).Cells(5, «C»)

Workbooks(«Книга2.xlsm»).Sheets(«Лист2»).[C5]

Удобнее обращаться к ячейке через свойство рабочего листа Cells(номер строки, номер столбца), так как вместо номеров строк и столбцов можно использовать переменные. Обратите внимание, что при обращении к любой рабочей книге, она должна быть открыта, иначе произойдет ошибка. Закрытую книгу перед обращением к ней необходимо открыть.

Теперь предположим, что у нас в активной книге «Книга1» активны «Лист1» и ячейка на нем «A1». Тогда обращение к ячейке «A1» можно записать следующим образом:

ActiveCell

Range(«A1»)

Cells(1, 1)

Cells(1, «A»)

[A1]

Точно также можно обращаться и к другим ячейкам активного рабочего листа, кроме обращения ActiveCell, так как активной может быть только одна ячейка, в нашем примере – это ячейка «A1».

Если мы обращаемся к ячейке на неактивном листе активной рабочей книги, тогда необходимо указать этот лист:

‘по основному имени листа

Лист2.Cells(2, 7)

‘по имени ярлыка

Sheets(«Имя ярлыка»).Cells(3, 8)

Имя ярлыка может совпадать с основным именем листа. Увидеть эти имена можно в окне редактора VBA в проводнике проекта. Без скобок отображается основное имя листа, в скобках – имя ярлыка.

Обращение к ячейке по индексу

К ячейке на рабочем листе можно обращаться по ее индексу (порядковому номеру), который считается по расположению ячейки на листе слева-направо и сверху-вниз.

Например, индекс ячеек в первой строке равен номеру столбца. Индекс ячеек во второй строке равен количеству ячеек в первой строке (которое равно общему количеству столбцов на листе, зависящему от версии Excel) плюс номер столбца. Индекс ячеек в третьей строке равен количеству ячеек в двух первых строках плюс номер столбца. И так далее.

Для примера, Cells(4) та же ячейка, что и Cells(1, 4). Используется такое обозначение редко, тем более, что у разных версий Excel может быть разным количество столбцов и строк на рабочем листе.

По индексу можно обращаться к ячейке не только на всем рабочем листе, но и в отдельном диапазоне. Нумерация ячеек осуществляется в пределах заданного диапазона по тому же правилу: слева-направо и сверху-вниз. Вот индексы ячеек диапазона Range(«A1:C3»):

Индексы ячеек в диапазоне Range("A1:C3")

Обращение к ячейке Range("A1:C3").Cells(5) соответствует выражению Range("B2").

Обращение к ячейке по имени

Если ячейке на рабочем листе Excel присвоено имя (Формулы –> Присвоить имя), то обращаться к ней можно по присвоенному имени.

Допустим одной из ячеек присвоено имя – «Итого», тогда обратиться к ней можно – Range("Итого").

Запись информации в ячейку

Содержание ячейки определяется ее свойством «Value», которое в VBA Excel является свойством по умолчанию и его можно явно не указывать. Записывается информация в ячейку при помощи оператора присваивания «=»:

Cells(2, 4).Value = 15

Cells(2, 4) = 15

Range(«A1») = «Этот текст записываем в ячейку»

ActiveCell = 28 + 10*36

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

Чтение информации из ячейки

Считать информацию из ячейки в переменную можно также при помощи оператора присваивания «=»:

Sub Test()

Dim a1 As Integer, a2 As Integer, a3 As Integer

Range(«A3») = 6

Cells(2, 5) = 15

a1 = Range(«A3»)

a2 = Cells(2, 5)

a3 = a1 * a2

MsgBox a3

End Sub

Точно также можно обмениваться информацией между ячейками:

Cells(2, 2) = Range(«A4»)

Очистка значения ячейки

Очищается ячейка от значения с помощью метода ClearContents. Кроме того, можно присвоить ячейке значение нуля. пустой строки или Empty:

Cells(10, 2).ClearContents

Range(«D23») = 0

ActiveCell = «»

Cells(5, «D») = Empty

I want to get values from other sheets.

I have some values in Excel (sheet2) for example:

    A  B  C  D
    -  -  -  -  
1 | 2  5  9  12
2 | 5  8  4  5
3 | 3  1  2  6

I sum each column in row 4.

I’m working with these values in sheet2 but I want to get the result in sheet1.

When using my code in sheet2 I get the correct answer but when I try to use it in a different sheet I get the result of the values corresponding to the current sheet cells and not to sheet2.

I’m using With Application.WorksheetFunction.

How can I set sheet2 as the active sheet?

Community's user avatar

asked Nov 10, 2010 at 20:29

Apollon1954's user avatar

Try

 ThisWorkbook.Sheets("name of sheet 2").Range("A1")

to access a range in sheet 2 independently of where your code is or which sheet is currently active. To make sheet 2 the active sheet, try

 ThisWorkbook.Sheets("name of sheet 2").Activate

If you just need the sum of a row in a different sheet, there is no need for using VBA at all. Enter a formula like this in sheet 1:

=SUM([Name-Of-Sheet2]!A1:D1)

answered Nov 10, 2010 at 20:35

Doc Brown's user avatar

Doc BrownDoc Brown

19.6k7 gold badges52 silver badges88 bronze badges

That will be (for you very specific example)

ActiveWorkbook.worksheets("Sheet2").cells(aRow,aCol).Value=someval

OR

someVal=ActiveWorkbook.worksheets("Sheet2").cells(aRow,aCol).Value

So get a F1 click and read about Worksheets collection, which contains Worksheet objects, which in turn has a Cells collection, holding Cell objects…

answered Nov 10, 2010 at 20:35

jpinto3912's user avatar

jpinto3912jpinto3912

1,4652 gold badges12 silver badges19 bronze badges

Sub TEST()
Dim value1 As String
Dim value2 As String
value1 = ThisWorkbook.Sheets(1).Range("A1").Value 'value from sheet1
value2 = ThisWorkbook.Sheets(2).Range("A1").Value 'value from sheet2
If value1 = value2 Then ThisWorkbook.Sheets(2).Range("L1").Value = value1 'or 2
End Sub

This will compare two sheets cells values and if they match place the value on sheet 2 in column L.

answered Jul 16, 2016 at 8:16

James Heffer's user avatar

James HefferJames Heffer

6751 gold badge6 silver badges17 bronze badges

4

SomeVal=ActiveWorkbook.worksheets("Sheet2").cells(aRow,aCol).Value

did not work. However the following code only worked for me.

SomeVal = ThisWorkbook.Sheets(2).cells(aRow,aCol).Value

Zoe stands with Ukraine's user avatar

answered May 11, 2015 at 6:33

RanonKahn's user avatar

RanonKahnRanonKahn

84110 silver badges31 bronze badges

6

Try the worksheet activate command before you need data from the sheet:

objWorkbook.WorkSheets(1).Activate
objWorkbook.WorkSheets(2).Activate

DimaSan's user avatar

DimaSan

12.1k11 gold badges66 silver badges75 bronze badges

answered Jun 20, 2017 at 13:20

Mike's user avatar

Maybe you can use the script i am using to retrieve a certain cell value from another sheet back to a specific sheet.

Sub reviewRow()
Application.ScreenUpdating = False
Results = MsgBox("Do you want to View selected row?", vbYesNo, "")
If Results = vbYes And Range("C10") > 1 Then
i = Range("C10") //this is where i put the row number that i want to retrieve or review that can be changed as needed
Worksheets("Sheet1").Range("C6") = Worksheets("Sheet2").Range("C" & i) //sheet names can be changed as necessary
End if
Application.ScreenUpdating = True
End Sub

You can make a form using this and personalize it as needed.

answered Aug 23, 2019 at 4:50

Joni Depp's user avatar

Usually I use this code (into a VBA macro) for getting a cell’s value from another cell’s value from another sheet:

Range(«Y3») = ActiveWorkbook.Worksheets(«Reference»).Range(«X4»)

The cell Y3 is into a sheet that I called it «Calculate»
The cell X4 is into a sheet that I called it «Reference»
The VBA macro has been run when the «Calculate» in active sheet.

answered Jul 24, 2020 at 20:31

Kasra's user avatar

KasraKasra

1054 silver badges13 bronze badges

С этим макросом данные копируются на другой лист, но при этом стирается 1 строка названием столбцов, и следующая вставка ячеек происходит со второй строки, надо чтобы данные вносились после последней заполненной строки, при этом оставался заголов 1 строки с названиями столбцов
[moder]
Не надо цитировать посты целиком, это нарушение Правил форума.[/moder]

С этим макросом данные копируются на другой лист, но при этом стирается 1 строка названием столбцов, и следующая вставка ячеек происходит со второй строки, надо чтобы данные вносились после последней заполненной строки, при этом оставался заголов 1 строки с названиями столбцов
[moder]
Не надо цитировать посты целиком, это нарушение Правил форума.[/moder] Controler

Сообщение цитата удалена

С этим макросом данные копируются на другой лист, но при этом стирается 1 строка названием столбцов, и следующая вставка ячеек происходит со второй строки, надо чтобы данные вносились после последней заполненной строки, при этом оставался заголов 1 строки с названиями столбцов
[moder]
Не надо цитировать посты целиком, это нарушение Правил форума.[/moder] Автор — Controler
Дата добавления — 14.03.2016 в 08:56

Источник

5 различных методов переноса данных с одного листа Excel на другой

Как мы все знаем, Microsoft Excel – очень полезная и популярная рабочая книга, которую пользователи могут хранить любые важные данные.

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

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

Итак, просто внимательно просмотрите этот блог.

Практический сценарий

Хорошо, сначала я должен упомянуть, что я полный любитель когда дело доходит до превосходства. У меня нет опыта работы с VBA или макросами, поэтому, если вы не уверены, знаю ли я что-то еще, вероятно, не знаю.

У меня есть рабочая тетрадь с 6 листами внутри; один из листов – мастер; это просто остальные 6 листов, составленные в один большой. Мне нужно настроить его так, чтобы любые новые данные, введенные в новые отдельные листы, автоматически вводились в мастер-лист в первой пустой строке.

Столбцы не одинаковы на всех листах. . Надеюсь, здесь профи будет легче, чем мне, в этом я бился головой о стену. Я буду тщательно проверять эту ветку, поэтому, если вам понадобится дополнительная информация, просто дайте мне знать …

Заранее благодарим за любую помощь.

Источник: https://ccm.net/forum/affich-1019001-automatically-update-master-worksheet-from- другие рабочие листы

Методы передачи данных из одной книги Excel в другую

Существует множество различных способов переноса данных из одной книги Excel в другую , и они следующие:

Метод № 1: автоматически Обновление одного листа Excel с другого листа

В книге MS Excel мы можем легко обновить данные, связав один лист с другим. Эта ссылка известна как динамическая формула, которая автоматически передает данные из одной книги Excel в другую .

Одна книга Excel называется источником рабочий лист , где эта ссылка автоматически переносит данные рабочего листа, а другая книга называется целевым листом , в котором он автоматически обновляет данные рабочего листа и содержит формулу связи.

Ниже приведены две разные точки для связывания Excel. данные книги для автоматических обновлений.

1) С использованием функции копирования и вставки

  • В исходный лист, выберите и скопируйте данные, которые вы хотите связать на другом листе.
  • Теперь на целевом листе Вставьте данные, к которым вы связали исходный лист ячейки.
  • После этого выберите меню Вставить ссылку из Другие параметры вставки в книге Excel

  • Сохраните всю свою работу из исходного рабочего листа перед его закрытием.

2) Введите формулу вручную

  • Откройте целевой рабочий лист, коснитесь ячейки, в которой есть формула связи, и поместите знак равенства (=) поперек нее.
  • Теперь перейдите к источник ш eet и коснитесь ячейки, в которой есть данные. нажмите Enter на клавиатуре и сохраните свои задачи.

Примечание- Всегда помните одну вещь, что формат исходного рабочего листа и конечный рабочий лист одинаковы.

Метод № 2: обновить электронную таблицу Excel данными из другой электронной таблицы

Чтобы обновить электронные таблицы Excel данными из другой электронной таблицы, просто следуйте приведенным ниже пунктам, которые будут применимы к версии Excel 2019, 2016, 2013, 2010, 2007.

  • Сначала перейдите в меню Данные .
  • Выберите параметр Обновить все

  • Здесь вы должны увидеть, когда и как обновляется соединение
  • Теперь щелкните любую ячейку, содержащую подключенные данные.
  • Снова в меню Данные , cli ck на стрелке рядом с параметром Обновить все и выберите Свойства соединения

  • После этого в меню Использование установите параметры которые вы хотите изменить.
  • На вкладке Использование установите любые параметры, которые вы хотите изменить.

Примечание. Если размер книги данных Excel большой, я рекомендую регулярно проверять меню Включить фоновое обновление .

Метод № 3: Как автоматически скопировать данные из одной ячейки в другую в Excel

Чтобы скопировать данные из одной ячейки в другую в Excel, просто выполните следующие пункты, указанные ниже:

  • Сначала откройте исходный рабочий лист и целевой рабочий лист.
  • На исходном листе перейдите к листу, который вы хотите переместить или скопировать.
  • Теперь нажмите меню Главная и выберите параметр Формат .
  • Затем выберите «Переместить или скопировать лист» в разделе «Организовать листы».
  • После этого снова в в меню Главная выберите параметр Формат в группе ячеек.
  • Здесь в Переместить или скопировать выберите целевой лист, и Excel отобразит только открытые листы в списке.

  • Иначе, если вы хотите скопировать рабочий лист вместо перемещения, сделайте копию книги Excel перед

  • Наконец, нажмите ОК кнопку, чтобы скопировать или переместить целевую электронную таблицу Excel.

Метод № 4: Как скопировать данные с одного листа на другой в Excel с помощью формулы

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

  • Для копирования и вставки ячейки Excel в текущий рабочий лист Excel, , например; скопируйте ячейку От A1 до D5, вы можете просто выбрать целевую ячейку D5, затем ввести = A1 и нажать клавишу Enter, чтобы получить значение A1.
  • Для копирования и вставки ячеек с одного рабочего листа на другой, например скопируйте ячейку A1 листа Sheet1 в ячейку D5 листа Sheet2, выберите ячейку D5 на листе Sheet2, затем введите = Sheet1! A1 и нажмите клавишу Enter, чтобы получить значение.

Метод № 5: копирование данных с одного листа на другой в Excel с помощью макросов

С помощью макросов вы можете копировать данные с одного рабочего листа на другой , но перед этим вот несколько важных советов, о которых вы должны позаботиться:

  • Правильно сохраняйте расширение файла в вашу книгу Excel.
  • Не обязательно, чтобы ваша электронная таблица имела поддержку макросов для выполнения этой задачи.
  • Код Выбранные вами файлы также могут быть сохранены на другом листе.
  • Поскольку коды уже указывают детали, нет необходимости сначала активировать книгу или ячейки Excel.
  • Таким образом, ниже приведен код для выполнения этой задачи.

Sub OpenWorkbook ()
‘Открыть книгу
‘Метод открытия требует ссылки на полный путь к файлу.
Workbooks.Open «C: Users username Documents New Data.xlsx»

‘ Метод открытия имеет дополнительные параметры
‘Workbooks.Open (FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify, Converter, AddToMru, Local, CorruptLoad)

Sub CloseWorkbook ()
‘Закройте книгу
Workbooks («New Data.xlsx»). Close SaveChanges: = True
‘Метод Close имеет дополнительные параметры
‘ Workbooks.Close (SaveChanges, Filename, RouteWorkbook)

Рекомендуемое решение: средство восстановления и восстановления MS Excel

Когда вы выполняете свою работу в MS Excel и по ошибке или случайно делаете это не сохранять данные книги, иначе ваш рабочий лист будет удален, тогда у нас есть для вас профессиональный инструмент восстановления, например MS Excel Repair & Recovery Tool .

С С помощью этого инструмента вы также можете легко восстановить все потерянные данные или поврежденные файлы Excel. Это очень полезное программное обеспечение, позволяющее с легкостью возвращать все типы файлов MS Excel .

Шаги по использованию средства восстановления и восстановления MS Excel:

Заключение:

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

Я надеюсь, что вы удовлетворены приведенными выше методами, предоставленными вам по обновлению листа Excel .

Таким образом, используйте их правильно, и в будущем, если вы захотите узнать об этом, вы можете воспользоваться помощью указанных решений.

Маргрет

Маргрет Артур – предприниматель и эксперт по контент-маркетингу. Она ведет технические блоги и специализируется на MS Office, Excel и других технических вопросах. Ее отличительное искусство подачи технической информации простым для понимания языком очень впечатляет. Когда не пишет, она любит незапланированные путешествия.

MicroKnowledge, Inc.

Excel имеет отличный, недостаточно используемый способ извлечения данных из мастер-листа и записи подмножеств этих данных на других листах. Таким образом, Excel может действовать как функциональная база данных с помощью компонента под названием Microsoft Query.

Предположим, у меня есть сводная таблица всех вопросов технической поддержки, заданных в 2013 году, со столбцом под названием Назначено Кому.

Теперь мне нужны три отдельных листа, по одному для каждого представителя службы поддержки в столбце« Кому назначено », которые будут содержать только билеты службы поддержки этого человека. Но в дополнение к этому мне нужно следующее, чтобы быть возможно:

  • Новые данные, добавленные в основной лист, будут автоматически заполняться на соответствующих подмножествах листов.
  • Мастер-лист можно сортировать и фильтровать сам по себе, не затрагивая подмножества листов.
  • Функции и диаграммы, анализирующие данные на любом листе, должны автоматически подстраиваться под новые данные.

Звучит сложно? Это не так!

Приведенные ниже шаги объясняют, как настроить это с помощью Excel 2007 или более поздней версии.

(Эта функция также доступна в предыдущих версиях Excel. )

  1. Создайте все нужные листы в книге. Здесь я создал лист для каждого представителя службы поддержки.
  2. Создайте именованный диапазон для своей главной таблицы. Выделите данные в своей таблице (включая заголовки), введите e введите имя диапазона в поле имени слева от строки формул, затем нажмите Enter. Именованный диапазон необходим Microsoft Query для выбора данных для анализа.
  3. Создайте таблицу из вашей главной таблицы. Выделите свои данные, как описано выше. Откройте вкладку Вставить . Щелкните Таблица . Этот шаг немного избыточен, но преобразование ваших данных в таблицу имеет массу преимуществ, главное из которых состоит в том, что при добавлении в нее новых данных она автоматически расширяется для сбора новых данных. В свою очередь, это также автоматически расширит ваш именованный диапазон.
  4. Перейдите на лист, на который вы хотите поместить результаты запроса. Это может быть другой рабочий лист или даже другая книга.
  5. Щелкните вкладку Данные . Нажмите Из других источников . Выберите Из Microsoft Query . Откроется окно Выбрать источник данных .
  6. Выберите файлы Excel. Нажмите ОК . Откроется окно Выбрать книгу .
  7. Найдите и выберите книгу для запроса. Обратите внимание, что это может быть та же книга, что и открытая в данный момент. Нажмите ОК . Отображается Мастер запросов .
  8. Должны появиться ваши именованные диапазоны в левой части окна в виде таблицы. Я выберу все столбцы слева, чтобы показать их на листах подмножества. Щелкните Далее .
  9. На шаге мастера «Фильтровать данные» выберите фильтрацию данных, которые вы хотите отобразить на этом листе. Здесь я делаю лист Джерри, поэтому мне нужны только данные, где Назначено равно Джерри. Нажмите Далее .
  10. Выполните оставшиеся шаги в мастера, пока вы не будете готовы выбрать место назначения для ваших данных. В диалоговом окне Импорт данных убедитесь, что Таблица выбрана в качестве способа вставки ваших данных.. Я решил вставить данные в A1 на листе Джерри.
  11. Поскольку вы вставили данные в качестве таблицы у вас есть особая возможность Обновить, если вы вносите какие-либо изменения в основную таблицу. Вы можете найти Обновить на вкладке «Данные» или на вкладке «Работа с таблицами» Дизайн .

Вам понадобится повторить шаги 4–11 для каждого имеющегося у вас подмножества листов. Но как только все это настроено, у вас есть небольшая симпатичная база данных Excel!

Источник

Adblock
detector

Здравствуйте! Подскажите пожалуйста —
1. как передать через макрос значение одной ячейки (например ФИО) с книги 1 листа А  в другую ячейку (например тоже ФИО) но в книгу 2 на лист В.
2. И ещё вопрос — как в макросе через VBA  переписать вот эту формулу
=ЕСЛИ(J8<(1536*E8);»отсутствует (ниже средней нормы)»;J8-E8*1536)
т.е. в столбце «Норматив» должно высчитываться по этой формуле значение в зависимости от содержимого других двух столбцов.

3. и ещё…как через макрос перемножить два столбца, а значения вывести в третьем…простой вопрос, но сколько синктасисов не перебрала — сдаюсь…

Спасибо за внимание, буду очень признательна за помощь.



1.

Workbooks("Книга2").Sheets("Лист2").Range("B2") = Workbooks("Книга1").Sheets("Лист2").Range("A1").Value2.

Range("K8:K888").FormulaR1C1 = "=IF(R[6]C[9]<(1536*R[6]C[4]),""отсутствует (ниже средней нормы)"",R[6]C[9]-R[6]C[4]*1536)"
   Range("K8:K888") = Range("K8:K888").Value
3.

Range("D3:D6").FormulaR1C1 = "=RC[-2]*RC[-1]"
Range("D3:D6") = Range("D3:D6").Value

Скажи мне, кудесник, любимец ба’гов…

Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995


Ковырялась…и всё синтаксиси ошибки выдает…выкладываю пример — может так больше разберусь. Спасибо заранее за помощь!
Итак суть.
1. Из синих ячеек файлов К1, К2, К3…КN (где N-кол-во сотрудников) данные попадают в синие ячейки по строкам файла К0.
3. в красных ячейках надо через макрос получить перемножение.
2. а в зеленых ячейках — через макрос — результаты той самой формулы-условия….

при этом — сток столько, какая цифра стоит в желтой ячейке (кол-во сотрудников), собственно такое же кол-во файлов К, из которых нужно свести информацию в К0.

Ещё раз — огромное спасибо всем кто откликнется!


Пробуйте. Макрос копирует формулы по строкам ниже. Почему бы не оставить на листе формулы?
Кол-во файлов берется из желтой ячейки.


разобралась…Спасибо за вариант, но увы не то. Формулы нужны именно в макросе.
И в вашем примере 3 недостатка: 1.после обновления и повторного запуска файла — данные не обновляются, а добавляет ещё одни строки ниже.  2. зависимость от имени файла, т.е. мне все файлы надо будет переименовывать под одно имя с разным номером. 3. формулы на листе остались.

Но спасибо, буду знать и такие варинты, тоже пригодится!

Вопрос остается открытым, спасибо за внимание, очень жду помощи!


И ещё подобная задача…но вроде бы проще — организация копирования массива данных…:
на примере:
1. надо из файлов с названиями отделов скопировать кол-во сотрудников (Х) и сложить их в сводном файле в соответствующей ячейке, т.е. чтоб получить общее кол-во сотрудников организации.
2. в зависимости от Х (кол-во сотрудников в отделе) с файлов отделов диапозон с данными по всем сотрудникам  (можно целиком строки) копировался в сводный файл на тоже место, но следующий отдел копировался ниже…и так все подразделения в один общий список.
3. в первой колонке необходимо чтоб копировалось название того подразделения откуда сотрудники , т.е. копировалась ячейка с названием отдела из файла отдела.

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


Цитата: Rinalaz от 09.10.2011, 00:05
И в вашем примере 3 недостатка:

Выявленные Вами недостатки в примере, говорят о недостатке или отсутствии у Вас знаний в VBA.
Вам пытаются помочь, а Вы недостатки ищите.

Цитата: Rinalaz от 09.10.2011, 00:05
1.после обновления и повторного запуска файла — данные не обновляются, а добавляет ещё одни строки ниже.

Установите в начале процедуры команду — Range(«A5 : J100»).Clear и 1-й недостаток исключен.

Цитата: Rinalaz от 09.10.2011, 00:05
2. зависимость от имени файла, т.е. мне все файлы надо будет переименовывать под одно имя с разным номером.

Так ведь, имена файлов из Вашего же примера, получается, это уже Ваш недостаток!

Цитата: Rinalaz от 09.10.2011, 00:05
3. формулы на листе остались.

Формулы Вам ранее предложил уважаемый _Boroda_ .
Вставьте их в процедуру, и 3-й недостаток мсключен.
Успехов!

Может и я на что сгожусь … Если сгодился, можете меня по+благодарить+.


я не ищу недостатки…я просто не знаю каким другим словом назвать то, чего не хвататет…извинясь, если неправильно выразилась…
а имена файлов просто могут быть разными…а в пример — ну так быстрее и проще… в общем…
понимать понимаю, но связать все не получается — синтаксис замучал, ошибка на ошибке..знаний не хватает много, просто знаю что можно автоматизировать — вот и хочется…я вообще документовед и не хочется сидеть и тупым перекопированием заниматься… :-[ вот и подумала, что точно можно макросом …в вузе когда-то делала…и переодически эта задача всплывает, но её меняют…вот и приходится варьировать…


Эксель изощрён, но не злонамерен.


Rinalaz, Если Вы хотите что бы Вам помогли, выложите пару, тройку настоящих файлов (сотрудников). Фамилии, если они секретные, замените на Иванов, Петров, Сидоров. Укажите диск и имя папки в которой они лежат. Выложите свой рабочий файл, а не файл-пример К0.
Теперь, в файле-примере К0, колонка F (баллы) участвует в расчетах колонок H и J.
А откуда берЁтся информация в колонку F? Если вводится вручную после копирования сотрудников то, каким же образом макрос сможет  рассчитает результат колонок H и J во время копирования, где он  возьмет данные колонки F?  Значит, без формул не обойтись.
Эксель могуч но, не всесилен.

Может и я на что сгожусь … Если сгодился, можете меня по+благодарить+.


Вот реальный пример. Суть — из файлов кафедр данные копируются в один сводный файл.
1. Количество сотрудников в ячейке N3 -она в каждом файле. Надо чтоб в ячейке N3 файла «сводный» была сумма из N3 всех файлов.
по коду предложенным _Boroda_ надо знать имя файла, а оно может быть разным..

Workbooks(«Сводный по академии»).Sheets(«ИТОГИ»).Range(«N3») = СУММА (???) Workbooks(«ЛЮБОЕ ИМЯ«).Sheets(«ИТОГИ»).Range(«N3»).Value

как понимаю надо накой переменной присвоить путь файла и подставлять этот путь с переменным именем в эту формулу…но не получается — не работает…

2.далее в первый столбец файла «сводный по академии» начиная с ячейки А8 и по Ах (где х=N3 того файла откуда копируем) копировался код кафедры, который хранится в ячейке О2.
далее с ячейки Ах+1 копируется код следующей кафедры  и т.д. вниз попрядку…в примере накопировала данных как выглядит.
как я понимаю, что формула таже, но тут меняется кол-во строк и начальный адрес строки от которой начинается копироваться код следующей кафедры.

3. Далее можно с формулами (как я хотела: копировать только сами данные (6 столбцов), а то что можно вычислить (остальные 5 столбцов) в сводном файле — сново их вычислить в сводном), а можно БЕз. И я решила упростить задачу: просто перекопировать все данные из всего диапозона.
Т.Е.
в остальные ячейки файла «сводный по академии» из файла кафедры копируется диапозон ячеек  $B8:$Nх, где х — кол-во сотрудников кафедры (она же N3),   в    аналогичный диапозон по столбцам, а по строкам вниз по порядку (т.е. под данными одной кафедры копируются данные другой кафедры).

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

Буду очень признательна за помощь. Сейчас в примере файл «сводный по академии» уже заполнен данными из файлов кафедр, а надо чтоб это копировалось макросом. Т.к. все данные все кафедры могут править и менять :-( и надо будет 100 раз обновлять и делать данное действо.


Вот например. С открытием файлов. Код в Модуль11.


Чёто намудрил, вроде работает.
Возможно есть варианты более быстродействующие но,
чем богаты…
Дерзайте.

Может и я на что сгожусь … Если сгодился, можете меня по+благодарить+.


Уважаемые nilem и Wasilic, всё работает!
даже разные способы, многое почерпнула для себя. СПАСИБО огромное!!!!


Понравилась статья? Поделить с друзьями:
  • Excel макросы оператор for
  • Excel макросы найти ячейку
  • Excel макрос экспорт в pdf
  • Excel макрос что такое value
  • Excel макрос число пропись