繁体   English   中英

IF 公式作为 VBA 复制和粘贴的一部分

[英]IF formula as part of a VBA copy and paste

VBA 非常新(这是第 2 天)。 到目前为止,我的大部分经验是来自网络上的代码的混合以及对这里上一个问题的巨大帮助。 所以我有一个新问题。 我正在将大量 Excel 工作表中的数据导入到一个合并工作表中作为记录。 该位工作正常,然后以适合用户的格式复制到单独的工作表上。 但是,我想要一个公式,我根本不知道该怎么做。 我希望它适用于每一行并特定于该行。

    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

在上面,我希望在 D 列的每一行上粘贴一个 IF 语句,它基本上表示 if(F2<>"",F2,E2) 然后这对于每一行都是顺序的。 最终,我不想让底部的两行通过并在它出现在页面上之前执行此操作,如果可以做到,那就太棒了!

快速问题我需要它从第 2 行开始,但我不希望它结束​​,我必须放 D9999 还是我可以做其他事情以获得无限级别? 对不起。

感谢您阅读到这里,提前感谢您的帮助:)

尝试:

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 范围不包含值...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM