Excel VBA将单元格数据传输到另一个工作表中的特定零件或范围

时间:2017-12-25 06:33:21

标签: excel vba excel-vba

我对vba了解一点,我想用vba实现这个目标。 我正在使用一些特殊情况将数据从工作表传输到另一张工作表。

鉴于这种情况: 在另一张表中我有这些范围

  • A4:B10
  • D2:E10
  • G2:H10

我的数据是这样的

AXX    |    Contact no.
AXX    |    Address
AXX    |    Name
AXX    |    Summary
BXX    |    Address
BXX    |    Name
BXX    |    Contact no.
BXX    |    Details
CXX    |    Address
CXX    |    Name
CXX    |    Summary
DXX    |    Address
DXX    |    Name
DXX    |    Contact no.
DXX    |    Address
DXX    |    Name

我的标识符位于第一列(AXX,BXX ...)。

预期输出为:

Row no|    Column A    |     Column B     |    Column D    |    Column E    |
1     |                |                  |                |                |
2     |                |                  |    BXX         |   Address      |
3     |                |                  |    BXX         |   Name         |
4     |    AXX         |   Contact no.    |    BXX         |   Contact no.  |
5     |    AXX         |   Address        |    BXX         |   Details      |
6     |    AXX         |   Name           |                |                |
7     |    AXX         |   Summary        |    CXX         |   Address      |
8     |                |                  |    CXX         |   Name         |
9     |                |                  |    CXX         |   Summary      |
10    |                |                  |                |                |

正如你所看到的,我的标识符是AXX,BXX ......如果它们相似,我会算不上。行和比较它与否。我的范围集中的行数。 BXX没有放在AXX旁边,因为剩下的行是3但是BXX需要4,所以它将被传递到下一个范围。如BXX和CXX所示,还会有一个空白单元格分隔其他值。

目前,我唯一知道的是使用For循环计算行数。想为此感谢您寻求帮助。 我的初始代码获取行数

Dim aa, aaLastrow As Long

aaLastrow = ShtData.Range("A" & Rows.Count).End(xlUp).Row

For aa = 2 To aaLastrow

        If ShtData.Cells(aa, 2).Value = ShtData.Cells(bb, 4).Value Then

            Sheets("Sheet1").Cells(aa, 1).Value = ShtData.Cells(aa, 2).Value

        End If

Next aa

我知道我的代码不正确,我不确定这种方法是否在正确的轨道上。

2 个答案:

答案 0 :(得分:1)

=COUNTIF($A:$A, "AXX")

会给你你想要的计数。您可以优化范围,并且可以将引用插入单元格而不是硬盘" AXX"。如果您希望使用VBA,可以将该功能称为Application.Countif(Range, CountWhat),其中"范围"是你在VBA和" CountWhat"中定义的范围。是一种变体。

答案 1 :(得分:1)

喜欢这个

Sub test()
    Dim Data As Worksheet, ToWs As Worksheet
    Dim vData, vDB, vArray
    Dim i As Integer, j As Long, n As Long
    Dim rngDB(1 To 4) As Range

    Set Data = Sheets(1)
    Set ToWs = Sheets(2)

    vData = Data.Range("a1").CurrentRegion
    vArray = Array("A", "B", "C", "D")
    With ToWs
        Set rngDB(1) = .Range("a4:b10")
        Set rngDB(2) = .Range("d2:e5")
        Set rngDB(3) = .Range("d7:e10")
        Set rngDB(4) = .Range("g2:h10")
    End With

    For i = 1 To 4
        n = 0
        rngDB(i).Clear
        vDB = rngDB(i)
        For j = 1 To UBound(vData)
            If vData(j, 1) Like vArray(i - 1) & "*" Then
                n = n + 1
                vDB(n, 1) = vData(j, 1)
                vDB(n, 2) = vData(j, 2)
            End If
        Next j
        rngDB(i) = vDB
    Next i
End Sub