Excel表格-使用vba进行转置

Excel表格-使用vba进行转置,excel,vba,transpose,Excel,Vba,Transpose,我对VBA的世界很陌生,所以请原谅这可能是一个非常简单的问题 如果你看一看这些图片,我会试图解释我的奋斗仍然是什么。使用“转置”,我设法使A列变成第1行。我需要A列保持为A列(注意它们是合并的单元格),我需要第1行保持为第1行。基本上,我需要将B列转换成第2行,并将%的数字进行转置 现在看起来是这样的: 我希望它看起来像这样: 原始表比示例大得多…一种非常基本的方法是将粘贴复制为转置,下面是基本代码: Sub TransposeColToRow() ' TransposeColToRow M

我对VBA的世界很陌生,所以请原谅这可能是一个非常简单的问题

如果你看一看这些图片,我会试图解释我的奋斗仍然是什么。使用“转置”,我设法使A列变成第1行。我需要A列保持为A列(注意它们是合并的单元格),我需要第1行保持为第1行。基本上,我需要将B列转换成第2行,并将%的数字进行转置

现在看起来是这样的:

我希望它看起来像这样:


原始表比示例大得多…

一种非常基本的方法是将粘贴复制为转置,下面是基本代码:

Sub TransposeColToRow()
' TransposeColToRow Macro
Range("B3:B14").Select
Selection.Copy
Range("B20").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=True
End Sub
你也许可以测试一下这样的东西,看看它是否能止痒。这可以通过避免像下面这样的选择来改进(假设复制范围在称为“工作表1”的工作表上,粘贴范围在称为“工作表2”的工作表上-当然,这需要反映电子表格的真实性):


你不应该试着去做你要求的事情。您应该做的是更改SPSS中的轴。将A1/A2/A3数据点从行更改为列


您永远不应该自动降低效率,这会让所有跟随您并必须支持它的人感到困惑。

您不能复制、粘贴特殊、转置,或者这需要自动化吗?到目前为止,您研究/尝试了什么?更喜欢自动化,因为表格有几百行,有很多列,我还有几个不同的文件要修改。。。我试着记录一个宏,看看它是什么样子,但我不知道如何才能让它在整个表中运行,而不实际执行整个工作。我正在阅读“用于假人的Excel宏”,但我还没有经验来理解如何正确定义范围或使其循环。对于这个例子,它看起来像是
Sheets(1).Range(“B3:E”)和lastRow.copy:Sheets(2).Range(“B2”).PasteSpecial Transpose:=True
,并且感谢@jcd,这非常有帮助,因为它几乎“搔痒”. 如果你看一看我的原始图像,我会试图解释我的挣扎仍然是什么。使用基本代码,我设法将A列变成第1行。我需要A列保持为A列(注意它们是合并的单元格),我需要第1行保持为第1行。基本上我需要B列变成第2行,C2:E13中的%改变方向。对不起,解释得很笨拙!感谢@n8的输入,不幸的是这不是一个选项。让我解释一下结构是如何建立的。Q1是调查中的问题1,A1/2/3是每个问题的备选答案(重复),Dep1/2/3是使用备选答案(As)回答问题(Q)的部门。我无法在SPSS中的列和行中分离Qs和As。听起来您应该在Excel中输出原始数据和pivot。如果没有一堆脆弱的VBA黑客攻击,这类事情应该是可能的。不幸的是,这不是一个选项,但感谢您的输入。使用excel pivot原始数据或spss自定义表无法解决此问题,因为数据的结构不同。我会继续研究,希望能找到解决办法。显然,这不是现成的,因为我不能“仅仅”转置数据。再次感谢!问题可能是数据结构。如果它存储在这些列中,那么您可以按自己喜欢的任何方式进行透视:部门、问题编号、答案编号、答案回答。可能是源数据的结构不好,这妨碍了您获得所需的灵活性。无论如何,祝你好运。
Dim CopyRange as Range: Set CopyRange = ThisWorkbook.Worksheets("Sheet1").Range("B3:B14")
Dim PasteRange as Range: Set PasteRange = ThisWorkbook.Worksheets("Sheet2").Range("A2:M2")

CopyRange.Copy
PasteRange.PasteSpecial Paste:=xlPasteAll, Transpose:=True