【问题标题】:Compare arrays and assigning values Excel VBA比较数组和赋值 Excel VBA
【发布时间】:2020-09-02 11:01:57
【问题描述】:

我有两个日历,一个用于 10 辆汽车,第二个用于 15 位车手。我想为汽车日历的每一天分配司机。

Here is image of cars calendar

And here is imade of drivers calendar

这是我的代码,它解释了我的目标,但当然不起作用,因为我不熟悉 vba 我可以弄清楚如何按列比较两个数组的值,但无法从驱动程序中分配值汽车日历的名称列

Private Sub CommandButton1_Click()

Dim cars() As Variant
Dim drivers() As Variant
cars = Range("A1:F10")
drivers = Range("M1:R15")

For Each carDay In cars
   For Eeach driverDay In drivers
      Dim driver As Long
      Set driver = driverDay(1)
         If carDay(2) = driverDay(2) Then
            carDay.Value = driver
            driverDay.Value = "used"
         End If
   Next driverDay
Next carDay


End Sub

【问题讨论】:

  • 您的日历图片没有标题...使了解您的日历实际包含的内容变得复杂...而且您希望如何将两个日历相互连接也不清楚...
  • 起点似乎是您的汽车日历,其中可能包含汽车及其预订......?那么您是否尝试将驾驶员分配给汽车并将所有日期复制到驾驶员日历中?
  • 如果你的代码不起作用,那么如果有人试图从中得到解释,就会得出错误的结论,不是吗……?你需要写一些例子,包括数据链给出了什么,然后它去哪里做什么,以及应该导致什么......然后一些代码可能会在最后出现......
  • cars = Range("A1:F10")drivers = Range("M1:R15") 应该被引用到工作表或者工作簿,例如 cars = ActiveWorkbook.ActiveSheet.Range("A1:F10")drivers = ActiveWorkbook.ActiveSheet.Range("M1:R15") 至少...

标签: excel vba variable-assignment jagged-arrays


【解决方案1】:

Collection Object

Option Explicit

Sub CommandButton1_Click()

    Dim coA As New Collection, coI As New Collection, coY As New Collection
    Dim n As Integer, d As Integer, sDriver As String, sCar As String
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")

    For d = 1 To 5
        For n = 1 To 15
            sDriver = ws.Cells(n, "M")
            Select Case ws.Cells(n, "M").Offset(0, d)
                Case "A": coA.Add sDriver
                Case "I": coI.Add sDriver
                Case "Y": coY.Add sDriver
            End Select
        Next

        For n = 1 To 10
            sCar = ws.Cells(n, "A")
            Select Case ws.Cells(n, "A").Offset(0, d)
                Case "A": sDriver = coA(1): coA.Remove 1
                Case "I": sDriver = coI(1): coI.Remove 1
                Case "Y": sDriver = coY(1): coY.Remove 1
            End Select
            ws.Cells(20 + n, "A").Offset(0, d) = sCar & ":" & sDriver
        Next

        Set coA = Nothing
        Set coI = Nothing
        Set coY = Nothing

    Next

End Sub

【讨论】:

  • 谢谢!这正是我需要的。我看到了锯齿状数组的方式,但集合也可以。
猜你喜欢
  • 2013-08-27
  • 1970-01-01
  • 1970-01-01
  • 2013-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-05
  • 1970-01-01
相关资源
最近更新 更多