作者JieJuen (David)
看板Office
标题Re: [算表] 将数字分隔?
时间Wed Jan 23 16:33:30 2008
※ 引述《Lazulite (Trade Off)》之铭言:
: ※ 引述《xdtg (自由魔法)》之铭言:
: : A
: : 1 1234
: : 2 1111
: : 3 10000
: : Sheet2
: : A B C D E F G
: : 1 7 6 5 4 3 2 1
: : 2
: : A2=RIGHT(IF(INT(Sheet1!$A1/10^(A$1-1))=0,"",INT(Sheet1!$A1/10^(A$1-1))))
: : 其余类推
依照原题的意思
: 可以试试VBA
: Sub test()
: For j = 1 To WorksheetFunction.CountA(Sheets("sheet1").Range("A:A"))
: For i = 1 To Len(Sheets("Sheet1").Cells(j, 1))
: Sheets("sheet2").Cells(j, i) = Mid(Sheets("Sheet1").Cells(j, 1), i, 1)
^这里应该是
Sheets("sheet2").Cells(j, i + 6 - Len(Sheets("Sheet1").Cells(j, 1))) = Mid(...
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
其中6是比SHEET1 A:A中最大位数 还大的一个数
例如A栏中有-12.3,是最长的数字(5位) 就可用6
但是在VBA中不知道如何取得SHEET1中最长位数是多少
另外,为了达成SHEET1输入数字sheet2数字就自行更动
还要加上一些东西
像是IF SHEET1!a:a 有输入数字 THEN 执行巨集 ?
缺点是不能复原(?)
: Next i
: Next j
: End Sub
sti571板友用mid
=MID(Sheet1!$A2,A$1,1)
^^^这部分可以改用column(A1)或column(A:A)
就不用另设一列数字了^^
原题要这些数字都靠右对齐
所以才要改上面的VBA,这里的MID也是
全式是
{=MID(Sheet1!$A1,LEN(Sheet1!$A1)-MAX(LEN(Sheet1!$A$1:$A$99))-1+COLUMN(A:A)
+9^9*(COLUMN(A:A)<=MAX(LEN(Sheet1!$A$1:$A$99))+1-LEN(Sheet1!$A1)),1)}
阵列公式的原因是MAX(LEN(Sheet1!$A$1:$A$99))
求最大位数
定义为名称LenA
=MAX(LEN(Sheet1!$A$1:$A$99))+1
本式写在哪里都可以(除了sheet1的a栏)
为了易读,写在sheet1 b1
=MID($A1,LEN($A1)-LenA+COLUMN(A:A)+99*(COLUMN(A:A)<=LenA-LEN($A1)),1)
99那一项是判断错误值用的
也可用
=IF(COLUMN(A:A)<=LenA-LEN($A2),"",MID($A2,LEN($A2)-LenA+COLUMN(A:A),1))
写好後剪下贴上到哪里都可
2007就用
=IFERROR(MID($A1,LEN($A1)-LenA+COLUMN(A:A),1),"")
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.117.192.145
1F:推 ljuber:好复杂.....研究看看 01/23 17:00