【问题标题】:Vba write in next cell if limit of one cell is reached如果达到一个单元格的限制,则 Vba 写入下一个单元格
【发布时间】:2019-06-23 17:21:48
【问题描述】:

我使用 VBA 创建了一个 CSV 到 Json 转换器。为此,我创建了以下函数:

  If parseAsArrays Then ' Check to see if we need to make our JSON an array; if not, we'll make it an object
    For rowCounter = 1 To rangeToParse.Rows.Count ' Loop through each row
        temp = "" ' Reset temp's value

        For columnCounter = 1 To rangeToParse.Columns.Count ' Loop through each column
            temp = temp & """" & rangeToParse.Cells(rowCounter, columnCounter) & """" & ","
        Next

        temp = "[" & Left(temp, Len(temp) - 1) & "]," ' Remove extra comma from after last object
        parsedData = parsedData & temp ' Add temp to the data we've already parsed
    Next

我的“parsedData”子在这里:

Sub parseData()
Worksheets("Sheet2").Range("b1") = toJSON(getValuesRange("Sheet1"), False) ' Set cell B1's value to our JSON data

结束子

代码运行良好,但有时生成的 json 对于一个单元格来说太大了。因此,如果 json 对于一个单元格来说太大,我想创建一个 if 子句来将 json 写入两个或多个单元格中。有人知道怎么做吗?

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    您可以根据Excel中的单元格字符限制拆分返回的字符串,我认为目前是32767。

    下面的内容可能是一个很好的起点,尽管您可能希望扩展您的第一个函数只是为了返回一个数组并在此处剪切拆分字符串函数,因为它正在撤消/重复您的一些初始工作。

    我使用 Cells(Row, Column) 通过输出列进行迭代,因为我发现它比偏移量更直观。

    Sub parseData()
    
    Dim xlCellMaxChar
    Dim myRow
    Dim myCol
    Dim StrArr
    Dim ColCounter
    
    myRow = 1
    myCol = 2
    
    xlCellMaxChar = 32767
    returned_string = toJSON(getValuesRange("Sheet1"), False)
    
    If Len(returned_string) >= xlCellMaxChar Then
        StrArr = SplitString(returned_string, xlCellMaxChar)
        For ColCounter = 0 To UBound(StrArr) - 1
            Worksheets("Sheet2").Cells(myRow, myCol + ColCounter) = StrArr(ColCounter)
        Next
    Else
        Worksheets("Sheet2").Cells(myRow, myCol) = returned_string
    End If
    
    End Sub
    
    Public Function SplitString(ByVal str As String, ByVal numOfChar As Long) As String()
        Dim sArr() As String
        Dim nCount As Long
        ReDim sArr(Len(str) \ numOfChar)
        Do While Len(str)
            sArr(nCount) = Left$(str, numOfChar)
            str = Mid$(str, numOfChar + 1)
            nCount = nCount + 1
        Loop
        SplitString = sArr
    End Function
    

    希望有帮助

    【讨论】:

    • 谢谢,但如果达到限制,我怎么能转到下一个单元格并继续我的 json
    • 因此,在此代码中,您不必担心限制,而您可以继续使用 toJSON 函数并在一个大字符串中收集所有数据。当它返回到 Parsed Data sub 时,它会查看它的长度并拆分为正确数量的单元格。如有误解请见谅。
    • 对不起,我误解了你的回答。它的工作!非常感谢
    猜你喜欢
    • 1970-01-01
    • 2022-06-23
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多