Я работаю над листом, и то, что я делаю, кажется очень медленным и затяжным. Я надеюсь, что есть более приятный способ сделать это.
Я хотел бы сделать то, что в Excel выглядело бы так, но в VBA: - if(Search("5,",A10,1)>0,A5,0)+if(Search("4,",A10,1)>0,A4,0)+if(Search("3,",A10,1)>0,A3,0)
и т. Д.
Единственный способ увидеть это в vba - это сделать поиск добавить данные в другом месте, а затем сделать сумму позже. У меня есть это: -
Sub AmorTotal_1()
Dim Coll As String
Dim ClTo As String, RuTo As String, ElTo As String, Jig As String, Teth As String, Admin As String, Crane As String
Dim ClToS As Integer, RuToS As Integer, ElToS As Integer, JigS As Integer, TethS As Integer, AdminS As Integer, CraneS As Integer
Coll = "B"
ClTo = 5
RuTo = 6
ElTo = 7
Jig = 8
Teth = 9
Admin = 10
Crane = 11
ThisWorkbook.Sheets(2).Range(Coll & 2).Value = ThisWorkbook.Sheets(1).Range(Coll & 2).Value
If InStr(1, Range(Coll & 12), "5,") > 0 Then
ThisWorkbook.Sheets(2).Range(Coll & 3).Value = ThisWorkbook.Sheets(1).Range(Coll & ClTo).Value
Else
ThisWorkbook.Sheets(2).Range(Coll & 3).Value = 0
End If
If InStr(1, Range(Coll & 12), "6,") > 0 Then
ThisWorkbook.Sheets(2).Range(Coll & 4).Value = ThisWorkbook.Sheets(1).Range(Coll & RuTo).Value
Else
ThisWorkbook.Sheets(2).Range(Coll & 4).Value = 0
End If
If InStr(1, Range(Coll & 12), "7,") > 0 Then
ThisWorkbook.Sheets(2).Range(Coll & 5).Value = ThisWorkbook.Sheets(1).Range(Coll & ElTo).Value
Else
ThisWorkbook.Sheets(2).Range(Coll & 5).Value = 0
End If
If InStr(1, Range(Coll & 12), "8,") > 0 Then
ThisWorkbook.Sheets(2).Range(Coll & 6).Value = ThisWorkbook.Sheets(1).Range(Coll & Jig).Value
Else
ThisWorkbook.Sheets(2).Range(Coll & 6).Value = 0
End If
If InStr(1, Range(Coll & 12), "9,") > 0 Then
ThisWorkbook.Sheets(2).Range(Coll & 7).Value = ThisWorkbook.Sheets(1).Range(Coll & Teth).Value
Else
ThisWorkbook.Sheets(2).Range(Coll & 7).Value = 0
End If
If InStr(1, Range(Coll & 12), "10,") > 0 Then
ThisWorkbook.Sheets(2).Range(Coll & 8).Value = ThisWorkbook.Sheets(1).Range(Coll & Admin).Value
Else
ThisWorkbook.Sheets(2).Range(Coll & 8).Value = 0
End If
If InStr(1, Range(Coll & 12), "11,") > 0 Then
ThisWorkbook.Sheets(2).Range(Coll & 11).Value = ThisWorkbook.Sheets(1).Range(Coll & Crane).Value
Else
ThisWorkbook.Sheets(2).Range(Coll & 11).Value = 0
End If
ThisWorkbook.Sheets(1).Range(Coll & 13).Value = ThisWorkbook.Sheets(2).Range(Coll & 3).Value + ThisWorkbook.Sheets(2).Range(Coll & 4).Value + ThisWorkbook.Sheets(2).Range(Coll & 5).Value + ThisWorkbook.Sheets(2).Range(Coll & 6).Value + ThisWorkbook.Sheets(2).Range(Coll & 7).Value + ThisWorkbook.Sheets(2).Range(Coll & 8).Value + ThisWorkbook.Sheets(2).Range(Coll & 9).Value
End Sub
Мне нужно сделать это через 20 столбцов и несколько строк, поэтому надеялся, что был другой путь.
Я искал в Интернете и не могу найти что-либо или что-либо, что могу понять (я все еще новичок в VBA).
Ниже приведен пример некоторых данных. В итоге,
Пользователь вводит в некоторые значения некоторых инструментов в строках 5-11. Пользователь может решить, что определенные инструменты могут быть использованы для других элементов (элементов, представленных в столбцах), поэтому он может амортизировать стоимость этих инструментов для всех этих элементов. По первому пункту пользователь решил, что строки 8 и 9 (в строке 12) могут использоваться по элементам 1,2,3,5 (строка 15). Строка 13 принимает значение цен в ячейках B8 и B9 в элементе 1, строки 16 - амортизированное значение, которое является стоимостью строки 2 для каждого ссылочного элемента 1,2,3 + 5. Это выполняется с помощью этого элемента. стоимость, разделенная на (общая стоимость предмета для 1,2,3 + 5) * строка амортизированной стоимости 13.
Надеюсь, что это имеет смысл объяснить немного сложно.