我有一张数以千计的列和行的数据表,这需要花费数天的时间来编辑,但我觉得必须有一种方法来编写我想要做的事情。我虽然是编程菜鸟,但如果这很简单(或不可能),那就很抱歉。
现在我有3列' V' ' A'和' D'。我有一个V A和D值的参与者列表。问题是,参与者值在一列中,也就是说,每个参与者在每列中有90个值。我需要将这90个值分解为30' V' 30' A'和30' D'将值复制到各自的列中,然后切换到下一个参与者列并执行相同操作。
基本上,我有:
V A D Participant 1 Participant 2 Participant 3 Etc.
1 1 1 1
2 2 2 2
3 4 3 5
4 6 9 0
... ... ... ...
90 90 90 90

我需要打破参与者1的90个值(在V列中放置前30个值,在A中放置30个,在D中放置30个),然后让Excel切换到参与者2将其90个值分解为VA和D列。然后重复这个过程。
提前感谢您提出的任何建议。
答案 0 :(得分:1)
此代码有两个for
循环,每个参与者一个(列),每个30个值的一个循环。它复制第一个参与者的前30个值并将其粘贴到另一个工作表上。然后对30的下一个块和30的第三个块重复此操作。然后外循环移动到下一个参与者。
在此示例中,我在工作表“Sheet2”上的列B
,C
和D
中有三个参与者,数据值从第2行开始。输出被粘贴到“ Sheet3“,从列F
Sub transpose()
Dim i As Integer
Dim j As Integer
Dim outCol As Integer
Dim outRow As Integer
Dim intStart As Integer
Dim intEnd As Integer
Dim wksData As Worksheet
Dim wksOut As Worksheet
Dim strParticipant As String
Dim strRange As String
Set wksData = Worksheets("Sheet2")
Set wksOut = Worksheets("Sheet3")
outRow = 2 'starting in row 2
For i = 2 To 5 'columns of participants'
strParticipant = wksData.Cells(1, i).Value
outCol = 6 'output begins in column 6 ("F")
For j = 1 To 3 'blocks of values per participant
intStart = (j - 1) * 30 + 2 'increment for every block of 30 (starting at row 2)
intEnd = intStart + 29
wksData.Range(Cells(intStart, i), Cells(intEnd, i)).Copy
wksOut.Cells(outRow, outCol).PasteSpecial Paste:=xlValues
outCol = outCol + 1
Next j
'The two lines below will output the participant's name - uncomment if required.
' strRange = "E" & outRow & ":E" & outRow + 29
' wksOut.Range(strRange) = strParticipant
outRow = outRow + 30 'change the output row
Next i
Set wksData = Nothing
Set wksOut = Nothing
End Sub