简体   繁体   English

如何在Excel-VBA中退出循环

[英]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. 问题是在运行此代码时,它显示错误,因为for循环未完成。 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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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