我创建了一个用户窗体,用户可以在其中输入所需的网格大小。表格会自动填充以匹配其输入。格式由x轴的字母参考和y轴的数字组成(设置的Excel完全相同,即单元格1为参考A-1)。
然后它们将在每行中放入三个读数,然后在其中填充平均值。我正在尝试创建一种将这些结果复制为实际网格格式的方法。
已随附两张照片,以阐明表格格式和所需的网格布局当前的外观。
我尝试过各种循环...我尝试设置的一个想法是为变量分配了一个“计数”功能。然后它将计算F列中的“ 1”的数量。然后尝试建立一个循环以将其复制并粘贴(转置)到网格中,并将复制范围设置为(i + Count.Value)。
但是,我无法找出用于重新启动先前未选择的单元格上的复制/粘贴的循环的公式。即使用上面的公式,第一个范围将是F3:F7,第二个F4:F8,实际上我需要将其设置为F8:F12。
代码示例
`The loop I setup to take the user input values for the grid size to put it in the table`
For i = 1 To Axial_Data_Points
For j = 1 To Circum_Data_Points
If i <= 26 Then
Worksheets("Data Entry").Cells(j + 2 + (i - 1) * Circum_Data_Points_Box, 5).Value = Chr(i + 64)
Worksheets("Data Entry").Cells(j + 2 + (i - 1) * Circum_Data_Points_Box, 6).Value = j
ElseIf i <= 52 Then
Worksheets("Data Entry").Cells(j + 2 + (i - 1) * Circum_Data_Points_Box, 5).Value = "A" & Chr(i + (64 - 26))
Worksheets("Data Entry").Cells(j + 2 + (i - 1) * Circum_Data_Points_Box, 6).Value = j
'This then goes on to if i<=78 etc. in a similar format before the loop ends
当前CountIf函数
CountNumbers = Application.WorksheetFunction.CountIf(Range("F:F"), 1)
如上所述,请按上述说明进行循环,但目前无法使用,因为如上所述。
任何帮助或指针,我们深表感谢。谢谢
答案 0 :(得分:0)
我将使用公式(而不是循环),并最终将其转换为值。这应该比遍历所有单元格更快。
将以下内容想象为工作表My List
因此,只需将以下公式输入到单元格C3(表格的相应A1的单元格C3)中,然后向右和向下拉:
=IFNA(INDEX('My List'!$L:$L,MATCH(C$2&"-"&$B3,'My List'!$G:$G,0)),"-")
要获得以下结果:
或者只需将带有VBA的公式写到完整的网格中,而只需一行:
Range("C3:AP32").Formula = "=IFNA(INDEX('My List'!$L:$L,MATCH(C$2&""-""&$B3,'My List'!$G:$G,0)),""-"")"
或者,如果您不希望将公式替换为以下值:
Range("C3:AP32").Formula = "=IFNA(INDEX('My List'!$L:$L,MATCH(C$2&""-""&$B3,'My List'!$G:$G,0)),""-"")"
Range("C3:AP32").Value = Range("C3:AP32").Value
答案 1 :(得分:0)