VBA for excel error of type mismatch error centering around "For k= rangeValues(0) To rangeValues(1)"

问题描述 投票:0回答:0

好吧,诚然,我正在尝试使用 chatgpt 并绕圈子。只是想解决一个工作问题,我不是程序员。我需要处理数字和字母数字以及范围内的数据。它看起来是这样的:TU1000-TU1005,23000,2400-2500 等...我正在处理 excel 文档中的数据并尝试使用 VBA 来这样做。我正在尝试复制单个选定的单元格内容,并将其垂直分解到另一张纸上。内容可能是数字或字母数字,我收到有关使用来自 chatgpt 的变量数组的建议。但据我所知,这离基地很远。

这是经过无数次尝试后得出的结论:

Sub CopyAndPasteValue()
    Dim sourceRange As Range
    Dim targetRange As Range
    Dim cell As Range
    Dim value As Variant
    Dim uniqueValues As New Collection
    Dim uniqueValuesArray() As Variant ' declare an array variable
    Dim i As Long, j As Long, k As Long
    Dim sourceArray() As String ' declare sourceArray as a string array
    Dim RowCount As Long ' declare RowCount as a Long variable

    ' Set the source range to the selected cells in the CMP update requests sheet
    Set sourceRange = Selection

    ' If the source range is a single cell, split the cell value into an array
    If sourceRange.Cells.Count = 1 Then
        sourceArray = Split(sourceRange.value, ",")
        RowCount = UBound(sourceArray) - LBound(sourceArray) + 1
        Set sourceRange = sourceRange.Resize(RowCount, 1)
    End If

    ' Clear contents of previous data in the index and match sheet
    Sheets("index and match sheet").Range("A2:A" & Rows.Count).ClearContents

    ' Set the target range to cell A2 in the index and match sheet
    Set targetRange = Sheets("index and match sheet").Range("A2")

    ' Loop through each cell in the source range
    For Each cell In sourceRange
        ' Split the cell value by comma and loop through resulting values
        If Len(cell.value) > 0 Then
            For i = 0 To UBound(Split(cell.value, ","))
                value = Trim(Split(cell.value, ",")(i))
                ' Check if value contains a dash
                If InStr(value, "-") > 0 Then
                    ' Split the value by dash
                    Dim rangeValues() As String
                    rangeValues = Split(value, "-")
                    If IsNumeric(rangeValues(0)) And IsNumeric(rangeValues(1)) Then
                        For k = CLng(rangeValues(0)) To CLng(rangeValues(1))
                            ' Add the value to the unique values collection if it is not already present
                            On Error Resume Next
                            uniqueValues.Add CStr(k), CStr(k)
                            On Error GoTo 0
                        Next k
                    Else
                        For k = rangeValues(0) To rangeValues(1)
                        'likely I need this to be a variant array which is an array declared as having a variant data type'
                            ' Add the value to the unique values collection if it is not already present
                            On Error Resume Next
                            uniqueValues.Add CStr(k), CStr(k)
                            On Error GoTo 0
                        Next k
                    End If
                Else
                    ' Add the value to the unique values collection if it is not already present
                    On Error Resume Next
                    uniqueValues.Add value, value
                    On Error GoTo 0
                End If
            Next i
        End If
    Next cell

    ' Convert the collection to an array
    ReDim uniqueValuesArray(0 To uniqueValues.Count - 1)
    For i = 1 To uniqueValues.Count
        uniqueValuesArray(i - 1) = uniqueValues(i)
    Next i

    ' Loop through uniqueValues array and paste each value to the target range in the index and match sheet
    For j = 0 To UBound(uniqueValuesArray)
        targetRange.value = uniqueValuesArray(j)
        Set targetRange = targetRange.Offset(1, 0)
    Next j
   
      ' Copy range D1:D141 to range E1:E141 using the Value property
    Sheets("index and match sheet").Range("E1:E141").value = Sheets("index and match sheet").Range("D1:D141").value
    
End Sub
excel vba variables numeric alphanumeric
© www.soinside.com 2019 - 2024. All rights reserved.