1

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

2番目の列を繰り返し処理し、各セルの値を配列に取り込んで、mainArrayと呼びます。(これは行と列を反復します、警告:VBAを使用してExcelで可変列長の範囲を反復する方法

次に、区切り文字'、'まで解析し、最初の値を取得した番号付きセルとしてcellArrayという配列に格納します。次に、mainArrayの元のセル値を新しいcellArrayに置き換えます。(文字列操作:この文字列を-文字で区切って分割しますか?

したがって、セルB1はcellArray = {1、100、101、104}になり、これがmainArrayの最初の値になります。使用範囲の列Bの各セルに対してこれを実行します。

次に、新しいcsvを作成し(VBAから別のCSVファイルを作成する方法は?)、データを入力します。

データを入力するには、保存した各配列をループして、CellValue = array [0] + "、" +array[i]として保存します。

最後に、新しいCSVファイルを保存します。

于 2012-11-19T17:25:57.423 に答える
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 に答える