Макросы в excel вставить значение

Специальная вставка (метод PasteSpecial объекта Range) применяется в VBA Excel для вставки ячеек из буфера обмена с учетом заданных параметров.

Range.PasteSpecial (специальная вставка) – это метод, который вставляет диапазон ячеек, скопированный в буфер обмена, из буфера обмена в указанное место на рабочем листе с учетом заданных параметров специальной вставки.

Синтаксис

Range.PasteSpecial (Paste, Operation, SkipBlanks, Transpose)

Специальная вставка работает только с данными ячеек, скопированными в буфер обмена методом Range.Copy. При попытке применить метод Range.PasteSpecial к ячейкам, вырезанным в буфер обмена методом Range.Cut, возникает ошибка.

Параметры специальной вставки

Список параметров метода Range.PasteSpecial:

Параметры Описание
Paste Необязательный параметр. Константа из коллекции XlPasteType, указывающая на часть данных вставляемого диапазона, которую следует вставить. По умолчанию вставляются все данные.
Operation Необязательный параметр. Константа из коллекции XlPasteSpecialOperation, указывающая на математические операции, которые следует провести со скопированными данными и данными в ячейках назначения. По умолчанию вычисления не производятся.
SkipBlanks Необязательный параметр. Булево значение, которое указывает, вставлять ли в конечный диапазон пустые ячейки: True – не вставлять, False – вставлять (значение по умолчанию).
Transpose Необязательный параметр. Булево значение, которое указывает, следует ли транспонировать строки и столбцы при вставке диапазона: True – транспонировать, False – не транспонировать (значение по умолчанию).

Смотрите другой способ транспонировать диапазоны ячеек и двумерные массивы.

Константы XlPasteType

Список констант из коллекции XlPasteType, которые могут быть использованы в качестве аргумента параметра Paste:

Константа Значение Описание
xlPasteAll -4104 Вставка всех данных (по умолчанию).
xlPasteAllExceptBorders 7 Вставка всех данных, кроме границ.
xlPasteAllMergingConditionalFormats 14 Вставка всех данных со слиянием условных форматов исходного и нового диапазонов.
xlPasteAllUsingSourceTheme 13 Вставка всех данных с использованием исходной темы.
xlPasteColumnWidths 8 Вставка ширины столбцов.
xlPasteComments -4144 Вставка комментариев.
xlPasteFormats -4122 Вставка форматов исходного диапазона.
xlPasteFormulas -4123 Вставка формул.
xlPasteFormulasAndNumberFormats 11 Вставка формул и форматов чисел.
xlPasteValidation 6 Вставка правил проверки данных из ячеек исходного диапазона в новый диапазон.
xlPasteValues -4163 Вставка значений.
xlPasteValuesAndNumberFormats 12 Вставка значений и форматов чисел.

Константы XlPasteSpecialOperation

Список констант из коллекции XlPasteSpecialOperation, которые могут быть использованы в качестве аргумента параметра Operation:

Константа Значение Описание
xlPasteSpecialOperationAdd 2 Скопированные данные будут добавлены к значениям в ячейках назначения.
xlPasteSpecialOperationDivide 5 Скопированные данные разделят значения в ячейках назначения.
xlPasteSpecialOperationMultiply 4 Скопированные данные будут перемножены со значениями в ячейках назначения.
xlPasteSpecialOperationNone -4142 Вычисления не выполняются при вставке данных (по умолчанию).
xlPasteSpecialOperationSubtract 3 Скопированные данные будут вычтены из значений в ячейках назначения.

Примеры

Примеры копирования и специальной вставки актуальны для диапазона "A1:B8" активного листа, ячейки которого заполнены числами:

‘Копирование диапазона ячеек в буфер обмена:

Range(«A1:B8»).Copy

‘Специальная вставка только значений:

Range(«D1»).PasteSpecial Paste:=xlPasteValues

‘Специальная вставка с делением значений ячеек конечного

‘диапазона на значения ячеек диапазона из буфера обмена:

Range(«D1»).PasteSpecial Operation:=xlPasteSpecialOperationDivide

‘Специальная вставка только значений с транспонированием строк и столбцов:

Range(«G1»).PasteSpecial Paste:=xlPasteValues, Transpose:=True


