各位高手好
小弟我目前遇到一個問題
想將一整欄(B欄)約4萬多筆資料,依條件(A欄的值=on)分至D欄、E欄.....等,預計完成結果如下:
Excel vba 單欄資料切割成多欄
 
可是用vba寫,只能讓資料換欄,但無法齊頭至同一列開始,如下:
Excel vba 單欄資料切割成多欄
 
因A欄的值=on的數量不固定,一開始想法為當上、下列數值不一致時即換欄
可是要換欄且從同一列開始就想不出方法
請各位高手幫忙看看是否還有其他解法?感謝
 
Sub ttest()
r = Cells(Rows.Count, "B").End(xlUp).Row
k = 0
For i = 3 To r
If Cells(i, 1).Value = "on" Then
Cells(i, 4 + k).Value = Cells(i, 2)
ElseIf Cells(i, 1).Value = "off" And Cells(i + 1, 1).Value = "on" Then
k = k + 1
End If
Next
End Sub
您好:

其實用VBA來寫,才更好完成您要的「齊頭至同一列」,這也是Excel使用者跨入VBA的優勢,在資料處理上更直覺,更有彈性。

或許您在思維上稍稍調整一下,就會豁然開朗~~

您的case來看,簡單的作法,可以多增加一個變數(比如s),來記錄並控制輸出的列位置,即可輕鬆完成您的需求喔

以下是完成的圖示:




幫您稍微修改一下程式內容如下:


Sub ttest()
r = Cells(Rows.Count, "B").End(xlUp).Row
k = 0 'k用來確認放到第幾欄
s = 3 's用來確認放到第幾列
For i = 3 To r
If Cells(i, 1).Value = "on" Then
Cells(s, 4 + k).Value = Cells(i, 2) '輸出位置改用s來控制
s = s + 1 's往下+1
ElseIf Cells(i, 1).Value = "off" And Cells(i + 1, 1).Value = "on" Then
k = k + 1
s = 3 's恢復從3開始
End If
Next
End Sub



以上,希望對您有幫助。
Der,misser1
太謝謝了,原來還能有這樣的用法,感激不盡。
jsjux wrote:
太謝謝了,原來還能有這樣的用法,感激不盡。(恕刪)


雖然只是小問題,不過還是提醒您一下
如果 A3 = off ,排版會跑掉,欄位會多一欄
snare wrote:
雖然只是小問題,不過(恕刪)


snare大說的沒錯,這部分確實會發生~~

另外還得注意的是,4萬多筆資料,如果on和off的切換太多頻繁,會不會產生的欄位數太多,造成閱讀上的困難(甚至超出限制,執行錯誤?)

~~當然,這對原po來說,可能不會是問題,因為原始資料如何產生,原po最清楚,或許他很確定:on和off的切換次數是在掌控之內,也很確定第一筆資料一定是on...............

所以我上面只是針對原po的程式碼,做「最微小」的變動~~其他暫時就不在處理之列。

(感謝snare大的協助回應)
Der,misser1
snare wrote:
雖然只是小問題,不過...(恕刪)


謝謝snare大的提醒,確實在A3=off的情形下,會有多一欄的狀況
不過我試著調整看看,感謝~


misser wrote:
snare大說的沒錯...(恕刪)


謝謝misser大,4萬多筆資料經計算大約會產生60~70欄的資料
也因為是做為分析用,所以大大修改的vba真的幫了很大的忙



*非常抱歉,剛剛脫目加筆誤,將misser大名字誤植。
jsjux wrote:
所以snare大修改的vba真的幫了很大的忙


呃~~那不是我改的

misser這位高手做的vba
snare wrote:
呃~~那不是我改的是misser...(恕刪)


高手?呃......... 您是不是誤會了什麼?

Der,misser1
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!