Я новичок в VBA, поэтому заранее благодарим вас за терпение. Я написал подпрограмму, которая принимает номер детали (PN) в диапазоне C2 и выполняет три разные функции split
и left
для заполнения столбцов слева и справа от PN извлеченными частями строки PN. Вот скриншот столбцов и то, что он заполняет.
Вот мой код на данный момент:
Sub PN_Autotfill1()
Dim PN As Range
Dim SCPort_Type As Range
Dim SCPort_Size As Range
Dim Start_FittingSize As Range
Dim PN_String As String
Dim PN_1 As Variant
Dim PN_2 As Variant
Dim PN_3 As Variant
Set PN = Range("C2")
Set SCPort_Type = PN.Offset(, -2)
Set SCPort_Size = PN.Offset(, -1)
Set Start_FittingSize = PN.Offset(, 1)
PN_String = PN.Value
If InStr(PN_String, "Flange") > 0 Then
'Splits PN into SC Port Type
PN_1 = Split(PN_String, "#")(1)
PN_2 = Left(PN_1, 2)
SCPort_Type.Value = "#" & PN_2 & "Flange"
'Splits PN into SC Port Size, Start, and End Fitting
PN_3 = Split(PN_1, "-")(1)
SCPort_Size = PN_3
Start_FittingSize = PN_3
End If
End Sub
Теперь я хочу сделать al oop который применяет эти функции к каждой ячейке, содержащей PN в столбце C. Я нашел несколько хороших примеров на Stackoverflow и веб-сайте учебника VBA , которые создают циклы для одной функции разделения, но не для нескольких функций разделения. Похоже, в игру вступят два цикла For: LastRow = Cells(Rows.Count, "C").End(xlUp).Row
с For a = 2 To LastRow
и For i = 1 To UBound(Unsure what goes here)
. Есть ли у кого-нибудь советы или пример кода, как go об этом? Заранее благодарим вас за любую помощь!
Вот код с интегрированным ответом Jamheadart:
Sub PN_Autotfill_Functions(PN As Range)
Dim SCPort_Type_Size As Range
Dim Start_FittingSize As Range
Dim PN_String As String
Dim LastRow As Single
Dim PN_1 As Variant
Dim PN_2 As Variant
Dim PN_3 As Variant
Set SCPort_Type_Size = PN.Offset(, -1)
Set Start_FittingSize = PN.Offset(, 1)
PN_String = PN.Value
LastRow = Cells(Rows.Count, "C").End(xlUp).Row
If InStr(PN_String, "Flange") > 0 Then
'Splits PN into SC Port Type and Size, then combines results
PN_1 = Split(PN_String, "#")(1)
PN_2 = Left(PN_1, 2)
PN_3 = Split(PN_1, "-")(1)
SCPort_Type_Size.Value = "#" & PN_2 & " Flange" & ", -" & PN_3
'Fills in Start and End Fitting Size based on previous Split of PN
Start_FittingSize = PN_3
End If
End Sub
Sub PN_Autofill_Loop()
Dim a As Long
Dim PN As Range
Set PN = ActiveCell
For a = 2 To 11
PN_Autotfill_Functions Range("C" & a)
Next a
End Sub