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

提前感谢您的帮助

4

2 回答 2

0

此代码将快速创建 c:\temp\dump.csv具有此格式的 csv 文件

[更新以处理您的格式我注意到您可能丢失了数据,因为 Excel 已将科学记数法应用于您的字段。现在我添加了一个丑陋的解决方法来填充 0。B2 应该是一个 30 位的字段吗?]

在此处输入图像描述

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
于 2012-11-20T01:02:26.787 回答
0

我将遍历第二列并将每个单元格中的值放入一个数组中,我们称之为 mainArray。(这会迭代行和列,请注意:How to iterate through a variable-column-length range in Excel using VBA

然后我会解析直到分隔符','并将它们存储在一个名为 cellArray 的数组中,第一个值作为它们从中获取的编号单元格。然后,用新的 cellArray 替换 mainArray 中的原始单元格值。(字符串操作:拆分这个由 - 字符分隔的字符串?

因此单元格 B1 将变为 cellArray = { 1, 100, 101, 104 } 这将是 mainArray 中的第一个值。为使用范围的 B 列中的每个单元格执行此操作。

然后我会创建一个新的 csv(如何从 VBA 创建一个单独的 CSV 文件?),然后将数据输入其中。

要输入数据,我将遍历每个保存的数组并存储为 CellValue = array[0] + ", " + array[i]

最后,我将保存我的新 CSV 文件。

于 2012-11-19T17:25:57.423 回答