Board logo

標題: [發問] 如何拆分同一欄位內的資料 [打印本頁]

作者: jsc0518    時間: 2021-7-4 12:51     標題: 如何拆分同一欄位內的資料

Dear all,
我在A1、A2欄位中都有輸入資料,資料都是用ALT+ENTER的方式作業
我想把A1、A2欄位內的資料拆分成一個資料一個欄位
想問各位先進,是否有哪個公式是可以使用的呢?
謝謝
[attach]33500[/attach]
[attach]33501[/attach]
作者: samwang    時間: 2021-7-5 07:14

回復 1# jsc0518


請測試看看,謝謝。
   
Sub test()
Dim Arr, a
Arr = Range([A1], [A65536].End(3))
For i = 1 To UBound(Arr)
    a = Split(Arr(i, 1), Chr(10))
    For j = 0 To UBound(a)
        Cells(i, 3 + j) = Split(a(j), ")")(1)
    Next
Next
End Sub
作者: hcm19522    時間: 2021-7-5 10:26

https://blog.xuite.net/hcm19522/twblog/589871654
作者: jsc0518    時間: 2021-7-5 12:29

回復 2# samwang
Dear samwang,
請問一下,若我的第一列為標題抬頭的話,語法要怎麼修訂呢?
感謝您


[attach]33511[/attach]
作者: jsc0518    時間: 2021-7-5 12:33

回復 3# hcm19522
Dear hcm19522,
謝謝你的熱心指導與回覆歐,可以使用!
感恩!
作者: samwang    時間: 2021-7-5 14:04

回復 4# jsc0518

請測試看看,謝謝

Sub test2()
Dim Arr, a
Arr = Range([A1], [A65536].End(3))
For i =2 To UBound(Arr)
     a = Split(Arr(i, 1), Chr(10))
     For j = 0 To UBound(a)
         Cells(i, 3 + j) = Split(a(j), ")")(1)
     Next
Next
End Sub
作者: jsc0518    時間: 2021-7-5 14:10

回復 3# hcm19522

Dear hcm19522,
您好!我剛剛在A欄位再插了一欄位,公式的部分卻無法捉到第一個批號(如下圖),請問公式哪裡需修訂呢?
[attach]33512[/attach]
作者: jsc0518    時間: 2021-7-5 14:12

回復 6# samwang
Dear samwang,
非常感謝您的熱心回應與指導,測試OK!
^_^
作者: jsc0518    時間: 2021-7-5 20:28

回復 6# samwang
Dear samwang,
晚上好,再請教一下,若除了(1)不要外,我想再加上   (1)KW-
這幾個字元都不要,要如何改VBA呢?



    [attach]33514[/attach]
作者: samwang    時間: 2021-7-5 20:32

回復 9# jsc0518

請再試看看,感謝

Sub test3()
Dim Arr, a
Arr = Range([A1], [A65536].End(3))
For i = 2 To UBound(Arr)
    a = Split(Arr(i, 1), Chr(10))
    For j = 0 To UBound(a)
        Cells(i, 3 + j) = Split(a(j), "-")(1)
    Next
Next
End Sub
作者: jsc0518    時間: 2021-7-5 21:02

回復 10# samwang
Dear samwang,
太感謝你的幫忙囉,解決我的困擾。
學習了
作者: ML089    時間: 2021-7-6 09:19

本帖最後由 ML089 於 2021-7-6 09:34 編輯

回復 4# jsc0518
(1)KY-09030E
(2)KA-09032E
(3)WW-01234E
(4)WX-987852
當資料固定長度時可以簡化公式如下

C1公式 =IFERROR(MID($A1,FIND("("&COLUMN(A1)&")",$A1)+6,6),"")
改為
C2公式 =IFERROR(MID($A2,FIND("("&COLUMN(A2)&")",$A2)+6,6),"")

作者: jsc0518    時間: 2021-7-6 11:46

回復 12# ML089
Dear ML089,
早安!感謝你的回覆與指導。

想與您請教一下
像一個欄位中放了很多資料(用ALT+ENTER的方式登錄資料),公式是哪一個語法去判斷的
另外,當C1、D1放入公式後,又是哪一公式語法去判斷C1已經捉過的資料D1不會再重複捉過

