[英]How to solve debug this question in easier way in vba
在A欄中,我有一系列不同的值。 喜歡:
CA_ALAMEDA
CA_ALPINE
OR_LANE
等等。 大約300行。
對於每一行,在E列中,我有1到85個值,以逗號分隔,例如:
SAN LEANDRO,HAYWARD,ALBANY,ALAMEDA
BEAR VALLEY,LAKE ALPINE,KIRKWOOD,MESA VISTA,MARKLEEVILLE,WOODFORDS,FREDRICKSBURG,CRYSTAL SPRINGS
EUGENE,SPRINGFIELD
我需要做的宏是什么
在每個現有行之間插入一些行,等於列E中單元格中逗號的數量。我已經確定了逗號的數量並將該值放在B列中。(因此第一行顯示: CA_ALAMEDA. . . 3. . . <column c=""> . . . <column d=""> . . . SAN LEANDRO,HAYWARD,ALBANY,ALAMEDA
使用列E中的各個值填充新行中的單元格。我將它們放在C列中。因此,最終結果如下所示: CA_ALAMEDA . . . 3 . . . SAN LEANDRO . . . <column d=""> . . . SAN LEANDRO,HAYWARD,ALBANY,ALAMEDA . . . . . . . . . . . . . . . . . . HAYWARD . . . . . . . . . . . . . . . . . . ALBANY . . . . . . . . . . . . . . . . . . ALAMEDA CA_ALPINE. . . . . .7 . . . BEAR VALLEY . . . . <column d=""> . . . BEAR VALLEY,LAKE ALPINE,KIRKWOOD,MESA VISTA,MARKLEEVILLE,WOODFORDS,FREDRICKSBURG,CRYSTAL SPRINGS . . . . . . . . . . . . . . . . . . LAKE ALPINE . . . . . . . . . . . . . . . . . . KIRKWOOD
CA_ALAMEDA . . . 3 . . . SAN LEANDRO . . . <column d=""> . . . SAN LEANDRO,HAYWARD,ALBANY,ALAMEDA . . . . . . . . . . . . . . . . . . HAYWARD . . . . . . . . . . . . . . . . . . ALBANY . . . . . . . . . . . . . . . . . . ALAMEDA CA_ALPINE. . . . . .7 . . . BEAR VALLEY . . . . <column d=""> . . . BEAR VALLEY,LAKE ALPINE,KIRKWOOD,MESA VISTA,MARKLEEVILLE,WOODFORDS,FREDRICKSBURG,CRYSTAL SPRINGS . . . . . . . . . . . . . . . . . . LAKE ALPINE . . . . . . . . . . . . . . . . . . KIRKWOOD
可以嘗試一下(如果我理解正確的問題)
Sub test()
Dim Ws As Worksheet, StrS As Variant, SubNameCnt As Long
Dim Rw As Long
Set Ws = ThisWorkbook.Sheets("Sheet2")
Rw = 1
nm = Ws.Range("A" & Rw).Value
Do While nm <> ""
StrS = Split(Ws.Range("E" & Rw).Value, ",")
SubNameCnt = UBound(StrS) + 1
'Somehow speedy than single row insert
If SubNameCnt > 0 Then
Ws.Range("A" & Rw + 1 & ":A" & Rw + SubNameCnt).EntireRow.Insert xlShiftDown
Ws.Range("A" & Rw + 1 & ":A" & Rw + SubNameCnt).Value = nm
Ws.Range("C" & Rw + 1 & ":C" & Rw + SubNameCnt).Value = Application.Transpose(StrS)
End If
'A slow process (so not used but produced for simple understanding only)
'For i = LBound(StrS) To UBound(StrS)
'Ws.Range("A" & Rw).Offset(i + 1).EntireRow.Insert xlShiftDown
'Ws.Range("A" & Rw).Offset(i + 1).Value = nm
'Ws.Range("A" & Rw).Offset(i + 1, 1).Value = i + 1
'Ws.Range("A" & Rw).Offset(i + 1, 2).Value = StrS(i)
'Next i
Rw = Rw + SubNameCnt + 1
nm = Ws.Range("A" & Rw).Value
Loop
End Sub
使用臨時數據進行代碼測試
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.