excelVBA or Visual Basic for Application is an integration of Microsoft’s VisualBasic  with MS office applications such as MS Excel. VBA is run within the MS Office applications to build customized solutions and programs. These enhance the capabilities of those applications. Today we look at the important Paste Special feature of Excel and VBA. We assume that you have working knowledge of MS Excel and VBA. However, if you are not familiar with the concepts and commands of Microsoft Excel, we recommend that you go through our introductory VBA tutorial .

What is a Macro?

A  Macro is a compact piece of code which is created to customize MS office applications. Macros are created in VBA, which is a subset of Visual Basic and specifically designed to be user friendly. Instead of manually, coding repetitive tasks, it is more efficient to call Macros whenever required. This saves time, effort and money. To learn more about macros, you can take this course on VBA macros.

MS Excel Paste Special Commands

Paste Special is one of the features of Microsoft Office suite. MS Excel permits you to paste only specific aspects of cell data by using the Paste Special Feature. For example, if you need the results of a formula, but not the formula itself, you can choose to paste only the values calculated as the result of the formula. Pastes Special command is used to paste a wide variety of data aspects. Note that the Paste Special option is not applicable to cut data. In order for it to work a cell or range of cells must be copied.

How to use Paste Special in Excel 2010

When you copy a cell or range of cells, and paste it in the destination area you have two methods. They are Paste and Paste Special. Simple Paste does not change anything. However, Paste Special offers a number of options. Here we look at all the options offered in Paste Special Command.

  • All–This is similar to the conventional paste.
  • Formulas- pastes all the text, numbers and formulas in the selected cell without their formatting.
  • Values– This option converts formulas from the copied cell to their calculated values in the destination cell.
  • Formats– Here the content is not copied, only the formatting is copied from the source cells to the destination cells.
  • Comments– This option pastes only the notes from the source cells to the destination cells.
  • Validation– The option pastes only the Data Validation commands into the destination cell range.
  • All Using Source Theme- When you select this option the cell styles are also copied along with the other content.
  • All Except Borders– The entire content and the formatting without any borders is pasted into the destination cell range.
  • Column Widths– Here the column widths of the sources cells are applied to the destination cells.
  • Formulas and Number Formats- Includes the number formats of the source cells to the destination cells.
  • Values and Number Formats – Here two things happen. Firstly, formulas are converted to their calculated values in the destination cells. Also the number formats of the source are applied to the destination cells.
  • All Merging– When you select this option, the conditional formatting of the source cells are applied to the destination cell range.

Mathematical Operations

Paste Special also offers to do some simple mathematical calculations based on the values in source cells and the values in the destination cell range.

  • None– This is the default setting. In this no operation is performed.
  • Add– The values of the source cells are added to the value(s) in the destination cell.
  • Subtract– This option subtracts the values copied from the source cell, from the destination cells values.
  • Multiply-This option multiplies the values copied with the values of the destination cells. The result is stored in the destination cell(s).
  • Divide- This is similar to multiply option except that division is done instead of multiplication.

Other options of Paste Special:

  • Skip Blanks– If this option is selected only the non-empty cells are pasted.
  • Transpose– Select this option if you want to change the orientation of the pasted entries.
  • Paste Link– Select this option to establish a link between the source and destination cells. Here when the values of the original cells are updated or changed, the values of the destination cells are also correspondingly updated.

To learn about other aspects of Excel 2010 VBA you can take this course.

Excel VBA PasteSpecialMethod

VBA PasteSpecial command pastes a range of cells from the clipboard in to the destination range of cells. The syntax of VBA PasteSpecial looks like this

expression .PasteSpecial(Paste, Operation, SkipBlanks, Transpose)

Where expression is a variable that represents a Range object.Let’s take a look at the various parameters of VBA PasteSpecial method. Note that the parameters are all optional.

Name

Required/Optional

Data Type

Description

Paste Optional XlPasteType The specific part of the cell range to be pasted.
Operation Optional XlPasteSpecialOperation Initiates the paste operation.
SkipBlanks Optional Variant Trueto  not paste blank cells in the range on the Clipboard into the destination range. The default value is False.
Transpose Optional Variant True to transpose rows and columns when the specified range is pasted.The default value is False.

Example 1

This is a simple example which demonstrates VBA PasteSpecial Method:

