将表值复制为网格格式

时间:2019-06-07 07:26:21

标签: excel vba excel-formula

我创建了一个用户窗体,用户可以在其中输入所需的网格大小。表格会自动填充以匹配其输入。格式由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)

如上所述,请按上述说明进行循环,但目前无法使用,因为如上所述。

任何帮助或指针,我们深表感谢。谢谢

Table Setup Grid Layout

2 个答案:

答案 0 :(得分:0)

我将使用公式(而不是循环),并最终将其转换为值。这应该比遍历所有单元格更快。

将以下内容想象为工作表My List

enter image description here

因此,只需将以下公式输入到单元格C3(表格的相应A1的单元格C3)中,然后向右和向下拉:

=IFNA(INDEX('My List'!$L:$L,MATCH(C$2&"-"&$B3,'My List'!$G:$G,0)),"-")

要获得以下结果:

enter image description here

或者只需将带有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)

只想向您展示您情况的简化版本:

enter image description here

运行此代码:

Sub Test()

Dim X As Long
With ActiveWorkbook.Sheets("Sheet1")
    For X = 1 To 8 'Should be your Axial_Data_Points I assume
        .Range(.Cells(X, 8).Value & .Cells(X, 9).Value + 2).Offset(0, 2) = .Cells(X, 10).Value
    Next X
End With

End Sub

运行代码后:

enter image description here

您正在寻找的那种循环吗?