Member 14842334 Ответов: 2

Как запустить цикл для одного столбца в рабочей книге в VBA?


Попытка создать список уникальных строк в VBA из столбца A по всей рабочей книге.

Что я уже пробовал:

Sub VBAStocks()

'label column data
Dim ticker As String
Dim yearly_change As Double
Dim percent_change As Double
Dim total_stock_volume As Long
Dim ws As Worksheet
Dim Summary_Table_Row As Integer

'Name columns

Range("I1").Value = "Ticker"
Range("J1").Value = "Yearly Change"
Range("K1").Value = "Percent Change"
Range("L1").Value = "Total Stock Value"


Для каждого ws в рабочей книге

Если ws.Ячейки(i + 1, 1).Значение <>ws.ячейки(i, 1).значение тогда
тикер = ячейки(i, 1).Значение
Диапазон("I" & Summary_Table_Row).Значение = тикер

Summary_Table_Row = 2

Summary_Table_Row = Summary_Table_Row + 1

Конец, если

Конец Подводной Лодки

2 Ответов

Рейтинг:
2

Maciej Los

Взгляните на приведенный ниже код:

Option Explicit 'force variable declaration

Sub CopyDataSetUnique()
    Dim srcWsh As Worksheet, dstWsh As Worksheet
    Dim i As Integer, j As Integer
    Dim srcRange As Range
    
    On Error GoTo Err_CopyDataSetUnique
    
    'first sheet
    Set dstWsh = ThisWorkbook.Worksheets(1)
    j = 2 'first row t insert data
    'second to last
    For i = 2 To ThisWorkbook.Worksheets.Count
        'set variable - type of worksheet
        Set srcWsh = ThisWorkbook.Worksheets(i)
        'get first column and copy used range only
        Set srcRange = srcWsh.UsedRange.Columns(1)
        If Not srcRange.Address Like "$A$*" Then
            MsgBox "There's no data in column 'A' in sheet: '" & srcWsh.Name & "'", vbInformation, "Information"
            GoTo SkipNext
        End If
        srcRange.Copy
        dstWsh.Range("A" & j).PasteSpecial xlPasteValues
        j = j + srcRange.Rows.Count
SkipNext:
    Next
    'get unique values
    dstWsh.UsedRange.RemoveDuplicates Columns:=1, Header:=xlNo
    
Exit_CopyDataSetUnique:
    On Error Resume Next
    'clean up
    Set srcRange = Nothing
    Set srcWsh = Nothing
    Set dstWsh = Nothing
    
    Exit Sub
    
Err_CopyDataSetUnique:
    MsgBox Err.Description, vbExclamation, Err.Number
    Resume Exit_CopyDataSetUnique
    
End Sub


Приведенный выше код копирует данные из столбца а в листах {предпоследний} в столбец а в листе{первый}
После этого, RemoveDuplicates метод вызывается для получения уникальных данных.


Рейтинг:
0

Patrice T

В вашем коде отсутствует конец цикла "Next".
VBA - для каждого цикла - Tutorialspoint[^]


Member 14842334

"Для каждого ws в рабочем листе" все еще встречается отладочное сообщение

Patrice T

Показать обновленный код.

Member 14842334

Суб VBAStocks()

-данные столбца меток
Дим бегущая строка как строка
Тусклый yearly_change как двойной
Дим percent_change как двойной
Dim total_stock_volume как долго
Дим АРМ, а лист
Dim Summary_Table_Row Как Целое Число

-Столбцы имен

Диапазон("I1").Value = "Тикер"
Диапазон("J1").Значение = "Ежегодное Изменение"
Диапазон("K1").Значение = "Процентное Изменение"
Диапазон("L1").Value = "Общая Стоимость Акций"

Для каждого ws в рабочем листе

Если ws.Ячейки(i + 1, 1).Значение <> ws.ячейки(i, 1).значение тогда

тикер = ячейки(i, 1).Значение

Диапазон("I" & Summary_Table_Row).Значение = тикер

Summary_Table_Row = 2

Summary_Table_Row = Summary_Table_Row + 1

Конец, Если
Следующий



Конец Подводной Лодки

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

Member 14842334

Мне нужно сделать цикл for через столбец A на каждом листе книги, а затем распечатать каждое уникальное значение в столбце I первого листа.