我有在Excel表格,在下面的每个数字的例子表示电池:转换表格在Excel中文字 - 每个单元一个新行
11 12 13 14 15
21 22 23 24 25
31 32 33 34 35
我想这个表转换为文本文件看起来像这样:
11 12
13
14
15
21 22
23
24
25
31 32
33
34
35
我知道变调功能和文本表格,但我似乎无法达到我出了什么上面。
我有在Excel表格,在下面的每个数字的例子表示电池:转换表格在Excel中文字 - 每个单元一个新行
11 12 13 14 15
21 22 23 24 25
31 32 33 34 35
我想这个表转换为文本文件看起来像这样:
11 12
13
14
15
21 22
23
24
25
31 32
33
34
35
我知道变调功能和文本表格,但我似乎无法达到我出了什么上面。
使用一个简单的VBA是有效的创建实际的文件。
此代码从范围转储数据从A1
上次使用的电池在activesheet的E
列,到文件C:\ TEMP \ dummy.txt
请改变你的路径,以适应
Sub RipData()
Dim X
Dim lngRow As Long
Dim lngCol As Long
Dim objFSO As Object
Dim objTF As Object
X = Range([a1], Cells(Rows.Count, "E").End(xlUp))
Set objFSO = CreateObject("scripting.filesystemobject")
Set objTF = objFSO.createtextfile("C:\temp\dummy.txt")
For lngRow = 1 To UBound(X, 1)
objTF.writeline X(lngRow, 1) & vbTab & X(lngRow, 2)
For lngCol = 3 To UBound(X, 2)
objTF.writeline X(lngRow, lngCol)
Next
objTF.writeline
Next
objTF.Close
End Sub
我通常应用ROUND
,MOD
和OFFSET
的组合来将表格数据集合转换为单个列。这个问题有一个额外的皱纹,想要将第二个数字放在一列中的第二个数字右边,而在第一列中跳过该数字。你想在每组数字之间放置一个间隔行。这两个要求使得比通常的公式更加复杂。
对于第一列,开始在细胞A5,或在A列中另一单元格的行,其中是的偶数倍5,使用下面的公式,
= IFERROR(
OFFSET(
$A$1,
ROUNDDOWN(ROW(A5)/5 - 1, 0),
MOD(ROW(A5), 5) + (MOD(ROW(A5), 5) <> 0)
)/
(MOD(ROW(A5), 5) <> 4),
""
)
和复制下来的列。这假定数据行从单元格A1开始。
对于第二个柱,用在B列在列A中的起始细胞的右边的小区开始,进入该式中,
再次复制下来。
式的工作方式
无论是A列和B列函数是OFFSET
阐述,它接受作为其自变量的起始地址,行向下数(或向上)其结果范围将开始,列的数量在范围的右侧(或左侧)。 (它还需要两个参数,它们是要返回的范围的宽度和高度,因为我们只关注单个单元格,所以我们可以将这两个参数排除在外)。
例如,行计算对于列A使用表达式
ROUNDDOWN(ROW(A5)/5-1,0)
。
在单元格A5中,此公式解析为(5/5 - 1)或0,不需要舍入。因此,A1的行偏移量为0,这很有意义,因为A5公式正在处理第一行数据。
在单元格A6,该公式变为6/5 - 1,或1.2 - 1,或0.2,这轮下降到0,再次我们需要的,因为我们仍然排抢夺号码1.
直到单元格A10,当我们得到10/5 - 1或1时,我们才会继续。我们完成了第一行数据(与a1的偏移量为0行),现在转到第二行。行偏移的值将继续为1直到单元格A15,当它再次增加1时。
列偏移的计算是有点麻烦:
MOD(ROW(A5),5)+(MOD(ROW(A5),5)<>0))
的第一项是MOD(ROW(A5),5)
。在单元格A5中,变为MOD(5, 5)
,结果为0,因为5/5的整数余数为0.再次说明 - 从单元格A1的列偏移量0意味着我们将在列A中获取值。在单元格A6中,我们得到了MOD(6, 5)
,列偏移量为1.这意味着A6中的值将来自B列。
但我们不希望这样:每个数据行的B列中的值应该显示在结果范围的B列中。我们需要从A列跳到C列以获得结果A列的下一个值。
因此第二项(MOD(ROW(A5),5)<>0))
。对于每行而非,其值为TRUE,为5的偶数倍 - 这些行显示列A和列B中的(结果)值。在算术表达式中使用TRUE时,计算结果为1。因此,当公式在第6,7,8,9,11,12等行中时,我们将1加到列偏移量上,从而跳过数据行的B列。
最后,除数(MOD(ROW(A5),5)<>4)
。如果公式所在的行在除以5之后没有余数4,则该表达式将计算为TRUE(或1)。这意味着仅当公式在第9,14,19和19行时,它的计算结果为FALSE或0。等等。
这些实际上是我们想要在数组之间留出空间的行。这个除数的目的是当公式在这些行中时产生公式错误。然后,我们在包含整个公式的IFERROR
函数中捕获该错误,并将公式的输出变为“” - 空字符串。
我不会通过列B表达式,该表达式使用相同类型的操作来拾取每个数据行中的第二个值并将其显示在第一个值旁边。
为了便于复制和粘贴到您的工作表,这里有公式的格式化版本:
Cell A5 Formula: =IFERROR(OFFSET($A$1,ROUNDDOWN(ROW(A5)/5-1,0),MOD(ROW(A5),5)+(MOD(ROW(A5),5)<>0))/(MOD(ROW(A5),5)<>4),"")
Cell B5 Formula: =IFERROR(OFFSET($A$1,ROUNDDOWN(ROW(B5)/5-1,0),MOD(ROW(B5),5)+1)/NOT(MOD(ROW(B5),5)>0),"")
你有数字的只有5列?如果您有兴趣,我可以尝试使用MS Word的解决方法(或者如果您有记事本++)。然后你可以复制/粘贴一个txt。 – Jerry