使用Do Loop和Variables来堆叠列

时间:2013-05-06 20:21:35

标签: vba ms-access

更新了以下代码:

我认为对于熟悉使用do循环变量的人来说,这可能会非常快。我有一个包含大量列的表,我需要做的是以三个为一组堆栈列(我会用union来做这个,但是有太多的列)。

例如,列当前是线性形式的,我想要堆叠它们的数据:

示例:

1 2 3 4 5 6 7 8 9等。

1 2 3

4 5 6

7 8 9

我从来没有在访问中使用do循环,我想我需要这样做,并结合一个变量,我将第1,2,3列附加到表中,然后将第4,5,6列附加到同桌等。

我一直无法理解如何在VBA中使用变量,但我会继续看看是否可以解决这个问题。

非常感谢任何帮助。

由于

我想出的下面的工作代码,不确定这是否是最好的方法:

Private Sub Command0_Click()


Dim int1 As Integer
Dim int2 As Integer
Dim int3 As Integer
int1 = 1
int2 = 2
int3 = 3

DoCmd.SetWarnings (warningsoff)


Do Until int1 = CurrentDb.TableDefs("Data").Fields.Count + 1

DoCmd.RunSQL ("INSERT INTO Stack ( 1, 2, 3 ) SELECT Data.T" & CStr(int1) & ", Data.T" & CStr(int2) & ", Data.T" & CStr(int3) & " FROM Data")

int1 = int1 + 3
int2 = int2 + 3
int3 = int3 + 3

Loop
DoCmd.SetWarnings (warningson)

MsgBox CurrentDb.TableDefs("Data").Fields.Count + 1

End Sub

1 个答案:

答案 0 :(得分:0)

虽然纯粹在VBA中执行此操作在技术上是可行的,但您应该重新考虑union SQL查询。复制和粘贴代码看起来不太漂亮,但它比构建,测试和调试VBA更容易,更快。

(您甚至可以使用基本的Excel函数创建工具,为您编写联合查询的部分内容。只需将字段名称粘贴到A列中,然后将类似="["+A1+"],"的内容添加到B列中)

Select [Col1] as "Col1",[Col2] as "Col2",[Col3] as "MyCol3" from [MyTable]
union
Select [Col4],[Col5],[Col6] from [MyTable]
union
Select [Col7],[Col8],[Col9] from [MyTable]
...

编辑:更好的方法

这是从我下面的评论中得到的。我假设你的数据是这样的(第一行是列名):

GrpA_Employee GrpA_Email    GrpA_Phone GrpB_Employee GrpB_Email GrpB_Phone 
Abe           Abe@GrpA.Com  111-1111   Bart          Bart@GrpB.com 222-22222

在这种情况下,每个“组”都会获得自己的3列。这很麻烦,难以导航,正如您刚刚发现的那样,很难用于简要目的。

请尝试使用此方法:

GroupName  Employee  Email         Phone
A          Abe       Abe@GrpA.com  111-1111
B          Bart      Bart@GrpB.com 222-2222

这更容易使用,您不必担心用完列(如果您担心用完行,那么Excel不是最佳选择)。如果您的用户不喜欢它,因为他们都想要自己的列,那么只需在顶部添加一些过滤器,以便他们可以过滤到他们选择的组。

现在,从Access,只需链接到这1个包含4列的表,您就完成了。不需要VBA,只是一种不那么繁琐的数据存储方法。