Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Копирование строк с одного листа на другой VBA.
 
Цитата
8написал:
все работает, но сумма сотрудников не вставляется столбец K Листа Табель, а копироваться с Листа Список J9;J13
Вот окончательный вариант. Думаю, изначально вы хотели что-то типа такого:
Скрытый текст
Изменено: kakaccc - 05.03.2024 17:57:51
Копирование строк с одного листа на другой VBA.
 
Тогда так:
Скрытый текст
Изменено: kakaccc - 05.03.2024 17:52:39
Копирование строк с одного листа на другой VBA.
 
Упростить никак. Надо все переписать. Сотрите все..., и оставьте вот этот один макрос:
Скрытый текст

Где взять вид платежа и сумму?
Изменено: kakaccc - 05.03.2024 17:52:55
Копирование строк с одного листа на другой VBA.
 
Работает в столбцах G и J. Можно прописать и для суммы. Проверьте
Изменено: kakaccc - 05.03.2024 15:42:32
Копирование строк с одного листа на другой VBA.
 
Цитата
написал:
Sub уроки()
Прикрепите файл.
Копирование строк с одного листа на другой VBA.
 
...

'zadaem massiv dannyh
Worksheets("1").Activate
MyValues = Worksheets("1").Range("A1").CurrentRegion
Worksheets("2").Activate

Set MyRange = Worksheets("2").Range(Cells(LastRowNal + 1, 3), Cells(LastRowNal + 1, 3))

'perebiraem znacheniya
For i = 1 To UBound(MyValues, 1)

If MyValues(i, 1) = True Then

 If IsEmpty(MyRange) Then
      MyRange = MyValues(i, 2)
 Else
     MyRange = MyRange & Chr(32) & Chr(43) & Chr(32) & MyValues(i, 2)
 End If

End If

Next i

MyRange = Chr(61) & MyRange 'Вставляем знак РАВНО
Cells(LastRowNal + 2, 3) = "Готово"

End Sub
Изменено: kakaccc - 05.03.2024 14:18:34
Копирование строк с одного листа на другой VBA.
 
Добавьте в конце кода после Next i:

MyRange = Chr(61) & MyRange
Изменено: kakaccc - 05.03.2024 12:03:21
Копирование строк с одного листа на другой VBA.
 
Уберите -1 из этой строчки: LastRowNal = Cells(Rows.Count, 10).End(xlUp).Row - 1
Копирование строк с одного листа на другой VBA.
 
А в чем, вопрос?
В прведенном коде явно ошибка. Зачем перебирать все ячейки счетчиком, чтобы заменить на одно и то же значение в ячейке B1?
Копирование строк с одного листа на другой VBA.
 
Что-нибудь типа такого:

If Not IsEmpty(Worksheets("данные").Range("A1")) Then
     Worksheets("вывод").Range("G1") = Worksheets("данные").Range("A1")
End If
Изменено: kakaccc - 04.03.2024 17:55:54
Копирование строк с одного листа на другой VBA.
 
В конце кода добавьте:

Cells(LastRowNal + 2, 3) = "Готово"
Изменено: kakaccc - 04.03.2024 16:47:36
Копирование строк с одного листа на другой VBA.
 
Код, который вам нужен я привел выше. Вам только одну строку надо было добавить.

Sub Perenos()

Dim MyValues As Variant
Dim LastRowNal As Long, i As Long

'zadaem massiv dannyh
Worksheets("данные").Activate
MyValues = Worksheets("данные").Range("A1").CurrentRegion
Worksheets("вывод").Activate

'perebiraem znacheniya
For i = 1 To UBound(MyValues, 1)
  LastRowNal = Cells(Rows.Count, 3).End(xlUp).Row 'poslednyaya stroka
  If MyValues(i, 1) = True Then
       Cells(LastRowNal + 1, 3) = MyValues(i, 2)
       Cells(LastRowNal + 1, 4) = MyValues(i, 3)
  End If
Next i

End Sub
Изменено: kakaccc - 04.03.2024 16:25:07
Копирование строк с одного листа на другой VBA.
 
Если я правильно понял, то так:

Sub Perenos()

Dim MyValues As Variant
Dim LastRowNal As Long, i As Long

'zadaem massiv dannyh
Worksheets("1").Activate
MyValues = Worksheets("1").Range("A1").CurrentRegion
Worksheets("2").Activate

'perebiraem znacheniya
For i = 1 To UBound(MyValues, 1)
  LastRowNal = Cells(Rows.Count, 3).End(xlUp).Row 'poslednyaya stroka
  If MyValues(i, 1) = True Then
       Cells(LastRowNal + 1, 3) = MyValues(i, 2)
       Cells(LastRowNal + 1, 4) = MyValues(i, 3) 'добавляется эта строчка
  End If
Next i

End Sub
Копирование строк с одного листа на другой VBA.
 
