2012-11-19 110 views
1

我需要一個宏才能從Excel電子表格中導入一些數據,然後將其導入到MySql鏈接表中。在單元格內循環並寫入新文件的Excel宏

有慈善機構名稱的列,並用逗號分隔的ID列表的列(這些代表慈善機構類型) 爲了例如

Column A 
CharityName1 
CharityName2 
CharityName3 
CharityName4 

Column B 
100, 101,104 
(empty) 
104 
100,105 

我想這個寫一個新的CSV文件遵循事先

1,100 
1,101 
1,104 
3,104 
4,100 
4,105 

感謝所有幫助

+1

你已經基本上同樣的問題在這裏:http://superuser.com/q/486294/160170或在這裏:HTTP:// stackoverflow.com/q/13126533/1370465 – Jook

回答

0

此代碼將快速創建一個CSV文件c:\temp\dump.csv這種格式

[更新處理您的格式 我注意到,爲Excel已申請科學記數法的領域,你可能已經丟失的數據。現在我已經添加了一個醜陋的解決方法來填充0。如果B2是一個30位的字段]

enter image description here

Sub GetEm() 
Dim x() 
Dim lngCnt As Long 
Dim lngCnt2 As Long 
Dim lngE As Long 
Dim objFSO As Object 
Dim objTF As Object 
Dim vArr 
Dim vArrElem 

Set objFSO = CreateObject("scripting.filesystemobject") 
Set objTF = objFSO.createtextfile("c:\temp\dump.csv", 2) 

x = Application.Transpose(Range("B1", Cells(Rows.Count, "B").End(xlUp))) 
For lngCnt = 1 To UBound(x) 
    lngE = InStr(x(lngCnt), "E") 
    If lngE > 0 Then 
     x(lngCnt) = CStr(Replace(Replace(x(lngCnt), ".", vbNullString), "E+", vbNullString) & Application.Rept("0", Right$(x(lngCnt), 2) - lngE + 1)) 
    End If 
    If Len(x(lngCnt)) > 0 Then 
     If Len(x(lngCnt)) Mod 3 = 0 Then 
      For lngCnt2 = 1 To Len(x(lngCnt)) Step 3 
       objTF.writeline lngCnt & ",'" & Mid$(x(lngCnt), lngCnt2, 3) 
      Next 
     End If 
    End If 
Next 
objTF.Close 

End Sub 
+0

非常感謝 - 當我運行時,我得到:運行時錯誤'9'下標超出範圍 - 當我'調試'這一行:如果Len(x(lngCnt))> 0然後 - 突出顯示 –

+0

@PhilBarnett可以你在任何地方發佈你的文件樣本? – brettdj

+0

宏運行正​​常(我做了一個nube錯誤),但它不是我以後的 - 我輸出文件的第一行是1102307207308110 - 我之後是1,102 | 1,307 | 1,207 | 1,308 | 1,112 | (其中「|」是新行) - 這是慈善機構csv http:// tinyurl的樣本。com/c92y9rh,這是csv你的宏輸出http://tinyurl.com/bmo66ua,這是我之後的http://tinyurl.com/cspaxmc –

0

我將通過第二列迭代,並從各取值單元格到數組中,讓我們稱之爲mainArray。 (這反覆行和列,被警告:How to iterate through a variable-column-length range in Excel using VBA

然後,我將解析,直到分隔','並將它們存儲在一個名爲cellArray的數組中,並將第一個值作爲編號的單元格從中取出。然後,用新的cellArray替換mainArray中的原始單元格值。 (String-Manipulation: Split this String delimited by a - character?

因此,單元格B1將變成cellArray = {1,100,101,104},它將是mainArray中的第一個值。對於使用範圍的B列中的每個單元格執行此操作。

然後我會創建一個新的csv(How to create a separate CSV file from VBA?),然後將數據輸入到它。

爲了輸入數據I將通過我的每一個保存的陣列和存儲作爲CellValue =陣列[0] + 「」 +陣列[I]

最後循環,我會節省我的新CSV文件。

+0

這是非常高水平的指導 - 比回答更接近評論 – brettdj

+0

感謝你 - 我可能應該提到,我對宏的經驗非常有限,所以我不會真正知道去執行這個 –

+0

沒問題。如果你不確定,鏈接應該解釋編碼的細節。哈哈,我一直喜歡用艱難的方式做事。 – nicholeous