With Worksheets("Sheet1")
.Range("A1:A5").Copy
.Range("D1:D5").PasteSpecial _
Operation:=xlPasteSpecialOperationAdd
End With

The values in cells D1:D5 on Sheet 1 is replaced with the sum of the existing content and the contents of cells A1:A5.

To see how this actually works, try out this VBA macro course by Mr Excel.

Example 2: Create a Macro to paste values into a new worksheet

We assume that you know how to open and work on VBA editor. We also assume that you are familiar with Macros in Excel VBA.  If not, we suggest that you read our tutorials on the same.  Here we look a program to create a macro to paste values into a new worksheet.

Sub ExamplePasteSpecial()
Dim ws As Worksheet, wb As Workbook
Set ws = ActiveSheet
Set wb = Workbooks.Add(xlWBATWorksheet)
ws.Range("C5:L19").Copy
wb.Sheets(1).Range("A1").PasteSpecial Paste:=xlPasteValues
wb.Sheets(1).Range("A1").PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False
End Sub

In the program, we declare “ws” as variable of type Worksheet and “wb” as variable of type Workbook.  The source cell range is C5: L19. Note that the PasteSpecial function is invoked twice. In the first invocation, only the values calculated by the formula are pasted into the destination range. In the second invocation, only the formatting is copied and not the content.

Example 3: To Copy a Selected Cell and Paste it into another Cell

Sub PasteSpecial1()
Dim Sell_1As Range
Dim NewRowAs Long
Dim RngAs Range
Application.ScreenUpdating = False
NewRow = 401
Set Rng = Range("A1:A400")
For Each Sell_1InRng
Rows(Sell_1.Row & ":" &Sell_1.Row).Select
Selection.Copy
Rows(NewRow& ":" &NewRow).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
NewRow = NewRow + 1
Next Sell_1
Range("A1").Select
Application.ScreenUpdating = True
End Sub

The PasteSpecial Function copies only the values to the destination cell range. No mathematical operations are performed, no blank cells are omitted and the transpose parameter is set to false. This is a classic example of using PasteSpecial Command in Excel VBA to create a Macro which automates the process.

Example 4:  Excel VBA Macro to Copy, Paste Special Values

Frequently we use formulas to extract data on to a specific worksheet. Then we want to remove the formulas and just keep the data. For that you would copy your selection , right click, chose paste special, select values, click ok and finally hit the enter key to achieve the desired results. Alternatively you could use the programming code below and assign it into a Macro to perform all the six steps mentioned above with a simple mouse click.

Sub CopyPasteSpecVal_1()
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
End Sub

In this program, the formulas are not copied. The destination cell range contains only the calculated values using the formulas. No blanks are skipped. The source cells are not transposed and no mathematical operations are done.

It does not make sense for programmers today to manually enter code and data. It is far better to have Macros to do this especially if the tasks are tedious and repetitive. The PasteSpecial function offers a number of useful options to paste data from the source range to the destination range. Use it wisely and benefit from its power. We hope this tutorial on Excel VBA Paste Special Method was informative. You can always learn more about Excel VBA with this awesome course from Infinite Skills.

 

Друзья,  

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

  Sub Button1_Click()  
Dim Rng As Range  
Dim rCell As Range  
Dim LastRow As Long  
Set Rng = Selection  
LastRow = Cells(Rows.Count, 1).End(xlUp).Row  
  For Each rCell In Rng  
     If Not IsEmpty(rCell) Then  
        rCell.Copy Cells(LastRow + 1, 1)  
        LastRow = LastRow + 1  
      End If  
  Next  
End Sub

 

McCinly

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

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

Sub Button1_Click()  
Dim Rng As Range  
Dim rCell As Range  
Dim LastRow As Long  
Set Rng = Selection  
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _ skipBlanks:=False, Transpose:=False  
End Sub

 

McCinly

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

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

Sub Button1_Click()  
Dim Rng As Range  
Set Rng = Selection  
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _ skipBlanks:=False, Transpose:=False  
End Sub  

  Даже так

 

{quote}{login=McCinly}{date=13.02.2010 03:27}{thema=}{post}Sub Button1_Click()  
Dim Rng As Range  
Set Rng = Selection  
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _ skipBlanks:=False, Transpose:=False  
End Sub  

  Даже так{/post}{/quote}  

  спасибо, но вот эта строчка не проходит  
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _ skipBlanks:=False, Transpose:=False

 

