繁体   English   中英

如何在Excel-VBA中退出循环

[英]How to exit for loop in excel-vba

我的数据集是这样的

在此处输入图片说明

我想做他们

在此处输入图片说明

请看第一行。

我的代码是

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

问题是在运行此代码时,它显示错误,因为for循环未完成。 我们能做些什么?

你能这样吗? 在我看来,您只是在第一行的标题中添加了后缀...

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