1

我正在使用条形码扫描仪进行大量库存,我想将数据输入到 Excel 中。我可以在每次扫描后更改扫描仪的行为方式,以执行制表符、返回等操作,但我最大的问题是,为了有效地提供数量,我必须扫描商品代码(7 位数字),然后扫描数量从 0 到 9 连续。这样 548 真的是 5、4、8,当使用 excel 时,它会将每个数字放入一个新单元格中。我想做的,但没有 VBA 印章做的是让 excel 检查长度是 7 位还是一位。对于每个一位数字,它应该将数字移动到与前一个 7 位数字相同的行中的下一个单元格,以便将每个连续的一位数字组合起来,就好像 excel 正在连接单元格一样。

我希望这是有道理的。

例子:

7777777
3
4
5
7777778
4
5
6
7777779
7
8
9

应该变成:

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

谢谢!!

4

2 回答 2

0

我这样设置我的工作表:

在此处输入图像描述

然后运行下面的代码

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

我得到的结果:

在此处输入图像描述

于 2013-09-09T08:37:01.893 回答
0

这就是我对你开始时所做的,但我认为你的新解决方案会更好。非常感谢你!

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
于 2013-09-10T17:41:49.333 回答