简体   繁体   中英

How to exit for loop in excel-vba

My dataset is like this

在此处输入图片说明

I want to make them

在此处输入图片说明

Please look at the first row.

My code is

Private Sub CommandButton1_Click()
  Dim MyColInstance, i As Long
  Dim MyWorksheetLastColumn As Byte
  MyWorksheetLastColumn = Worksheets(1).Cells(1, columns.Count).End(xlToLeft).Column

  For i = 1 To MyWorksheetLastColumn
    MyColInstance = ColInstance("Preference", i)
    Cells(1, MyColInstance).Value = "Preference" & i

  Next i

End Sub

Function ColInstance(HeadingString As String, InstanceNum As Long)
  Dim ColNum As Long
  On Error Resume Next
  ColNum = 0

  For X = 1 To InstanceNum
     ColNum = (Range("A1").Offset(0, ColNum).Column) + Application.WorksheetFunction.Match(HeadingString, Range("A1").Offset(0, ColNum + 1).Resize(1, Columns.Count - (ColNum + 1)), 0)
  Next

  ColInstance = ColNum

End Function

The problem is while running this code, it shows an error because the for loop is not complete. What can we do?

Can you do it this way? It seems to me you are just adding a suffix to your headers in the first row...

Sub UpdateColumnHeaders()
    Dim headers As Range, header As Range, suffixes As Range, suffix As Range, i As Integer

    Set headers = Range(Cells(1, 1), Cells(1, Range("A1").End(xlToRight).Column))
    Set suffixes = Range("A1:A" & Range("A1").End(xlDown).Row)

    i = 1

    For Each header In headers
        If header = "Preferences" Then
            header = header & suffixes(i)
            i = i + 1
        End If
    Next
End Sub
Private Sub CommandButton1_Click()

Dim Count1, Count2 As Integer
Dim MyWorksheetLastRow As Byte
Dim MyColInstance, emp_i As Long

For Each Row_Cel In Range("1:1")
If Row_Cel.Value = "Employment" Then
Count1 = Count1 + 1
End If
If Row_Cel.Value = "Job" Then
Count2 = Count2 + 1
End If
Next Row_Cel

For emp_i = 1 To Count1
MyColInstance = ColInstance("Employment", emp_i)
Cells(1, MyColInstance).Value = "Employment" & emp_i
Next emp_i
For emp_i = 1 To Count2
MyColInstance = ColInstance("Job", emp_i)
Cells(1, MyColInstance).Value = "Job" & emp_i
Next emp_i


End Sub

Function ColInstance(HeadingString As String, InstanceNum As Long)
Dim ColNum As Long
On Error Resume Next
ColNum = 0
For X = 1 To InstanceNum
ColNum = (Range("A1").Offset(0, ColNum).Column) + Application.WorksheetFunction.Match(HeadingString, Range("A1").Offset(0, ColNum + 1).Resize(1, Columns.Count - (ColNum + 1)), 0)
Next
ColInstance = ColNum
End Function

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM