Vba Excel条形码扫描仪列数据到行

Vba Excel条形码扫描仪列数据到行,vba,excel,Vba,Excel,我正在使用条形码扫描器对大量货物进行清点,我想将数据输入excel。我可以在每次扫描后更改扫描仪的行为方式,以进行制表、退货等操作。但我的大问题是,为了有效地提供数量,我必须扫描项目代码7位,然后依次扫描从0到9的数量。这样548实际上是5,4,8,当使用excel时,它会将每个数字放入一个新的单元格中。我想做的是让excel检查长度是7位还是1位,但我没有VBA印章。对于每个一位数字,它应将数字移动到与前一个7位数字相同的行中的下一个单元格,这样,每个连续的一位数字都会合并,就像excel将单

我正在使用条形码扫描器对大量货物进行清点,我想将数据输入excel。我可以在每次扫描后更改扫描仪的行为方式,以进行制表、退货等操作。但我的大问题是,为了有效地提供数量,我必须扫描项目代码7位,然后依次扫描从0到9的数量。这样548实际上是5,4,8,当使用excel时,它会将每个数字放入一个新的单元格中。我想做的是让excel检查长度是7位还是1位,但我没有VBA印章。对于每个一位数字,它应将数字移动到与前一个7位数字相同的行中的下一个单元格,这样,每个连续的一位数字都会合并,就像excel将单元格连接在一起一样。然后,它应该删除原始列中的单个数字,并让下一行以7位条形码编号开始

我希望这是有道理的

例如:

7777777
3
4
5
7777778
4
5
6
7777779
7
8
9
应成为:

| 7777777 | 345 |
| 7777778 | 456 |
| 7777779 | 789 |

谢谢

我的工作表设置如下:

然后运行下面的代码

Sub Digits()
Application.ScreenUpdating = False
    Dim i&, r As Range, j&
    With Columns("B:B")
        .ClearContents
        .NumberFormat = "@"
    End With
    For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
        Set r = Cells(i, 1)
        If Len(r) = 7 Then
            j = 1
            Do Until ((Len(r.Offset(j, 0).Text) = 7) Or (IsEmpty(r.Offset(j, 0))))
               Cells(i, 2) = CStr(Cells(i, 2).Value) & CStr(r.Offset(j, 0))
                j = j + 1
            Loop
        End If
        Set r = Nothing
    Next
    For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
        If Len(Cells(i, 1)) < 7 Then Rows(i & ":" & i).Delete
    Next i
    Columns.AutoFit
Application.ScreenUpdating = True
End Sub
我得到的结果是:


这是我对您开始的解决方案所做的,但我认为您的新解决方案会更好地工作。非常感谢你,mehow

Sub Digits()

Application.ScreenUpdating = False

    Dim i, arr, r As Range
    Dim a, b, c, d, e
    Dim y
    For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
        Set r = Cells(i, 1)
        Set a = Cells(i + 1, 1)
        Set b = Cells(i + 2, 1)
        Set c = Cells(i + 3, 1)
        Set d = Cells(i + 4, 1)
        Set e = Cells(i + 5, 1)
        If Len(a) = 7 Then
            y = 0
        ElseIf Len(b) = 7 Then
            y = 1
        ElseIf Len(c) = 7 Then
            y = 2
        ElseIf Len(d) = 7 Then
            y = 3
        ElseIf Len(e) = 7 Then
            y = 4
        Else:
            y = 0
        End If
        If Len(r) = 7 Then
            arr = Range("A" & i & ":A" & i + y).Value
            Range("B" & i & ":F" & i) = WorksheetFunction.Transpose(arr)
        End If
    Next
    Cells.Replace "#N/A", "", xlWhole
Application.ScreenUpdating = True

End Sub

你自己有没有试过做这件事?当然有。我无法让excel区分这两个长度,然后合并单个数字。我尝试过很多策略,但对如何用这种方式操纵excel知之甚少。当然,我的示例中的格式不起作用。您是否希望将格式设置为:| | | |…共享您的研究成果可以帮助所有人。告诉我们您尝试了什么,以及为什么它不能满足您的需求。这表明你花了时间来帮助自己,它使我们避免重复显而易见的答案,最重要的是,它帮助你得到一个更具体和相关的答案!另请参见查看工作表事件-工作表更改是您想要的。它有一个参数目标,表示刚刚更改的单元格。这很接近。我想我可以从这个有用的策略中工作。唯一的问题是数量值可以是从1到999的一个数字,这意味着它不是条形码后面的标准数字。@user2744867这不是代码的问题。这段代码是为处理问题的原始复杂性而设计的,它确实做到了。现在,您已经提供了更多详细信息,我更新了我的答案,并为您提供了一个新代码,涵盖了您在上述评论中描述的案例:在这里,关于stackoverflow,我们接受对我们有帮助的答案: