我一直在努力為一個同事清理這個csv資料。 我打算先介紹一下資料通常是什么樣子的,然后再介紹一下我所做的步驟,最后提出我目前正在努力解決的問題......請容忍我,因為這是我的第一篇帖子(而且我沒有vba的背景,一切都靠谷歌自學的)。 所以,資料匯出是一個csv,可以在excel中打開,按幾列分開。有問題的列是G列,它基本上有多個資料集(1-219),用于同一個選單項(行)。
例如:
A B C D E F G
雞湯 {1;$6.00;59;$9。 00;88;$6.00}。
牛肉湯 {1;$8.00;59;$12. 00;88;$8.00}.
鴨子湯 {1;$6.00;59; $6. 00;88;$6.00}。
雞蛋湯{1;$8.00;59;$9. 00;88;$8.00}。
水 {1;$0.00[/span>] }
法國洋蔥湯 {1;$16.00;59;$15. 00;88;$12.00}.
辣椒湯 {1;$17.00;84;$17.00}。
因此,在G列中,你可以知道,有多個價格,其格式是:
{列號;}
{列號;}
{列號;}
{列號;$價格;列號$價格等& }
Regex: . [0-9]{1,2}。 [$][0-9]{1,3}[ 。 ][0-9][0-9] 。 |[0-9]{1,2}。 [$][0-9]{1,3}[ 。 ][0-9] [0-9]
第一個目標是將列中的資料決議到行中,其格式要與csv一致(以便可以合并并重新提交)。 例如:(設想每個資料集之間都有一個分號,就像最終結果中應該有的那樣)
{1;$21.00}.
{1;$16.00}。
{1;$12.00 5;$12. 00 8;$12.00}.
{1;$18.00 6;$18. 00 8;$18.00}。
{1;$10.00 6;$7。 00 9;$12.00 11;$10.00}。
{1;$20.00 6;$20. 00 8;$20.00}.
{1;$5.49 3;$3。 99 10;$4.99 12;$4.99}。
{1;$18.99}。
{1;$21.00[/span>] }
{1;$21.00}。
為了實作這一目標,我寫了一個宏,即:
- 從 "Sheet1 "復制G列,并輸入到A1的新作業表 "Sheet2 "中
- 用",$"替換所有的";$",以幫助將每個資料集單獨分開,而不是讓它在兩個不同的列中分解出列名和美元符號
- 文本到列的宏在"; "上分割(和輸入結果從B1開始,這樣我就可以在一列中保留A1和所有的資料集,以備不時之需)--如果你知道如何在這里保留分號,那會很有幫助,這樣我就不必在將來重新添加它 。
- 把從b1到資料集結尾的所有", "替換為";" <--使其恢復到原始格式 。
- 從B1復制資料到最后一個有資料的單元格(資料不是按順序排列的,第50行可能有219列,然后最后一行可能只有150列),并將這個資料粘貼到 "rp專案 "的G列(因此覆寫現有的資料,并將各列移到最后一列的最右邊。
然而,當我向我的同事展示我所做的時,他希望前導數字(列號)與列相對應(因為資料從G列開始,這將是第1列,H將是第2列等等)。
。因此,現在的目標是創建一個宏,以......
- 在 "第一步 "表的B1:B中進行回圈(B列從B1開始,然后是C1,當該行空白時轉到下一行)
- 如果(B1(或下一行)為空白,不做任何事情,結束宏)
- 如果B1(或活動單元格)不是空白,讀取單元格值以提取列;復制單元格的內容,粘貼到 "第二步 "作業表中,與活動單元格在同一行,但與單元格值的列數相抵消。
- 切換回主作業表,轉到該行的下一個單元格--如果空白,轉到下一行,重復進行,直到所有資料都完成。
給你一些背景,我有超過25000行的資料(選單項)和最長的一列(我相信是219)。到目前為止,我主要是在嘗試我在網上找到的一些腳本片段,但它們都沒有做類似于我需要的事情,而且我不知道如何寫出足夠的代碼,只是自己把腳本寫出來。我相信我需要建立一個變數:列名(不知道我是否能用我發現的regex代碼提取這個),然后在offset中使用這個變數...... 但我的范圍需要是動態的和回圈的...... 如果你能幫助我,請讓我知道--我已經在這個問題上卡了一個星期了!
感謝你們所有人的幫助。
非常感謝大家的閱讀--如果我可以提供更多的細節,請讓我知道。
uj5u.com熱心網友回復:
比如你可以這樣做:
Sub Tester()
Dim arr, i As Long, c As Range, v, col, price
For Each c In Range("G2:G4").Cells
v = Replace(Replace(c.Value, "{", ""), "}", ") '移除大括號。
IfLen(c.Value) > 0 Then '有什么要處理嗎?
arr = Split(v, ";") 'split on;
For i = 0 To UBound(arr) - 1 Step 2 '每次回圈2次。
col = CLng(Trim(arr(i))) '列號 '列號
price = Trim(arr(i 1) '價格'0, col).Value = col & "; " & price
Next i
End If
Next c
End Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/315095.html
標籤:
