Во-первых, позвольте мне сказать, что я надеюсь, что спрашивать об этом в том же посте, что и мой оригинал, является правильным этикетом SO. Все в том же духе, но я не уверен, что это правильно. Так что, пожалуйста, если я не прав, поправьте меня, чтобы я мог это исправить.
Я создал макрос для выполнения TextToColumns некоторое время назад. Я отредактировал и почистил макрос. Он работал нормально, пока я не начал распространять данные в эти поля с помощью формул вместо того, чтобы копировать данные в них вручную, как я делал раньше.
Теперь я расширил код модуля моего рабочего листа и понял, что метод, который я написал несколько месяцев назад, мешает формулам, которые теперь копируют значения в поля, которые я изначально выполнял TextToColumns.
Короче говоря, есть ли способ заставить .TextToColumns принимать значения диапазона, в котором он работает, и игнорировать формулу?
Sheet4.Range(categorySrcColumn & srcCategoryColLastRow)
.TextToColumns _
Destination:=Range(categoryDestColumn), _
Other:=True, _
OtherChar:="/", _
FieldInfo:=Array(1,1), _
TrailingMinusNumbers:=true
Я проверил документацию для TextToColumns в поисках xlValues, но ничего подобного не нашел.
---------- дополнение -----------
Рэйчел. Я ценю ваш вклад. Возможно, вы могли бы помочь немного больше. Я подключил ваше предложение, но оно просто ничего не делает. Я позволил себе несколько вольностей в надежде объединить то, что вы дали, с тем, что мне нужно. Отказ от ответственности: я ни в коем случае не разработчик VBA. То, что я знаю, это то, что я узнал из Google. Я живу в мире Unix/Linux, так что это совсем не то, к чему я привык.
Вот что у меня пока...
Public Function sbTextToColumn(srcRange As String, dstRange As String)
Dim vData As Variant
vData = Split(ActiveSheet.Range(srcRange).Value, "/")
' I need to massage the data in the srcRange a bit before I can separate it out.
' This is a partial sanity check on the data as well.
Range(srcRange).Replace What:="I/R", Replacement:="IR", Lookat:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False _
ReplaceFormat:=False
Range(srcRange).Replace What:="N/A", Replacement:="NA", Lookat:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False _
ReplaceFormat:=False
Range(srcRange).Replace What:=" ", Replacement:="", Lookat:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False _
ReplaceFormat:=False
ActiveSheet.Range(dstRange).Resize(ColumnSize:=UBound(vData) + 1) = vData
sbTextToColumn = ""
End Function
К сожалению, я не могу выложить пример таблицы. Он находится в закрытой, защищенной сети.
Теперь, когда я подключаю это к рабочему листу через: =sbTextToColumn(C836, E836), ничего не происходит.
Это моя первая попытка создать и использовать UDF. Вот как я вызываю функцию. У меня есть рабочий лист с первыми тремя столбцами A-C, извлекающими данные из другой электронной таблицы. Эти столбцы, конечно, формулы. Столбец D не используется, но я размещаю здесь вызов UDF, надеясь, что это сработает. Столбцы E-I зарезервированы для данных T2C, а столбец J используется для извлечения тех же данных, что и столбец B (да, я знаю, что это избыточно). Моя цель состоит в том, что я хотел бы избавиться от столбца J (он используется для vlookup на другом листе, и я, возможно, не смогу его удалить, но я бы хотел). В идеале я хотел бы извлечь исходные данные из другой электронной таблицы, проверить их на работоспособность, разделить и просто поместить отсортированные данные в необходимые столбцы n.
Итак, я на правильном пути? Я все еще работаю над этим. Если я добьюсь прогресса, я опубликую прогресс. ТИА!