Как сделать выборочный абсолютный номер всего столбца - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь сделать некоторые целые столбцы абсолютными, когда начало столбца обнаруживает Vbd. Тем не менее, аргумент не является необязательным, ошибка появляется в той части, где я пытаюсь установить setcolumnname = last column в попытке преобразовать число в алфавит столбца. Любая помощь будет оценена.

Обновленный код ниже: enter image description here

    Option Explicit

Sub testing1()
Dim i As Long
Dim LastColumn As Long
Dim sht As Worksheet
Dim rngToAbs As Range
Dim lastrow As Long

Set sht = ThisWorkbook.Sheets("Sheet1")
LastColumn = sht.Cells(1, sht.Columns.Count).End(xlToLeft).Column
lastrow = sht.Cells(sht.Rows.Count, "E").End(xlUp).Row
 For i = 1 To LastColumn
     With sht
         If sht.Cells(1, i).Value = "Vbd" Then
             Set rngToAbs = .Range(sht.Cells(2, i), sht.Cells(lastrow, i))
             rngToAbs.Value = .Evaluate("=abs(" & rngToAbs.Address & ")")
         End If
     End With
 Next

End Sub

Перед нажатием программы enter image description here

После нажатия кнопки программа enter image description here

На самом деле я хочу, чтобы это было enter image description here

1 Ответ

1 голос
/ 23 января 2020

1) На самом деле вам не нужна буква столбца. Вы можете просто использовать номер столбца в пределах Cells.

2) Вам необходимо l oop через каждую отдельную ячейку в строке заголовка, чтобы проверить, равно ли ее значение "Vbd".

Попробуйте что-то вроде следующего:

 Dim i as Long
 For i = 1 to LastColumn
     With sht
         If .Cells(1, i).Value = "Vbd" Then
             Set rngToAbs = .Range(.Cells(2, i), .Cells(LastRow, i))
             rngToAbs.Value = .Evaluate("=abs(" & rngToAbs.Address & ")")
         End If
     End With
 Next

Полный код:

Sub testing()

    Dim sht As Worksheet
    Set sht = ThisWorkbook.Sheets("Sheet4")

    Dim lastColumn As Long
    lastColumn = sht.Cells(1, sht.Columns.Count).End(xlToLeft).Column

    Dim lastRow As Long
    lastRow = sht.Cells(sht.Rows.Count, 1).End(xlUp).Row

    Dim i As Long
    For i = 1 To lastColumn
        With sht
            If .Cells(1, i).Value = "Vbd" Then
                Dim rngToAbs As Range
                Set rngToAbs = .Range(.Cells(2, i), .Cells(lastRow, i))
                rngToAbs.Value = .Evaluate("=abs(" & rngToAbs.Address & ")")
            End If
        End With
    Next

End Sub

РЕДАКТИРОВАТЬ:

Пожалуйста, см. это следующий вопрос . Обратите внимание, что в зависимости от вашей версии Excel вам может понадобиться

 .Evaluate("=INDEX(abs(" & rngToAbs.Address & "),)")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...