Речь идет про данные, которые по столбцам? Как вы их хотите записать? друг под другом?
Копирование строк с одного листа на другой VBA.
 
Цитата
написал:
Sub CopyInfo()'объявление переменныхDim iLastRowNal As LongDim iLastRowArhiv As LongSheets("Список").Select'проверка наличия данных (заполнености) последнего столбца таблицы   iLastRowNal = Cells(Rows.Count, 2).End(xlUp).Row 'вычисление номера строки                For i = 3 To iLastRowNalSheets("Список").Select       If Cells(i, 1) = "True" Then           'определение последней заполненой строки на листе Архив           iLastRowArhiv = Sheets("Табель").Cells(Rows.Count, 7).End(xlUp).Row + 1                      Range(Cells(i, 2), Cells(i, 2)).Copy           Sheets("Табель").Select   LastRow = Cells(Rows.Count, "G").End(xlUp).Row + 1   Cells(LastRow, 7).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False                  End If   Next i   End Subдобавил к своему коду, все равно только 1 значение вводит
А у меня этот ваш код рабочий. Выдает как требуется.
Копирование строк с одного листа на другой VBA.
 
Еще проще будет:
Скрытый текст
Изменено: kakaccc - 05.03.2024 17:53:19
Копирование строк с одного листа на другой VBA.
 
Да. Тогда так:

Sub Perenos()

Dim MyValues As Variant
Dim iLastRowNal As Long
Dim MyRange As Range

'задаем массив
MyValues = Worksheets("вывод").Range("D3").CurrentRegion

'вычисление последней строки в нужном столбце
LastRowNal = Cells(Rows.Count, 3).End(xlUp).Row

Worksheets("вывод").Select

'задаем ячейку для вывода значений
Set MyRange = Worksheets("вывод").Range(Cells(LastRowNal + 1, 3), Cells(LastRowNal + 1, 3))

'перебираем данные
For i = 1 To UBound(MyValues, 2)

If MyValues(1, i) = True Then
 'если еще ни одно не перенесено
 If IsEmpty(MyRange) Then
      MyRange = MyValues(2, i)
 'если уже был перенос значений
 Else
      MyRange = MyRange & Chr(44) & Chr(32) & MyValues(2, i) 'добавляем через запятую
 End If
End If

Next i

End Sub
Изменено: kakaccc - 03.03.2024 22:07:29
Копирование строк с одного листа на другой VBA.
 
Baidut, пардон, забыл добавить это условие. Тогда так:

Sub Perenos()

Dim MyValues As Variant
Dim iLastRowNal As Long
Dim MyRange As Range

'задаем массив
MyValues = Worksheets("данные").Range("A1").CurrentRegion 'или конкретно Range("A1:B8")

'вычисление последней строки в нужном столбце (здесь 3ий)
LastRowNal = Cells(Rows.Count, 3).End(xlUp).Row

Worksheets("вывод").Select

'задаем ячейку для вывода значений
Set MyRange = Worksheets("вывод").Range(Cells(LastRowNal + 1, 3), Cells(LastRowNal + 1, 3))

'перебираем данные
For i = 1 To UBound(MyValues, 1)

If MyValues(i, 1) = True Then
  'если еще ни одно не перенесено
  If IsEmpty(MyRange) Then
       MyRange = MyValues(i, 2)
  'если уже был перенос значений
  Else
       MyRange = MyRange & Chr(44) & Chr(32) & MyValues(i, 2) 'добавляем через запятую
  End If
End If

Next i

End Sub
Изменено: kakaccc - 03.03.2024 22:07:14
Копирование строк с одного листа на другой VBA.
 
В приведенном мною коде данные на первом листе остаются без изменений. Чем вам не вариант?

Если настаиваете на своем коде, то добавьте строку: Sheets("Список").Select сразу после For i = 3 To iLastRowNal, тогда будет работать. Но вы просили в одну ячейку и через запятую, а в вашем коде данные добавляются друг под другом и без запятых.
Изменено: kakaccc - 03.03.2024 16:55:58
Копирование строк с одного листа на другой VBA.
 
Например так:

Sub Perenos()

Dim MyValues As Variant

'задаем массив
MyValues = Worksheets("данные").Range("A1:B8")

'перебираем данные
For i = 1 To UBound(MyValues, 1)

If MyValues(i, 1) = True Then
   'если еще ни одно не перенесено
   If IsEmpty(Worksheets("вывод").Range("C3").Value) Then
       Worksheets("вывод").Range("C3") = MyValues(i, 2)
   'если уже был перенос значений
   Else
       Worksheets("вывод").Range("C3") = Worksheets("вывод").Range("C3").Value _
       & Chr(44) & Chr(32) & MyValues(i, 2)
   End If
End If

Next i

End Sub
Изменено: kakaccc - 03.03.2024 22:06:45
Копирование строк с одного листа на другой VBA.
 
KuklP, все, раз это destination, то вопросов нет. Более менее разобрался. Буду теперь пользоваться. Красиво и лаконично получилось. Спасибо за объяснение!

rSkrin, да, вся таблица должна начинаться с А1 (шапка в вашемслучае). Можно сделать независимо от находжения таблицы, используя свойство CurrentRegion, например. Но тогда перед запуском макроса надо будет выделять какую-нибудь ячейку из таблицы. Первоначально я так и записал макрос. Не знал как для вас проще будет. Если хотите, можно так сделать.
Копирование строк с одного листа на другой VBA.
 
KuklP, потому что я нуб в vba  :D

Спасибо! Буду теперь знать и использовать эту функцию.
Но хотел бы сначала разобраться. Объясни, пожалуйста, последнее действие: ...copy .Cells(LastRow + 1, 1)
Как это работает? Это типа destination? К чему относится точка перед Cells() Почему, вообще, происходит вставка копируемого?
Копирование строк с одного листа на другой VBA.
 
Код
Sub copy_to_archive()

Dim currentRow As Integer
Dim sourceCol As Integer
Dim LastRow As Integer
Dim currentRowValue
Dim sourcews As String
Dim Rowsnum As Integer

sourcews = ActiveSheet.Name 'базовый лист
sourceCol = 5   'Ключевая E колонка
Set myTable = Worksheets(sourcews).Range("A1").CurrentRegion
Rowsnum = myTable.Rows.Count

For currentRow = 5 To Rowsnum  'проверяем есть ли пустые в 5-ой колонке
    currentRowValue = Cells(currentRow, sourceCol).Value
    If (IsEmpty(currentRowValue) Or currentRowValue = "") Then
    MsgBox ("Внимание! Есть пустые ячейки.")
    Exit Sub
    End If
Next

For currentRow = 5 To Rowsnum  'Копируем
    Rows(currentRow).Copy
    Worksheets("Архив").Select
    LastRow = Cells(Rows.Count, 1).End(xlUp).Row
    With Range(Cells(LastRow + 1, 1), Cells(LastRow + 1, 1))
    .PasteSpecial Paste:=xlPasteValues
    .PasteSpecial Paste:=xlPasteFormats
    End With
    Worksheets(sourcews).Activate
Next
End Sub
Немного громоздкий макрос получился.
Ограничение такое: таблица должны начинаться с ячейки А1.
rSkrin, если сойдет, то потом откалибруем под ваши нужды.
Изменено: kakaccc - 28.02.2016 02:18:56
Копирование строк с одного листа на другой VBA.
 
Для 5 пункта:
Код
Sub zashita_dannyh()
Dim currentRow As Integer
Dim sourceCol As Integer
Dim data As String

sourceCol = 2
RowCount = Cells(1, sourceCol).End(xlDown).Row
RowCount_2 = ActiveSheet.Cells(RowCount, sourceCol).End(xlDown).Row
data = Range(Cells(RowCount, sourceCol), Cells(RowCount, sourceCol)).Value

'проверка на ошибку
For currentRow = RowCount To RowCount_2 - 2
    currentRowValue = Cells(currentRow, sourceCol).Value
    If Not (IsEmpty(currentRowValue) Or currentRowValue = "") And _
    Cells(currentRow + 1, sourceCol).Value <> currentRowValue Then
        MsgBox ("даты на лите не совпадают")
        Exit Sub
    End If
Next

'протектим лист
If Date - DateValue(data) > 1 Then
ActiveSheet.Protect Password:="143" 'пароль 143
End If
End Sub
Хотя, по-моему, без макроса будет даже проще. Пока он настроен так, что его надо запустить на каждом листе, который будет затем защищен.
Копирование строк с одного листа на другой VBA.
 
paha83, если еще актуально:
Код
Sub Copy_rows_if()
Dim currentRow As Integer
Dim sourceCol As Integer
Dim LastRow As Integer
Dim currentRowValue
Dim sourcews As String

sourcews = ActiveSheet.Name 'базовый лист
sourceCol = 2   'колонка B ключевая
RowCount = Cells(Rows.Count, sourceCol).End(xlUp).Row

For currentRow = 1 To RowCount  'для всех строк базового листа
    currentRowValue = Cells(currentRow, sourceCol).Value
    If Not (IsEmpty(currentRowValue) Or currentRowValue = "") Then
          Rows(currentRow).Copy
          Worksheets("Финиш").Select
          LastRow = Cells(Rows.Count, sourceCol).End(xlUp).Row
          Range(Cells(LastRow + 1, 1), Cells(LastRow + 1, 1)).PasteSpecial Paste:=xlPasteValues
          Worksheets(sourcews).Activate
    End If
Next
End Sub

Здесь первые 3 пункта.
Изменено: kakaccc - 22.09.2015 18:11:32
Страницы: 1
Наверх