Цикл Excel VBA через столбец для копирования и вставки непустых значений в 3 других столбца?

Я новичок в Excel VBA и столкнулся с препятствием. Я не получаю никаких ошибок, когда запускаю это, и я не уверен, с чего даже начать...

Я хотел бы выполнить поиск в столбце C, и если есть непустое значение, скопируйте это значение в столбцы (D, G, I) того же рабочего листа. Я бы начал поиск в строке 4.

Я попытался выполнить код и почти уверен, что моя ошибка связана с currVal = ws.Cells(i, "c"). Когда я прохожу, на листе excel ничего не происходит (ячейки не копируются и не вставляются).

Любая помощь ОЧЕНЬ приветствуется! Я смотрю на это все утро.

Sub Copy()

Dim lastC As Integer
Dim i As Integer
Dim j As Integer
Dim currVal As String
Dim ws As Worksheet

Set ws = ActiveSheet
lastC = ws.Cells(Rows.Count, 1).End(xlUp).Row

For i = 4 To lastC
currVal = ws.Cells(i, "c")
   If ws.Cells(i, 1).Value <> "" Then
       currVal = ws.Cells(i, "D")
       currVal = ws.Cells(i, "G")
       currVal = ws.Cells(i, "I")
    End If

Next i

End Sub

На самом деле ничего не происходит (по крайней мере, то, что я вижу) и без ошибок, что дает мне место для начала поиска!

Ожидаемые результаты будут копировать это в 3 дополнительных столбца. В результате получается настоящая формула. Формула - это то, что мне нужно скопировать.

27.05.2019 9:39 --- стоимость

='15_2019-02_003.CSV'!$A$2 -- формула

Я обратился к обновлению формулы и удалению ссылок на CSV-файл после извлечения значения из исходного CSV-файла. Этот код предназначен только для поиска пробелов и копирования/вставки.Изображение Excel WS

Вы выделяете значение из этих ячеек в переменную... я думаю, вы должны сделать это наоборот, то есть: ws.Cells(i, "D").value = currVal

FAB 29.05.2019 19:30

Это lastC = ws.Cells(Rows.Count, 1).End(xlUp).Row, если вы не соответствуете требованиям Rows.Count, это автоматически будет ActiveSheet.Rows.Count ... в этом случае может не иметь никакого значения, но имейте в виду на будущее, это должно быть lastC = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

FAB 29.05.2019 19:33

О, спасибо за быстрый ответ. Когда я меняю это, макрос запускается!! Ура, первый раз запускаю. Но теперь он удаляет то, что находится в столбце C, и ничего не копируется?

Sadie 29.05.2019 19:35

Ты тоже поменял currVal = ws.Cells(i, "c")? Это было хорошо... только остальные 3, где вы хотите записать значение обратно в ячейки, должны быть cell = value, а не value = cell.

FAB 29.05.2019 19:36

Вы спасатель! Да, это именно то, что я сделал неправильно! Большое спасибо за помощь! ;)

Sadie 29.05.2019 19:40
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
2
5
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Добавляя к комментариям, вот как я написал бы этот конкретный код, может быть, это поможет:

Sub Copy()

    Dim ws As Worksheet: Set ws = ActiveSheet
    Dim lastC As Long: lastC = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    Dim R As Long 'I like to use R (rows) & C (cols), just because makes it more readable (for me)

    For R = 4 To lastC
        With ws
            If .Cells(R, "A").Value <> "" Then
                .Cells(R, "D") = .Cells(R, "C").Value
                .Cells(R, "G") = .Cells(R, "C").Value
                .Cells(R, "I") = .Cells(R, "C").Value
            End If
        End With
    Next R

End Sub

PS: я предпочитаю цифры вместо букв для ссылки .Cells, но в этом случае понятно использовать букву. Просто для лучшей практики - с точки зрения удобочитаемости, не следует их смешивать.

а если нужно было вставить формулы? есть ли простой способ xlpaste.formulas? И мне действительно нравится R для строк, в этом гораздо больше смысла! Спасибо за вашу помощь в этом.

Sadie 29.05.2019 20:43

Вы можете использовать range.Value для значений, range.formula для формул и т. д.

FAB 29.05.2019 21:10

Другие вопросы по теме