Obtener valor entre dos comas usando VBA

Obtener valor entre dos comas usando VBA

Quiero editar un archivo de texto usando datos de Excel. El archivo de texto tiene la forma:

Data1, Number1, Number2, ..., etc.

Quiero obtener Number1y reemplazar el valor de la suma (Número1+datos de Excel). Number2También es el mismo flujo.

Cual es la mejor manera de hacer esto?

Respuesta1

Este ejemplo lee un archivo de texto, obtiene cada valor entre comas y lo suma con el valor de la celda A1.100

Fichero de entrada(C:\prueba.txt)

data1,1,2,3,4,5
data2,1,2,3,4,5

datos de excel(Hoja 1)

[A1] = 100

Código

Sub ReadCommas()

    strPath = "C:\test.txt"
    Dim arVal() As String

    Set fso = CreateObject("Scripting.FileSystemObject")
    Set objFile = fso.OpenTextFile(strPath)

    Do While Not objFile.AtEndOfStream
        strLine = objFile.ReadLine
        arVal = Split(strLine, ",")

        For i = 1 To UBound(arVal)
            arVal(i) = Val(arVal(i)) + Sheets(1).Cells(1, 1)
            Debug.Print arVal(i)
        Next i

    Loop
    objFile.Close

End Sub

Producción(Editor VBA »Ventana Inmediata)

101
102
103
104
105
201
202
203
204
205

Respuesta2

Obtuve el valor Número1 y Número2 como quería con el siguiente Código:

Archivo de entrada (C:\intest.txt)

Data1, 1, 2, ...etc
Data2, 3, 4, ...etc
...  
Data100, 200, 300, ...etc

Datos de Excel (Hoja 1)

[A1] = 100, [B1] = 200
[A2] = 300, [B2] = 400
...  
[A100] = 2000, [B100] = 3000

Código

Sub ButtonClick()

    strPath = "C:\intest.txt"    

    Set fso = CreateObject("Scripting.FileSystemObject")
    Set objFile = fso.OpenTextFile(strPath)

    Do Until objFile.AtEndOfStream
        strLine = objFile.ReadLine        
        '※1 means Start Position of Num1
        intNum1Cnt = (InStr(※1, strLine, ",")) - ※1    'Count of Number1 of Data1:1
        dblNum1 = Mid(strLine , ※1, intNum1Cnt )        'Value of Number1 of Data1:1
        dblExcelNum1 = GetValue1()                       'Value of [A1]:100
        dblSumNum1 = dblNum1 + dblExcelNum1              'Sum:101
        'Replace dblSumNum1 to dblNum1 in OutputFile

        '※2 means Start Position of Num2
        ※2 = ※1 + intValue1Cnt + 1
        intNum2Cnt = InStr(※2, strLine, ",") - ※2       'Count of Number2 of Data1:1
        dblNum2 = Mid(strLine, ※2, intNum2Cnt)           'Value of Number2 of Data1:2
        dblExcelNum2 = GetValue2()                        'Value of [B1]:200            
        dblSumNum2 = dblNum2 + dblExcelNum2               'Sum:202
        'Replace dblSumNum2 to dblNum2 in OutputFile    
    Loop
    objFile.Close
End Sub


Function GetValue1() As Double

    For i = 1 To 100
        strCellValue1 = Sheets(1).Cells(i, 1).Value
        GetValue1 = CDbl(strCellValue1)            
    Next i  
End Function


Function GetValue2() As Double

    For j = 1 To 100
        strCellValue2 = Sheets(1).Cells(j, 2).Value
        GetValue2 = CDbl(strCellValue2)            
    Next j  
End Function

Archivo de salida (C:\outtest.txt)

Data1, 101, 202, ...etc
Data2, 303, 404, ...etc
...  
Data100, 2200, 3300, ...etc

información relacionada