如下所示,我有3张表,即:表“Shops Fruits Data”,表(“Months”)和表(“Output”)。
我正在尝试将数据从“Shops Fruits data”表中复制到(“Output”)结构中,该数据基于从表中的月份(“months”)。我已经写了一段代码。然而,使用这段代码,我只能遍历第一行。我不明白,我怎样才能继续到下一排,直到最后一排。其次,我也不能将商店和水果的名称复制到表单(“输出”)。
我已经在图纸输出表中手动复制了所需的结果,如下所示,在那里您可以看到我想要实现的目标。如果有人能带领我,那就太好了!非常感谢。
表格(“商店水果数据”)
工作表(“月”)
工作表(“输出”)
我正在尝试的代码:
Sub test()
Dim c As Range, d As Range, ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet, LastRow As Long
Dim Mon As String
Set ws1 = Sheets("Shops-Fruits Data")
Set ws2 = Sheets("Months")
Set ws3 = Sheets("Output")
LastRow = ws2.Cells(Rows.Count, 1).End(xlUp).Row
i = 2
For Each c In ws2.Range("A1:A" & LastRow)
Mon = c.Value
With ws1.Range("D2:O2")
Set d = .Find(Mon, , LookIn:=xlValues)
With ws3.Range("D:D")
'Copy Months
.Cells(i, 1) = c.Value
'Copy Year
.Cells(i, 0) = d.Offset(-1, 0).Value
'Copy Quantity
.Cells(i, 2) = d.Offset(1, 0).Value
'Copy Fruit Name till December.
.Cells(2, -1) = d.Offset(1, -1).Value 'But it fails!
'Copy Shop Name till December.
.Cells(2, -2) = d.Offset(1, -2).Value 'But it fails!
i = i + 1
'How do I continue to next row now?
End With
End With
Next c
End Sub
根据Tim Williams提出的观点,以下是取消数据旋转的代码。
Sub test()
Sheets("Shops-Fruits Data").Range("Table10").Select
ActiveWorkbook.Queries.Add Name:="Query", Formula:= _
"let" & Chr(13) & "" & Chr(10) & " Source = Excel.CurrentWorkbook(){[Name=""Table10""]}[Content]," & Chr(13) & "" & Chr(10) & " #""Changed Type"" = Table.TransformColumnTypes(Source,{{""Shop"", type text}, {""Fruits"", type text}, {""Quantity"", type text}, {""JAN"", Int64.Type}, {""FEB"", Int64.Type}, {""MAR"", Int64.Type}, {""APR"", Int64.Type}, {""MAY"", Int64.Type}, {""JUN"", Int64.Type}, {""JUL"", Int64.Type}, " & _
"{""AUG"", Int64.Type}, {""SEP"", Int64.Type}, {""OCT"", Int64.Type}, {""NOV"", Int64.Type}, {""DEC"", Int64.Type}})," & Chr(13) & "" & Chr(10) & " #""Unpivoted Other Columns"" = Table.UnpivotOtherColumns(#""Changed Type"", {""Shop"", ""Fruits"", ""Quantity""}, ""Attribute"", ""Value"")" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & " #""Unpivoted Other Columns"""
With Sheets("Output").ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=""Query"";Extended Properties=""""" _
, Destination:=Sheets("Output").Range("$A$1")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM [Query]")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = "Table_10"
.Refresh BackgroundQuery:=False
End With
Range("F2").Select
End Sub
这里有一个基本的定义:
Sub Depivot()
Dim arr, arrOut, r As Long, c As Long, rOut As Long
arr = Worksheets("Data").Range("a1").CurrentRegion.Value 'input data to array
ReDim arrOut(1 To UBound(arr, 1) * UBound(arr, 2), 1 To 5) 'resize output array (approx. size)
'loop input array
For r = 3 To UBound(arr, 1)
For c = 4 To UBound(arr, 2)
rOut = rOut + 1
arrOut(rOut, 1) = arr(r, 1)
arrOut(rOut, 2) = arr(r, 2)
arrOut(rOut, 3) = arr(1, c)
arrOut(rOut, 4) = arr(2, c)
arrOut(rOut, 5) = arr(r, c)
Next c
Next r
'place the output on a sheet
Worksheets("Depivot").Range("A1").Resize(rOut, 5).Value = arrOut
End Sub
问题内容: 我想知道是否有任何内置方法可以继续进行python外循环中的下一次迭代。例如,考虑以下代码: 我希望此继续语句退出jj循环并转到ii循环中的下一项。我可以通过其他方式(通过设置标志变量)来实现此逻辑,但是有一种简单的方法可以做到这一点,还是像要求太多? 问题答案: 在一般情况下,当您有多个循环级别且对您不起作用时(因为您要继续上一个循环,而不是当前循环的右上循环),可以执行以下操作之一
问题内容: 您如何在Python中说两个嵌套循环的父循环? 我知道您可以在大多数情况下避免这种情况,但是可以在Python中完成吗? 问题答案: 摆脱内循环(如果之后没有其他东西) 将外部循环的主体放入函数中并从函数返回 引发异常并在外部捕获它 设置一个标志,从内部循环中断开并在外部级别对其进行测试。 重构代码,因此您不再需要这样做。 我每次都会带着5。
在Kotlin中,我不能在函数循环和我的lambda中执行或--就像我在普通的循环中一样。例如,这不起作用: 有一些旧的文档提到这是可用的,但似乎从未实现过。当我想从lambda中或时,获得相同行为的最佳方法是什么? 注意:这个问题是作者有意编写和回答的(自我回答的问题),因此通常被问到的Kotlin主题的惯用答案出现在so中。也是为了澄清一些为科特林的阿尔法写的真正古老的答案,这些答案对当今的科
问题是,如果不停止整个程序,我就不能退出虽然循环。 当我在Raspberry Pi上执行代码时,相机开始录制,但当我想结束视频并按Ctrl c时,整个程序停止,而不是在while循环后继续。我以为信号处理器会捕捉到键盘中断,但它没有。 我的代码: 我尝试的是: 错误:
我需要12次外循环,每个外循环1次内循环 例如: 等 但现在我的内循环在第一次迭代的外循环上运行。 请帮助我如何使用for循环执行此操作。