McCinly

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

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

Подчеркивание это перенос строки, его надо убрать.  

  Выделяете ячейки для копирования потом ctrl-c, ставите куда надо жмете кнопку, вставляются значения.

 

{quote}{login=McCinly}{date=13.02.2010 03:44}{thema=}{post}Подчеркивание это перенос строки, его надо убрать.  

  Выделяете ячейки для копирования потом ctrl-c, ставите куда надо жмете кнопку, вставляются значения.{/post}{/quote}  

  да нет… я не это имел ввиду )). Вы взгляните на верхний скрипт… он вот отсюда  

http://www.planetaexcel.ru/forum.php?thread_id=13439&forum_id=129&page_forum=lastpage&allnum_forum=0#post98825

 

Guest

Гость

#7

13.02.2010 15:56:39

{quote}{login=The_Prist}{date=13.02.2010 03:52}{thema=}{post}Sub Button1_Click()  
Dim rCell As Range  
Dim LastRow As Long  
For Each rCell In Selection  
If Not IsEmpty(rCell) Then  
LastRow = Cells(Rows.Count, 1).End(xlUp).Row+1  
rCell.Copy    
Cells(LastRow, 1).PasteSpecial Paste:=xlPasteValues  
End If  
Next  
End Sub{/post}{/quote}  

  супер! надеюсь что это будет еще кому-то полезно кроме меня!  
спасибо!

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

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

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

Полный путь к ячейке A1 в Книге1 на Листе1 можно записать двумя вариантами:

  • С помощью Range
  • С помощью Cells

Пример 1: Обратиться к ячейке A3 находящейся в Книге1 на Листе1

Workbooks("Книга1.xls").Sheets("Лист1").Range("A3") ' Обратиться к ячейке A3
Workbooks("Книга1.xls").Sheets("Лист1").Cells(3, 1) ' Обратиться к ячейке в 3-й строке и 1-й колонке (A3)

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

Пример 2: Обратиться к ячейке A1 в текущей книге на активном листе

Range("A1")
Cells(1, 1)

Если всё же путь к книге или листу необходим, но не хочется его писать при каждом обращении к ячейкам, можно использовать конструкцию With End With. При этом, обращаясь к ячейкам, необходимо использовать в начале «.» (точку).

Пример 3: Обратиться к ячейке A1 и B1 в Книге1 на Листе2.

With Workbooks("Книга1").Sheets("Лист2")
  ' Вывести значение ячейки A1, которая находится на Листе2
  MsgBox .Range("A1")
  ' Вывести значение ячейки B1, которая находится на Листе2
  MsgBox .Range("B1")
End With

Так же, можно обратиться и к активной (выбранной в данный момент времени) ячейке.

Пример 4: Обратиться к активной ячейке на Листе3 текущей книги.

Application.ActiveCell ' полная запись
ActiveCell ' краткая запись

Чтение значения из ячейки

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

  • Value2 — базовое значение ячейки, т.е. как оно хранится в самом Excel-е. В связи с чем, например, дата будет прочтена как число от 1 до 2958466, а время будет прочитано как дробное число. Value2 — самый быстрый способ чтения значения, т.к. не происходит никаких преобразований.
  • Value — значение ячейки, приведенное к типу ячейки. Если ячейка хранит дату, будет приведено к типу Date. Если ячейка отформатирована как валюта, будет преобразована к типу Currency (в связи с чем, знаки с 5-го и далее будут усечены).
  • Text — визуальное отображение значения ячейки. Например, если ячейка, содержит дату в виде «число месяц прописью год», то Text (в отличие от Value и Value2) именно в таком виде и вернет значение. Использовать Text нужно осторожно, т.к., если, например, значение не входит в ячейку и отображается в виде «#####» то Text вернет вам не само значение, а эти самые «решетки».

По-умолчанию, если при обращении к ячейке не указывать способ чтения значения, то используется способ Value.

Пример 5: В ячейке A1 активного листа находится дата 01.03.2018. Для ячейки выбран формат «14 марта 2001 г.». Необходимо прочитать значение ячейки всеми перечисленными выше способами и отобразить в диалоговом окне.

