Excel / VBA: очистить небольшие значения в столбцах - PullRequest
0 голосов
/ 04 марта 2019

У меня есть CSV-файл, который я хочу преобразовать.Проблема состоит в том, что столбцы содержат целые числа ниже 5000. В столбцах также есть идентификаторы, например, значения IE0034230957 и BLANK.Они не должны изменяться при применении кода.

CSV должен открыться и создать новый файл.

Может ли кто-нибудь помочь мне с изменением кода, который работает?

Я читал темы об этом и мог прийти к этому коду, однако он не работает:

Sub RemoveSmallValues()

Dim myfilename As String
Dim myfilepath As String
Dim newfilename As String
Dim N As Long
Dim i As Long
Dim cellvalue As Long
Dim rng As Range, r As Range, lm As Double

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

myfilepath = "Q:\Pre trade"
myfilename = "Snapshot_of_Model.csv"

Workbooks.Open (myfilepath)
Workbooks(myfilename).Activate 'Makes SnapShot.csv the active workbook

Set rng = Range("D:F")
lm = 5000

For Each r In rng
    If r.Value < lm Then
r.Clear
Next r

newfilename = "Q:\Snapshot_final.csv" 'new file path and file name without extension.

Workbooks(myfilename).SaveAs newfilename, FileFormat:=xlCSV 'Save the file with extension CSV
ActiveWorkbook.Close False 'Close the workbook without saving, as you have already saved the workbook with line before.

End Sub

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Это также можно сделать с помощью SQL и ADO.

Sub x()

Dim cnCSVConnection As ADODB.Connection
Dim rstResults As ADODB.Recordset

Set cnCSVConnection = New ADODB.Connection
cnCSVConnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                    "Data Source=C:\Workspace\SW Pensions\RUFUS\;" & _
                    "Extended Properties=""text;HDR=Yes;FMT=Delimited"";"
'"C:\Workspace\"

cnCSVConnection.Open

Set rstResults = New ADODB.Recordset

rstResults.Open "Select [Entry-date],[Current value of policy]," & _
            "iif([Current value of policy]<100,1,0) from " & _
            "[Bonds Claims_WIP_TESTING.csv]", cnCSVConnection, adOpenKeyset

Range("a1").CopyFromRecordset rstResults

rstResults.Close
cnCSVConnection.Close

Set rstResults = Nothing
Set cnCSVConnection = Nothing

End Sub
0 голосов
/ 04 марта 2019

От вашего вопроса, я бы написал так же, как и так

Sub t()

Dim r As Excel.Range
Dim c As Excel.Range

Set r = Range("a1").Resize(Cells(Rows.Count, 1).End(xlUp).Row, 1)

For Each c In r.Cells
    If IsNumeric(c.Value) Then
        If CDbl(c.Value) < 5000 Then c.Clear
    End If
Next c

Set r = Nothing

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...