Excel VBA:使用数字和字母维护数字格式

时间:2017-03-30 23:02:41

标签: excel vba

我正在编写代码,基本上我需要遵循逻辑中的顺序。我正在经历所有的行

Set rep = Sheets("Details")    
For i = 2 To n    
If Sheets("Work").Range("A:A").Find(Worksheets("Work_report").Range("E" & i).Value, lookat:=xlWhole) Is Nothing Then    
Else:    
o = rep.Range("A" & Rows.Count).End(xlUp).Row + 1    
rep.Range("A" & o).Value = "FT_EXCEL"    
rep.Range("B" & o).Value = Sheets("Start").Range("C5") & "AB" & o - 1    
End If    
Next i    

所以这最后一行(原始代码中超过50个)返回一个单元格C5(20170331)&的值。 AB& o减1(因为我从2开始(第1行标题))。所以这给了20170331AB1,但它应该给20170331AB01(0之前为零)。

这个序列在10点之后就像魅力一样,但在10点之前我需要添加零点 - 我被卡住了。

有什么想法吗?谢谢。

2 个答案:

答案 0 :(得分:1)

试试这个:

rep.Range("B" & o).Value = Sheets("Start").Range("C5") & "AB" & Format(o - 1, "00")

答案 1 :(得分:1)

您可以利用AutoFilter()方法operator xlFilterValues

一次性完成
Sub main()
    Dim rep As Worksheet

    Dim criteriaArr As Variant
    With Worksheets("Work_report") '<--| reference "Work_report" sheet
        criteriaArr = Application.Transpose(.Range("E2", .Cells(.Rows.Count, "E").End(xlUp)).Value) '<--| store its column E cells content from row 2 down to last not empty one
    End With

    Set rep = Sheets("Details")
    With Worksheets("Work") '<--| reference "Work" sheet
        With .Range("A1", .Cells(.Rows.Count, "A").End(xlUp)) '<--| reference its column A cells from row 1 (header) down to last not empty one
            .AutoFilter Field:=1, Criteria1:=criteriaArr, Operator:=xlFilterValues '<--| filter it with "Work_report" sheet column E content
            If Application.WorksheetFunction.Subtotal(103, .Cells) > 1 Then '<--| if any filtered cells other then headers
                With .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible) '<--| reference filtered cells skipping header
                    rep.Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(.Rows.Count).Value = "FT_EXCEL" '<--| write 'rep' sheet column A corresponding cells content
                    With rep.Range("B" & Rows.Count).End(xlUp).Offset(1).Resize(.Rows.Count)
                        .Formula = "=CONCATENATE(Start!$C$5,""AB"",TEXT(ROW(),""00""))" '<--| '<--| write 'rep' sheet column B corresponding cells content
                        .Value = .Value
                    End With
                End With
            End If
        End With
        .AutoFilterMode = False
    End With
End Sub