使用宏来格式化工作表上的数据

时间:2013-01-08 19:38:59

标签: excel excel-vba vba

我经营一家小型零售店,我的任务是为我们的商品创建库存标签。我将库存管理软件(AMan Pro)中的项目列表导出到Excel中,包括项目的描述,数量,条件,SKU#和平台(视频游戏平台)。我目前有两个宏。一个将SKU修剪为可用格式(去掉前导字母),另一个将多个数量项分开到单独的行。 (即数量为5的第1项将被复制到5行,所有数量均为1)这些东西有效,但我认为我正在做一些可以用宏处理的不必要的步骤。

我的AMan程序会将带有项目的Excel工作簿吐出。然后我将这些项目复制到第一张上的“启用宏”的工作簿中,然后运行我的宏。第二张表格具有格式正确的标签数据。例如;它具有修剪Description字段的公式,仅使用前60个字符。 (有些描述很长)

我觉得第二张不是必需的。我想将这些项目复制到工作表1中并运行一个宏,为我 工作表1上执行所有格式化。

  1. 将具有多个数量的项目分隔到不同的行(我确实有 为此工作的宏。)
  2. 从SKU(工作宏)中删除前导字母,然后将SKU用七位数字格式(#######)
  3. 将描述简化为前60个字符。
  4. 将条件减少到前2个字符。
  5. 将平台减少到前15个字符。
  6. 这是我当前的宏代码和指向我的电子表格的链接。先谢谢你,伙计们。 SKU_LABEL_FINAL.xlsm

    Sub ExpandRows()
    Dim dat As Variant
    Dim i As Long
    Dim rw As Range
    Dim rng As Range
    
    Set rng = Sheets(1).UsedRange
    dat = rng
    
    ' Loop thru your data, starting at the last row
    For i = UBound(dat, 1) To 2 Step -1
        ' If Quantity > 1
        If dat(i, 2) > 1 Then
            ' Insert rows to make space
            Set rw = rng.Rows(i).EntireRow
            rw.Offset(1, 0).Resize(dat(i, 2) - 1).Insert
            ' copy row data down
            rw.Copy rw.Offset(1, 0).Resize(dat(i, 2) - 1)
            ' set Quantity to 1
            rw.Cells(1, 2).Resize(dat(i, 2), 1) = 1
        End If
    Next
    Columns("D:D").Select
    Selection.Replace What:="AManPro-", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    

    End Sub

1 个答案:

答案 0 :(得分:0)

将SKU格式化为7位数字格式非常简单。您只需要在End Sub

之前插入这行代码

Selection.NumberFormat = "0000000"

解析数据时,您可以修剪每个单元格的长度。

首先,我会使用一些Const语句来说明哪些列是什么,以及它们需要的长度。您可以只使用代码中的数字,但这样可以在将来更新时更容易更新。在最终Dim

下方添加
Const DESCRIPTIONLENGTH = 60
Const DESCRIPTIONCOLUMN = 2

然后当你遍历每一行时,你会更新单元格的值 - 添加到For i =...

下面
'Format each column's data
    dat(i, DESCRIPTIONCOLUMN).Value = Left(dat(i, DESCRIPTIONCOLUMN), DESCRIPTIONLENGTH)

我希望描述专栏的代码能帮助您构建其他列所需的内容。