MsgBox Cells(1, 1)        ' выведет 01.03.2018
MsgBox Cells(1, 1).Value  ' выведет 01.03.2018
MsgBox Cells(1, 1).Value2 ' выведет 43160
MsgBox Cells(1, 1).Text   ' выведет 01 марта 2018 г.

Dim d As Date
d = Cells(1, 1).Value2    ' числовое представление даты преобразуется в тип Date
MsgBox d                  ' выведет 01.03.2018

Пример 6: В ячейке С1 активного листа находится значение 123,456789. Для ячейки выбран формат «Денежный» с 3 десятичными знаками. Необходимо прочитать значение ячейки всеми перечисленными выше способами и отобразить в диалоговом окне.

MsgBox Range("C1")        ' выведет 123,4568
MsgBox Range("C1").Value  ' выведет 123,4568
MsgBox Range("C1").Value2 ' выведет 123,456789
MsgBox Range("C1").Text   ' выведет 123,457р.

Dim c As Currency
c = Range("C1").Value2    ' значение преобразуется в тип Currency
MsgBox c                  ' выведет 123,4568

Dim d As Double
d = Range("C1").Value2    ' значение преобразуется в тип Double
MsgBox d                  ' выведет 123,456789

При присвоении значения переменной или элементу массива, необходимо учитывать тип переменной. Например, если оператором Dim задан тип Integer, а в ячейке находится текст, при выполнении произойдет ошибка «Type mismatch». Как определить тип значения в ячейке, рассказано в следующей статье.

Пример 7: В ячейке B1 активного листа находится текст. Прочитать значение ячейки в переменную.

Dim s As String
Dim i As Integer
s = Range("B1").Value2 ' успех
i = Range("B1").Value2 ' ошибка

Таким образом, разница между Text, Value и Value2 в способе получения значения. Очевидно, что Value2 наиболее предпочтителен, но при преобразовании даты в текст (например, чтобы показать значение пользователю), нужно использовать функцию Format.

Запись значения в ячейку

Осуществить запись значения в ячейку можно 2 способами: с помощью Value и Value2. Использование Text для записи значения не возможно, т.к. это свойство только для чтения.

Пример 8: Записать в ячейку A1 активного листа значение 123,45

Range("A1") = 123.45
Range("A1").Value = 123.45
Range("A1").Value2 = 123.45

Все три строки запишут в A1 одно и то же значение.

Пример 9: Записать в ячейку A2 активного листа дату 1 марта 2018 года

Cells(2, 1) = #3/1/2018#
Cells(2, 1).Value = #3/1/2018#
Cells(2, 1).Value2 = #3/1/2018#

В данном примере тоже запишется одно и то же значение в ячейку A2 активного листа.

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

Данный код добавляет в контекстное меню ячейки два новых действия:

1. Вставить только значения;
2. Вставить значения с транспонированием.

Нижеуказанный макрос лучше всего поместить в «личную книгу макросов» (PERSONAL)

В модуль «ЭтаКнига» файла PERSONAL вставляем:

Private Sub Workbook_Open()
  MyComBars
End sub

Также создаем новый модуль (в книге PERSONAL), в который помещаем следующий код:

Option Private Module
 
Sub MyComBars()
     Application.CommandBars("cell").Reset    'возвращаем стандартный ComBars
    With Application.CommandBars("cell").Controls.Add(Type:=1, Before:=5)
         .OnAction = "PasteValues"    ' назначаем кнопке макрос
        .Caption = "Вставить значения"
     End With
 
     With Application.CommandBars("cell").Controls.Add(Type:=1, Before:=6)
         .OnAction = "PasteTranspose"    ' назначаем кнопке макрос
        .Caption = "Вставить с транспонированием"
     End With
End Sub
 
Sub PasteValues()
On Error Resume Next
     Selection.PasteSpecial Paste:=xlPasteValues
End Sub
 
Sub PasteTranspose()
On Error Resume Next
     Selection.PasteSpecial Paste:=xlPasteAll, Transpose:=True
End Sub

by LightZ
 

  • 22784 просмотра

Не получается применить макрос? Не удаётся изменить код под свои нужды?

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

0 / 0 / 0

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

Сообщений: 9

1

