【问题标题】:Excel Barcode Scanner Column Data to RowExcel 条形码扫描仪列数据到行
【发布时间】:2013-09-18 04:43:56
【问题描述】:

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

我希望这是有道理的。

例子:

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

应该变成:

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

谢谢!!

【问题讨论】:

  • 你有没有尝试过自己做这件事?
  • 当然有。我无法让 excel 区分这两个长度,然后组合个位数。我尝试了很多策略,但对以这种方式操纵 excel 的知识还不够了解。当然,我的示例中的格式不起作用。
  • 你想这样格式化吗:| | | ....
  • 分享您的研究对每个人都有帮助。告诉我们您尝试了什么以及为什么它不能满足您的需求。这表明您已经花时间尝试帮助自己,它使我们免于重复明显的答案,最重要的是它可以帮助您获得更具体和相关的答案!另见how to ask
  • 查看工作表事件 - Worksheet_Change 是您想要的。它有一个参数Target,代表刚刚改变的单元格。

标签: vba excel


【解决方案1】:

我这样设置我的工作表:

然后运行下面的代码

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

我得到的结果:

【讨论】:

  • 这越来越接近了。我想我可以从这个有用的策略中工作。唯一的问题是“数量”值可以在 1 到 999 之间,这意味着它不是条形码后面的标准数字。
  • @user2744867 这不是代码的问题。该代码旨在处理问题的原始复杂性 - 它确实如此。现在,您已经提供了更多详细信息,我已经更新了我的答案,并为您提供了一个新代码,该代码涵盖了您在上述评论中描述的情况:) 在这里,在 stackoverflow 上,我们接受对我们有帮助的答案:)
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 2017-06-22
    相关资源
    最近更新 更多