iT邦幫忙

0

EXCEL資料如何分為上下列

  • 分享至 

  • xImage

https://ithelp.ithome.com.tw/upload/images/20220708/20147786As8r9qXnwR.png

如上圖,想請問EXCEL裡面有沒有功能不用寫程式可以做到把格子裡面的資料分列?

每個禮拜會有上萬筆資料......求各位大神救救小弟。

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
2
ccenjor
iT邦大師 9 級 ‧ 2022-07-08 22:25:36
最佳解答

良心建議,10000筆EXCEL用這公式跑起來會變很慢,一直顯示計算,不建議使用,建議用VBA。所以....下一位,
D1:
=A1

D2:
=IFERROR(IF(COUNTIF(D$1:$D1,D1)<((LEN(VLOOKUP(D1,$A$1:$B$4,2,0))+1)/2),D1,INDEX($A$1:$A$4,MATCH(D1,$A$1:$A$4,0)+1)),"")
將公式複製到D3:D16(自行調整)
https://ithelp.ithome.com.tw/upload/images/20220708/20109881aElnKbycdq.png

E1:
=IFERROR(MID(VLOOKUP(D1,$A$1:$B$4,2,0),(COUNTIF($D$1:D1,D1)-1)*2+1,1),"")
將公式複製到E2:E16(自行調整)
https://ithelp.ithome.com.tw/upload/images/20220708/20109881h2SbQjg9dm.png

Misty0723 iT邦新手 3 級 ‧ 2022-07-09 01:57:16 檢舉

請問如果有包含10以上的數字,有什麼方式可以不要取到","號嗎? 謝謝~

ccenjor iT邦大師 9 級 ‧ 2022-07-09 09:46:23 檢舉

如果B欄有二位數以上的值,我會用john70096提供的做法。
先將B欄用逗號剖析開來。
H1:
=A1

H2:
=IFERROR(IF(COUNTIF($H$1:H1,H1)<COUNT(OFFSET($A$1,MATCH(H1,$A$1:$A$4,0)-1,1,1,5)),H1,INDEX($A$1:$A$4,MATCH(H1,$A$1:$A$4,0)+1)),"")
將公式複製到H3:H16(自行調整)
https://ithelp.ithome.com.tw/upload/images/20220709/20109881N01SK3ZhUX.png

I1:
=VLOOKUP(H1,$A$1:$F$4,COUNTIF($H$1:H1,H1)+1)
將公式複製到I2:I16(自行調整)
https://ithelp.ithome.com.tw/upload/images/20220709/20109881Dg7DPzwwBk.png

Misty0723 iT邦新手 3 級 ‧ 2022-07-09 22:54:21 檢舉

謝謝你的分享

1
柳丁柚
iT邦新手 1 級 ‧ 2022-07-08 16:59:08

每週10000筆....
如果你還堅持要用excel做的話
我這邊提供一個思路參考
先對B欄使用資料剖析 ->依逗號分隔 , 在複製 -> 轉置貼上

柳丁柚 iT邦新手 1 級 ‧ 2022-07-08 16:59:54 檢舉

不過估計不是你要的哈哈
拋磚
等待下一位~~~

1

我只能說,用錯工具了@@"
1萬筆使用excel算是有點找罪受。
(雖然我曾經看過6萬筆以上的)

正常來說。像你這種不定數量的列數。
因該是沒辦法不靠程式來處理了。

畢竟沒有統一的規則性。

所以....下一位

0
I code so I am
iT邦高手 1 級 ‧ 2022-07-09 07:00:47

如果會使用Python,程式處理如下,可修改第3、4行的檔名:

import pandas as pd

input_file = './1.xlsx'
output_file = './1_new.xlsx'

df = pd.read_excel(input_file, header=None)
df2 = pd.DataFrame(columns=df.columns)

for index, row in df.iterrows():
    #print(row[df.columns[1]])
    if len(row[df.columns[1]])<=0:
        df2.append(row)
    else:
        for f in row[df.columns[1]].split(','):
            #print({df.columns[0]:row[0], df.columns[1]:f})
            df2 = df2.append({df.columns[0]:row[df.columns[0]], df.columns[1]:f}, ignore_index=True)
#print(df2)
df2.to_excel(output_file, index=False, header=None)
1
海綿寶寶
iT邦大神 1 級 ‧ 2022-07-09 11:51:20

我只會用VBA
執行前
https://ithelp.ithome.com.tw/upload/images/20220709/20001787RwDl1cBqAy.pnghttps://ithelp.ithome.com.tw/upload/images/20220709/20001787WW2S0zEgLL.png
執行VBA Main
https://ithelp.ithome.com.tw/upload/images/20220709/20001787YzdkHt721T.png
結果放在 Sheet2
https://ithelp.ithome.com.tw/upload/images/20220709/20001787WdnT7k6xgn.png

我要發表回答

立即登入回答