=IFERROR(MID($A1,FIND("("&COLUMN(A1)&")",$A1)+6,6),"")
作者: jsc0518    時間: 2021-7-6 14:45

回復 10# samwang
Dear samwang,
下午好,請教一下:若拆分的資料是跳格的,那語法要怎麼修改?
[attach]33519[/attach]
作者: samwang    時間: 2021-7-6 14:56

回復 14# jsc0518


請測試看看,謝謝

Sub test()
Dim Arr, a
Arr = Range([C1], [C65536].End(3))
For i = 2 To UBound(Arr)
    a = Split(Arr(i, 1), Chr(10))
    k = 0
    For j = 0 To UBound(a)
        Cells(i, 5 + j + k) = Split(a(j), "-")(1)
        k = k + 1
    Next
Next
End Sub
作者: jsc0518    時間: 2021-7-6 17:40

回復 15# samwang
Dear samwang,
太感謝你囉!幫我好多的忙,可以用、正常!!
謝謝你:) :)
作者: ML089    時間: 2021-7-6 23:34

回復 13# jsc0518

回復 12# ML089
Dear ML089,
早安!感謝你的回覆與指導。

想與您請教一下
像一個欄位中放了很多資料(用ALT+ENTER的方式登錄資料),公式是哪一個語法去判斷的
另外,當C1、D1放入公式後,又是哪一公式語法去判斷C1已經捉過的資料D1不會再重複捉過

=IFERROR(MID($A1,FIND("("&COLUMN(A1)&")",$A1)+6,6),"")


你的資料要分段是以 (1)......(2)......(3).....,所以用 COLUMN(A1)=1 右拉公式時就會變成 COLUMN(B1)=2   COLUMN(C1)=3,再用FIND找出位置
這公式只能適用於 1~9
作者: jsc0518    時間: 2021-7-7 20:26

回復 17# ML089
Dear ML089,
晚上好!感謝您回復,學習囉!
作者: Andy2483    時間: 2023-5-12 10:10

謝謝論壇,謝謝各位前輩
後學藉此帖練習陣列,學習方案如下,請各位前輩指教

執行前:
[attach]36344[/attach]

執行結果:
[attach]36345[/attach]


Option Explicit
Sub TEST()
Dim Brr, Crr, Z, N&, M&, i&
'↑宣告變數
Brr = Range([A1], [A65536].End(3))
'↑令Brr變數是二維陣列,以A欄儲存格值帶入
ReDim Crr(1 To UBound(Brr), 1 To 1000)
'↑宣告Crr變數是二為空陣列,縱向範圍同Brr陣列,橫向範圍從1 到1000
For i = 1 To UBound(Brr)
'↑設順迴圈
   If Brr(i, 1) = "" Then GoTo i01
   '↑如果陣列值是空的!就跳到標示 i01位置繼續執行
   N = 0
   '↑令N變數歸零
   For Each Z In Split(Brr(i, 1), vbLf)
   '↑設逐項迴圈!令Z變數是字串被跳行字元分割成的一維陣列子
      N = N + 1
      '↑令N變數累加 1
      If Z = "" Then GoTo z01
      '↑如果Z變數是空的!就跳到標示z01位置繼續執行
      If InStr(Z, "-") Then
      '↑如果Z變數裡有包含"-"字元?
         Crr(i, (N - 1) * 2 + 1) = Split(Z, "-")(1)
         '↑令Z變數將"-"字元右方的字串寫入 Crr陣列
         Else
            Crr(i, (N - 1) * 2 + 1) = Z
            '↑否則就令 Z變數字串寫入 Crr陣列
      End If
      If N > M Then M = N
      '↑探測Crr陣列橫向需要多少欄數
z01: Next
i01: Next
With [H1].Resize(UBound(Crr), (M - 1) * 2 + 1)
   .EntireColumn.ClearContents
   '↑將結果欄舊資料清除
   .Value = Crr
   '↑令Crr陣列值帶入儲存格
End With
Erase Brr, Crr
'↑釋放變數
End Sub




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)