Оператор IF для заполнения ячейки на основе ссылки

#vba #excel

#vba #excel

Вопрос:

Это очень странный запрос:

Я хотел бы, чтобы макрос VBA или оператор IF считывали, откуда извлекается ссылка, и заполняли другую ячейку, показывая, где была ссылка на ячейку.

Это контрольный список проверки для детали с сотнями измерений, и данные извлекаются примерно из 7 различных электронных таблиц. Спецификация требует, чтобы у каждого значения был соответствующий метод проверки. Я понимаю, что могу сделать это индивидуально, однако, конечно, ячейки ссылаются на другую ячейку, которая будет принимать индивидуальные инструкции IF для каждой, которые не будут сокращаться в любое время. Я пытаюсь использовать это утверждение и применить его к десяткам других электронных таблиц, продвигающихся вперед, иначе ввод вручную был бы не так уж плох.

Например: если ячейка ссылается на значение из рабочей книги Hard Gauge, я бы хотел, чтобы в ячейке справа от нее было написано «Hard Gauge», а если ячейка ссылается на значение Height Gauge, я бы хотел, чтобы в ячейке справа от нее было написано «Height Gauge».

Что-то вроде:

 IF({File Path}[40452-1016 REV. A **(HEIGHT GAGE)**.xlsm] = TRUE, "HEIGHT GAUGE", IF({File Path}[40452-1016 REV. A **(HARD GAGE)**.xlsm] = TRUE, "HARD GAUGE",,))
  

Я знаю, что проблема будет заключаться в игнорировании значения ячейки, которое следует за « .xlsm «

 {File Path}[40452-1016 REV. A (HEIGHT GAGE).xlsm]**'!$C$29**
  

Может кто-нибудь мне помочь или сообщить, возможно ли это вообще. Это не обязательно должно быть из оператора IF, VBA макрос будет работать просто отлично.

Ответ №1:

Это даст вам все слева от .xlsm, если строка действительно содержит .xlsm . Это должно быть хорошей отправной точкой

 Sub t()
Dim endrow As Long
Dim column As String
Dim a As Range

column = "A"
endrow = ActiveSheet.Range(column amp; Rows.Count).End(xlUp).Row


For Each a In Range(column amp; endrow)
    If InStr(1, a.Value, ".xlsm", vbTextCompare) > 0 Then
        a.Offset(0, 1).Value = Left(a.Value, InStr(1, a.Value, ".xlsm", vbTextCompare))
    End If
Next a
End Sub