Excel宏-复制和粘贴值以及删除原始列

时间:2018-06-28 21:37:51

标签: excel vba excel-vba

我会尽力去尝试,不要让声音听起来令人困惑-到此为止:

我正在创建一个电子表格,一旦用户提供值,该电子表格将对SSN和DOB进行哈希处理。我提供了以下公式:一旦提供了完整的SSN和DOB,就将后4个ssn,前4个dob,哈希的dob和哈希的SSN添加到自己的列中。但是,我想删除提供了完整SSN和DOB的列,而又不丢失散列的DOB和SSN,包括前4个DOB和后4个SSN。

电子表格格式为:

J N X AQ Hashed DOB First 4 DOB Last 4 SSN Full SSN Hash

Full date of BirthFull SSN列在QR列中。

这是一个旧的宏,我正在尝试删除原来的Full date of BirthFull SSN值。我不知道如何使它在分散的列而不是彼此相邻的列上工作。

Sub CopyAndDeleteSensData()

    Columns("E:H").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Columns("A:D").Select
    Selection.Copy
    Columns("E:E").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Columns("A:D").Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlToLeft
    Columns("A:D").EntireColumn.AutoFit
    Columns("J:K").Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlToLeft
    Range("E2").Select

End Sub

预先感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

已更新为最后一行:

您的问题可能出在以下事实:您正在逐个(或一次几个)删除列,因此一次删除后数据在移动,并且不再与指定的列对齐。完成所有插入操作后,尝试一次删除所有列,如下所示。

Sub main()

    ' Delete columns A and C from "Sheet1"    
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    ws.Range("a:a, c:c").EntireColumn.Delete


End Sub

答案 1 :(得分:0)

这将:

  1. 确定数据的底行(LRow
  2. 复制/粘贴为Col(J, N, X, AQ)的文本
  3. 删除Cols(Q, R)并将单元格向左移动

Option Explicit

Sub PrivateInfo()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")

Application.ScreenUpdating = False

With ws
    Dim LRow As Long: LRow = .Range("J" & .Rows.Count).End(xlUp).Row
    .Range("J2:J" & LRow).Copy: .Range("J2").PasteSpecial xlPasteValues
    .Range("N2:N" & LRow).Copy: .Range("N2").PasteSpecial xlPasteValues
    .Range("X2:X" & LRow).Copy: .Range("X2").PasteSpecial xlPasteValues
    .Range("AQ2:AQ" & LRow).Copy: .Range("AQ2").PasteSpecial xlPasteValues
    .Range("Q:Q", "R:R").EntireColumn.Delete (xlToLeft)
End With

Application.ScreenUpdating = True

End Sub

旁注:

您的问题专门要求复制/粘贴解决方案,但是清除公式并保持值(此处的速度稍快,但在其他情况下更快)的更快方法是将范围设置为{{1} }:

range.value