Попытка создать al oop для копирования ячеек с одного листа на другой - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь создать код для следующих действий: В книге у меня есть два листа. Лист 2 имеет несколько столбцов, я хочу создать al oop для чтения каждой строки в определенном столбце, скажем, столбец D. Когда строка в этом столбце не равна нулю, я хочу скопировать значение в этой строке в столбец в Sheet2, допустим, его столбец G на листе 2, но это будет та же строка из столбца D на листе 1.

Example
Sheet 2                 Sheet 1
Column D             Column G
0             Don’t copy from Sheet 2
500               500 (Copied from Sheet 2)
20                20 (Copied from Sheet 2)

Ответы [ 2 ]

0 голосов
/ 22 июля 2020

Я смог выяснить это, используя пример из другого сообщения, а также просмотрев предложение Фелипе.

Я использовал функцию, чтобы найти последнюю строку на одном из моих листов в книге, когда я копировал данные. Используя эту функцию lastrow, я создал al oop и смог использовать оператор IF, который позволил мне скопировать строку с данными в столбец (столбцы) на другом моем листе

FirstRow = Range (" A2 "). Значение

'Найти последнюю непустую ячейку в столбце A (1) LastRow = Cells (Rows.Count, 1) .End (xlUp) .Row

Dim b Как целое число, купить как целое число

    For b = 2 To LastRow
      If Range("F" & b).Value <> 0 Then
         Range("F" & b).Select
         Selection.Copy
         Sheets("T-1 BSR").Select
         Range("I" & b).Select
         ActiveSheet.Paste
         Range("J" & b).Select
         ActiveSheet.Paste
         Sheets("BAML Futures PnL").Select
      End If
    Next b

Я также использовал тот же лог c, поскольку мне пришлось использовать другой столбец и умножать его на -1, когда была продажа

Dim s Как целое число, продать как целое число

    For s = 2 To LastRow
      If Range("G" & s).Value <> 0 Then
         Sell = Range("G" & s) * -1
         Range("G" & s).Value = Sell
         Range("G" & s).Select
         Selection.Copy
         Sheets("T-1 BSR").Select
         Range("I" & s).Select
         ActiveSheet.Paste
         Range("J" & s).Select
         ActiveSheet.Paste
         Sheets("BAML Futures PnL").Select
      End If
    Next s

Не уверен, что это был самый эффективный способ, но он работает

0 голосов
/ 11 июля 2020

Я бы go создал динамические c диапазоны и объявил их в моем коде VBA.

Итак, после создания динамического c диапазона (с помощью Менеджера имен для определения динамического c диапазоны с использованием OFFSET), что объясняется здесь: Create Dynami c Range (Offset) , ...

... Я бы объявил их в начале моего кода. Чтобы объявить диапазон с помощью диспетчера имен, посмотрите здесь Именованные диапазоны Excel .

... затем назовите столбец в диапазоне, чтобы присвоить ему значение. Следующая ссылка ведет к свойству Column в Range.Columns .

... затем создайте свой l oop, используя Range_1 в Range_2 (Column): L oop через Определенный диапазон .

... Наконец, просто сравните значения, используя If ( Оператор If ), получая положение ячейки в случае успеха ( Range.Column & Range.Row ) и копирование на второй лист ( Range.Value ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...