ЕСЛИ формула как часть VBA, скопируйте и вставьте - PullRequest
0 голосов
/ 31 марта 2020

очень плохо знаком с VBA (это день 2). Большая часть моего опыта на данный момент представляет собой смесь кода из Интернета и большую помощь по предыдущему вопросу здесь. Итак, у меня новый вопрос. Я импортирую данные из массы листов Excel в один консолидированный лист в виде записи. Этот бит отлично работает, затем копируется на отдельный лист в формате, который подходит пользователю. Тем не менее, я хотел бы получить формулу, я не знаю, как это сделать вообще. Я хотел бы, чтобы он применялся к каждой строке и был указан c для этой строки.

    Sheets("TrackRecord").Range("B2:B9999").Value = Sheets("Data").Range("D2:D9999").Value
    'Copy and paste for Quote Number
    Sheets("TrackRecord").Range("C2:C9999").Value = Sheets("Data").Range("N2:N9999").Value
    'Copy and paste for Cable OD
    Sheets("TrackRecord").Range("E2:E9999").Value = Sheets("Data").Range("P2:P9999").Value
    'Copy and paste for Wall Thickness Proposed
    Sheets("TrackRecord").Range("F2:F9999").Value = Sheets("Data").Range("Q2:Q9999").Value
    'Copy and paste for Wall Thickness Override

Выше я хотел бы, чтобы оператор IF вставлялся в каждую строку в столбце D, который в основном говорит, что (F2 <> "", F2, E2), а затем это будет последовательно для каждой строки , В конечном счете, я хотел бы не подводить две нижние строки и делать это до того, как они попадут на страницу, если бы это можно было сделать, это было бы потрясающе!

Быстрый вопрос, мне нужно, чтобы он начинался во второй строке, но я не хочу, чтобы он заканчивался, нужно ли ставить D9999 или я могу сделать что-то еще для бесконечного уровня? Извините.

Спасибо, что прочитали это далеко, заранее спасибо за вашу помощь:)

1 Ответ

0 голосов
/ 31 марта 2020

Попробуйте:

Sub testNiceCode()
   Dim shD As Worksheet, shTr As Worksheet, lastRowD As Long, lastRowTr As Long
   Set shD = Sheets("Data")
   Set shTr = Sheets("TrackRecord")
   lastRowTr = shTr.Range("B" & Rows.Count).End(xlUp).Row 'B because you do not have data in D:D...
   lastRowD = shTr.Range("B" & Rows.Count).End(xlUp).Row  'if all columns have the same number of rows
   shTr.Range("B2:B" & lastRowD).value = shD.Range("D2:D" & lastRowD).value
   shTr.Range("C2:C" & lastRowD).value = shD.Range("N2:N" & lastRowD).value
   shTr.Range("E2:E" & lastRowD).value = shD.Range("P2:P" & lastRowD).value
   shTr.Range("F2:F" & lastRowD).value = shD.Range("Q2:Q" & lastRowD).value
   shTr.Range("D2:D" & lastRowTr).Formula = "=IF(F2<>"""",F2,E2)"
End Sub

Если столбцы в таблице «Данные» не содержат одинаковое количество строк, необходимо создать переменную lastRow для каждой из них.

И lastRowTr рассчитывается с использованием диапазона B: B, поскольку диапазон D: D не содержит значений ...

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