Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 将一个值拆分为两个不同的变量_Vba_Excel 2013 - Fatal编程技术网

Vba 将一个值拆分为两个不同的变量

Vba 将一个值拆分为两个不同的变量,vba,excel-2013,Vba,Excel 2013,我以为我解决了一个问题,但现在我面临另一个问题。。。VBA太难了 For i = 2 To LastRow For j = 2 To LastCol ' '*There is lots of code here....* ' salk = Sheets("SheetS").Cells(i, j).Value presence = WorksheetFunction.CountIf(R

我以为我解决了一个问题,但现在我面临另一个问题。。。VBA太难了

   For i = 2 To LastRow
    For j = 2 To LastCol
        '
        '*There is lots of code here....*
        '
        salk = Sheets("SheetS").Cells(i, j).Value
        presence = WorksheetFunction.CountIf(Range("B1:D19"), salk)
        
        
                Dim arrOutput(2)
                
                Select Case presence
                    Case 1
                        Sheets("SheetX").Cells(i, j).Value = salk & " (" & GroupCol(salk) & ")"
                    Case 2
                        arrOutput(0) = Int(GroupCol(salk) / presence)
                        arrOutput(1) = GroupCol(salk) - arrOutput(0)
                        arrOutput(2) = 0
                   
                        Sheets("SheetX").Cells(i, j).Value = salk & " (" & arrOutput(0) & " - " & arrOutput(1) & ")"
                    Case Else
                        MsgBox "Error"
                End Select
    Next j
Next i
通过上面的代码,我成功地获得了以下结果:

我对把一个奇数分成两个不同数的代码非常满意。所以我不必把人一分为二。当一组有一个偶数作为结果时,它可以被分成两个相同的数。当它是一个奇数时,它就会变得非常困难。戴夫帮助我解决了奇数问题。我已经在我的代码中实现了Dave的代码。您可以看到,括号中的所有数字都是属于团队的组中的总人数。你看4a4总共有39个。因为这个组出现了两次,所以我想把这个组分成两个。当我这样做时,我得到了18.5,Dave的代码(上面实现的)使我能够得到以下两个数字19和20。 我的问题是在两个组中得到这两个独立的数字,组名为C的组得到19(见图片中的B2),另一个数字20到B6。调整后,我得到以下图像:


因为select案例处于循环中,所以我无法将它们保留到单独的变量中:(…有没有办法得到我想要的。

我有一个潜在的解决方案(花了我一些时间,算法质量不太好)

而不是做:

Sheets("SheetX").Cells(i, j).Value = salk & " (" & arrOutput(0) & " - " & arrOutput(1) & ")"
案例2中
您可以尝试(您必须调整我的代码,我在个人示例中尝试过):

我不完全确定这是否会起作用,因为我假设
“B1:D19”
与嵌套for循环相关联(在范围方面)

如前所述,您可能需要修改此代码。重要的是,我会找到在当前单元格之前找到salk的次数,并(在您的示例中为0或1),并将其与数组中的位置关联(:

Select Case
可能会更短,因为您在列上循环,然后在行上循环,但是

注意:这是一个快速而肮脏的代码,我可以清楚地进行优化和分解(例如使用
for
循环,而不是
select case


无论如何,我希望这会有帮助,你可以用它来做你想做的事情

你也可以发布示例输入吗?我很想提供帮助,但你应该添加文本示例,因为不是每个人都能看到图片(比如我:/)哦…我刚刚注意到你在编辑之前有文本示例…我来检查一下(:您的代码可以进行一些调整,但我不明白它是如何工作的。无论如何,我现在可以继续…谢谢!简而言之,我的想法是将每个新的
salk
与数组的以下情况关联起来…但是如果您成功地调整了它,这是一个开始(:
' ====== ALGO START
' The following calculate the number of times salk appears before the current cell  
Select Case i    ' Depends on the ROWS since you CAN'T use a range which is not continuous with COUNTIF!
    Case 1
        presenceCurr = WorksheetFunction.CountIf(Range("B1" & ":" & Cells(i, j).Address), salk)
    Case 2
        presenceCurr = WorksheetFunction.CountIf(Range("B2" & ":" & Cells(i, j).Address), salk) _
                 + WorksheetFunction.CountIf(Range("B1:D1"), salk)
    Case 3
        presenceCurr = WorksheetFunction.CountIf(Range("B3" & ":" & Cells(i, j).Address), salk) _
                 + WorksheetFunction.CountIf(Range("B1:D2"), salk)
    Case 5
        ' etc ...

    ' All the other Cases

    Case 19
        presenceCurr = WorksheetFunction.CountIf(Range("B19" & ":" & Cells(i, j).Address), salk) _
                 + WorksheetFunction.CountIf(Range("B1:D18"), salk)
    Case Else       ' Should not happen
        MsgBox "Error, out of range"
End Select
presenceCurr = presenceCurr - 1    ' Minus 1 because the current cell would be counted
' ===== ALGO END

Sheets("SheetX").Cells(i, j).Value = salk & " (" & arrOutput(presenceCurr) & ")"