Вставлять в выбранную ячейку значение из выбранного листа

29.01.2019, 11:16. Показов 5600. Ответов 9


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

Здравствуйте, форумчане. Помогите, пожалуйста, решить одну задачу.
Мне нужен макрос, который бы вставлял в выбранную ячейку значение из выбранного листа. Например: На листе 4 в ячейку А1 вставлялось значение из листа 1 ячейки А1. При повторном запуске макроса вставлялось значение из ячейки A2 и т.д. Вставляемые значения не должны при этом повторяться.



0



GeoCod

235 / 146 / 41

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

Сообщений: 542

29.01.2019, 21:01

2

Один из вариантов решения может быть следующим:
1. Определяем границы данных в столбце А:А на листе 1, например, через End(xlUp)
2. Вносим все данные в массив (через Range или циклом)
3. Циклом делаем перебор значений с проверкой на повторяемость
4. Все уникальные значения фиксируем во втором массиве
5. По окончанию перебора всех значений выводим значения второго массива на лист 4
6. End Sub

Добавлено через 11 минут

Но, можно пойти другим путем

Visual Basic
1
2
3
4
5
6
Sub Макрос1()
Application.ScreenUpdating = False
    Sheets("1").Range("A1:A11").Copy Sheets("4").Range("A1")
    Sheets("4").Range("$A$1:$A$11").RemoveDuplicates Columns:=1, Header:=xlNo
Application.ScreenUpdating = True
End Sub

Добавлено через 2 минуты
Код для затравки ))
В него бы добавить определение границ копируемого диапазона и соответственно динамически менять диапазон удаления дубликатов на листе «4»



0



0 / 0 / 0

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

Сообщений: 9

30.01.2019, 11:06

 [ТС]

3

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



0



235 / 146 / 41

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

Сообщений: 542

30.01.2019, 11:20

4

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

Цитата
Сообщение от GeoCod
Посмотреть сообщение

Sheets(«1»).Range(«A1:A11»).Copy Sheets(«4»).Range(«A1»)

Сравнить значения в А1 и скопированной не сложно. Начинайте, а что будет непонятно поможем



0



11aleksey11

0 / 0 / 0

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

Сообщений: 9

24.02.2019, 10:32

 [ТС]

5

Что-то никак не могу разобраться… Должно получиться что-то вроде вот этого

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub copycell()
 
Dim a As Integer
 
For a = 1 To Count.Sheets("1").Range("A:A")
 
If Sheets("4").Range("A1").Value <> Sheets("1").Cells(a, 1).Value Then
 
Sheets("1").Cells(a, 1).copy Sheets("4").Range("A1").Paste
Else
Next a
 
 
End If
 
End Sub

Но не работает…



0



GeoCod

235 / 146 / 41

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

Сообщений: 542

24.02.2019, 11:49

6

Цитата
Сообщение от 11aleksey11
Посмотреть сообщение

Count.Sheets(«1»).Range(«A:A»)

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

Цитата
Сообщение от GeoCod
Посмотреть сообщение

Определяем границы данных в столбце А:А на листе 1, например, через End(xlUp)

Visual Basic
1
Sheets("1").Cells(Rows.Count, 1).End(xlUp).Row

Цитата
Сообщение от 11aleksey11
Посмотреть сообщение

Но не работает…

Не работает потому, что Excel не знает объекта Count со свойствами Sheets(«1»).Range(«A:A»)
К тому же, вы некорректно организовали циклы. Цикл If… End If должен быть целиком включен в цикл For… Next

Добавлено через 30 минут
Вообще же, вы ставите достаточно противоречивые требования. С одной стороны

Цитата
Сообщение от 11aleksey11
Посмотреть сообщение

Вставляемые значения не должны при этом повторяться.

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

Цитата
Сообщение от 11aleksey11
Посмотреть сообщение

при первом запуске вставлял первую ячейку, при втором вторую, если значение во второй ячейке не равно значению первой, в этом случае должно вставляться значение из третей ячейки, если оно не равно первой

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

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub copycell()
Dim i As Integer, lLastRow As Long
Application.ScreenUpdating = False  'отключаем обновление экрана
 
If ActiveSheet.Range("A1") = "" Then
   Sheets("1").Range("A1").Copy ActiveSheet.Range("A1")
