CSVファイルを読み込み、文字列をシートの列に分割しようとしています。2つの配列を引数として渡すVBA
したがって、プログラムはCSVを読み取り、文字列(文字列の位置と長さを取得)を読み取り、その結果を列に出力します。
これを行うマクロを作成しましたが、これまでは使用していなかった配列を使用していますが、配列をSplitColumns関数の引数として渡すことはできません。
したがって、文字列の仕様は "start pos、end pos、format"と似ていますが、現在はフォーマットを使用していません。
お手伝いできますか?私はこれが非常に単純な問題かもしれないと思う、私はちょうど最後の時間のためにこれに固執しています。
Option Explicit
Public Sub ConvertPanel()
Dim convertFile As Long, i As Long, y As Long
Dim specString As String
Dim a As Variant
Dim b As Variant
Dim c As Range
Set c = Worksheets(1).Range(Cells(1, 1), Cells(1, 1))
specString = "1,10,@|11,2,@|15,1,@|16,4,@|20,2,@|23,1,@|31,1,@|35,1,@|39,1,@|41,1,@|160,1,@|161,2,@|163,1,@|165,1,@|25,2,@|29,2,@|34,1"
a = QuickRead("file.txt")
b = ConvertSpecString(specString)
End Sub
Private Function ConvertSpecString(ByVal specString As String) As String()
Dim fieldsInfo() As String
Dim inputString As String
inputString = Replace(specString, Space(1), vbNullString)
fieldsInfo = Split(inputString, "|")
ConvertSpecString = fieldsInfo
End Function
Private Function QuickRead(ByVal fileName As String) As String()
Dim fileNumber As Long
Dim stringRes As String
Dim fileSize As Long
Dim v As Variant
fileNumber = FreeFile
fileSize = FileLen(fileName)
stringRes = Space(fileSize)
Open fileName For Binary Access Read As #fileNumber
Get #fileNumber, , stringRes
Close fileNumber
QuickRead = Split(stringRes, vbCrLf)
End Function
Private Function SplitColumns(ByRef lineArray() As Variant, ByRef fieldsInfo() As Variant, ByVal StartCell As Range) As Variant
Dim indexLine As Long
Dim indexCount As Long
Dim stringRange As String
Dim stringColumn As Long
Dim fileInfo As String
stringRange = StartCell
stringColumn = startCell.Column
For indexCount = LBound(lineArray) To UBound(lineArray)
stringColumn = stringRange.Column
fileInfo = Split(fieldsInfo(indexCount), ",")
stringRange.EntireRow.Cells(1, stringColumn).Value = Mid(lineArray(indexCount), CLng(fileInfo(0)), CLng(fileInfo(1)))
stringColumn = stringColumn + 1
Next indexCount
End Function
問題は次のとおりです:lineArray()バリアントとして、variantを渡す必要があります:lineArrayバリアント(2D配列)または配列:lineArray()文字列/ long/doubleとして – User632716
ありがとうございました実際に問題を解決しました!私はあなたに値するポイントを教えてくれるので、答えを提出してください! @tompreston – svacxpython
私はこれが完全に答えるとは思えませんでしたが、助けてくれてうれしかった、私は下にそれを書いた、リンクされたサイトもこれに非常に役立ちます。 – User632716