【问题标题】:Comparing and moving fields in excel在excel中比较和移动字段
【发布时间】:2013-09-23 20:28:15
【问题描述】:

我有一个奇怪的问题,希望有人能帮助我。我在 A 列中有一个项目列表,在 D 列中有另一个项目列表。这些大多相同,只是 B 列中还有一些项目。

Column A     Column B    Column C          Column D
1015          1015          $25               $5
1025          1035          $25               $5
1035          1045          $25               $5
1045          1055          $25               $5

好的,我想做的是使用 A 列中的项目,然后与 B 列进行比较。

然后我想将行从 B-D 向下移动,以便 D 在 A 旁边并且具有相同的 sku。

Column A     Column B    Column C          Column D
1015          1015          $25               $5
1025          
1035          1035          $25               $5
1045          1045          $25               $5

请帮忙!非常感谢!!!

【问题讨论】:

  • 您正在寻找一个公式来做到这一点?还是您希望在 VBA 中完成此操作。无论哪种情况,您能否向我们展示您尝试了什么以及您遇到了什么问题?

标签: excel compare excel-formula


【解决方案1】:

假设 B 列中不存在不匹配的值。

对于 VBA 解决方案,试试这个:

Sub MatchRows()
  Dim sheet As Worksheet
  Set sheet = ActiveWorkbook.Sheets("Sheet1")

  'First Column
  Dim rngA As Range
  Set rngA = [A1:A10]
  Dim datA As Variant
  datA = rngA
  Dim i As Long

  'Second Column Match
  Dim rngB As Range
  Set rngB = [B1:B10]
  Dim datB As Variant
  datB = rngB
  Dim j As Long

  'Store duplicates
  Dim rngString As String

  'First Column loop
  For i = LBound(datA, 1) To UBound(datA, 1)
    'Second Column Loop
    For j = LBound(datB, 1) To UBound(datB, 1)
        'Check if duplicate
        If datA(i, 1) = datB(j, 1) And i <> j And Not IsEmpty(datB(j, 1)) And Not IsEmpty(datA(i, 1)) Then
            Dim rng As String
            rng = Chr(rngB.Column + 64) & j & ":" & Chr(rngB.Column + 64 + 2) & j
            Range(rng).Select

            For k = 1 To (i - j)
                Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
            Next
        End If
      Next
  Next
End Sub

请注意,我对要下推的列数的范围和偏移值 (+2) 进行了硬编码。

【讨论】:

    【解决方案2】:

    假设您的输入在 Sheet1 上。然后将新工作表中的以下公式复制到单元格中

    A1: =Sheet1!A1
    B1: =IFERROR(VLOOKUP(A1;Sheet1!$B$1:$D$4;1;FALSE);"")
    C1: =IFERROR(VLOOKUP(A1;Sheet1!$B$1:$D$4;2;FALSE);"")
    D1: =IFERROR(VLOOKUP(A1;Sheet1!$B$1:$D$4;3;FALSE);"")
    

    然后将第一行复制到第 2、3 和 4 行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-24
      • 1970-01-01
      • 2015-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多