Else
   lLastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row  'Определяем нижнюю заполненную ячейку в столбце А:А
   If ActiveSheet.Cells(lLastRow, 1) <> Sheets("1").Cells(lLastRow + 1, 1) Then
      ' здесь сделать цикл перебора ячеек и сравнения с введенными данными на текущем листе
      Sheets("1").Cells(lLastRow + 1, 1).Copy ActiveSheet.Cells(lLastRow + 1, 1)    ' для примера
   End If
End If
 
Application.ScreenUpdating = True   'включаем обновление экрана
End Sub



0



11aleksey11

0 / 0 / 0

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

Сообщений: 9

24.02.2019, 14:46

 [ТС]

7

Цитата
Сообщение от GeoCod
Посмотреть сообщение

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

Этот способ вставляет значения в столбец, а нужно, чтобы он вставлял эти значения в одну ячейку поочереди (т.е. при перво запуске 1, при повторном 2, потом 3, потом 4) в ячейку A1.

Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub copycell()
 
Dim a As Integer
For a = a + 1 To 11
If Sheets("4").Range("A1") <> Sheets("1").Cells(a, 1) Then
Sheets("1").Cells(a, 1).Copy Sheets("4").Cells(1, 1)
End If
Next a
 
End Sub

Что-то вроде этого, но этот цикл вставляет значения без остановки, пока не дойдёт до конца. А нужно, чтобы после каждого копирования макрос прерывался. При повторном запуске начинал с того места, на котором до этого закончил.



0



235 / 146 / 41

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

Сообщений: 542

24.02.2019, 15:32

8

Цитата
Сообщение от 11aleksey11
Посмотреть сообщение

нужно, чтобы он вставлял эти значения в одну ячейку поочереди

Тогда вам нужно создавать массив (словарь, коллекцию — как нравится) с уникальными значениями из листа «1», как это сделать, например, написано тут, тут и тут
И нужно где-то на листе (в какой-либо ячейке) организовать счетчик запусков макроса, по которому и выводить порядковый элемент массива.



0



2632 / 1637 / 745

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

Сообщений: 5,143

24.02.2019, 22:45

9

11aleksey11,

Как вариант….

Ячейка D1 (выделена желтым) показывает номер строки для следующего цикла.



0



0 / 0 / 0

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

Сообщений: 9

03.03.2019, 11:51

 [ТС]

10

Всем спасибо, всё получилось!)



0



IT_Exp

Эксперт

87844 / 49110 / 22898

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

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

03.03.2019, 11:51

10

Skip to content

На чтение 2 мин. Просмотров 9.2k.

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

Содержание

  1. Как макрос работает
  2. Код макроса
  3. Как использовать

Как макрос работает

В этом макросе, мы используем метод Copy объекта Range, чтобы скопировать данные из D6: D17 и вставить в L6: L17. Обратите внимание на использование целевого аргумента. Этот аргумент говорит Excel, где нужно вставить данные.

Код макроса

Sub KopirovanieDannih()
'Копируем данные
Sheets("Лист1").Range("D6:D17").Copy _
'Вставляем данные
Destination:=Sheets("Лист1").Range("L6:L17")
End Sub

При работе с таблицей, иногда приходится копировать формулы и вставлять их в качестве значений. Для этого в макросе, вы можете использовать метод PasteSpecial. В этом примере мы копируем формулы F6:F17 в M6:M17. Обратите внимание на то, что мы не только используем xlPasteValues, также xlPasteFormats, чтобы применить форматирование из скопированного диапазона.

Sub KopirovanieDannihIFormata()
Sheets("Лист1").Range("F6:F17").Copy
Sheets("Лист1").Range("M6:M17").PasteSpecial xlPasteValues
Sheets("Лист1").Range("M6:M17").PasteSpecial xlPasteFormats
End Sub

Как использовать

Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:

  1. Активируйте редактор Visual Basic, нажав ALT + F11 на клавиатуре.
  2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
  3. Выберите Insert➜Module.
  4. Введите или вставьте код.

Понравилась статья? Поделить с друзьями:
  • Макросы visual basic for excel
  • Макросы в excel для чайников с нуля
  • Макросы в excel ворд
  • Макросы vba не поддерживаются в этой версии excel
  • Макросы в excel для суммирования