в основном я использую функцию TextToColumns для разделения данных, разделенных точкой с запятой в той же ячейке. Проблема в том, что есть 2 столбца данных, для которых требуется выполнение этой функции, и мне нужно вставить данные без перезаписи.
(легко, впервые с VBA и Excel) это то, что у меня сейчас есть:
Sub Button1_Click()
Dim rng As Range
Dim sh As Worksheet
Set sh = Worksheets("Sheet1")
With sh
Set rng = .[Q1]
Set rng = .Range(rng, .Cells(.Rows.Count, rng.Column).End(xlUp))
num = Application.WorksheetFunction.Max(Columns("P"))
rng.Offset(0, 1).Resize(1, num).EntireColumn.Insert
rng.TextToColumns Destination:=rng, DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=True, Comma:=False, Space:=False, Other:=False, _
FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
End With
Set sh2 = Worksheets("Sheet1")
With sh2
num2 = Application.WorksheetFunction.Max(Columns("P"))
Dim lastColumn As Integer
lastColumn = ActiveSheet.UsedRange.Column - 1 + ActiveSheet.UsedRange.Columns.Count
MsgBox Replace(Cells(1, lastColumn).Address(False, False), "1", "")
MsgBox lastColumn
Set rng = .[W1]
Set rng = .Range(rng, .Cells(.Rows.Count, rng.Column).End(xlUp))
rng.TextToColumns Destination:=rng, DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=True, Comma:=False, Space:=False, Other:=False, _
FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
End With
End Sub
Хорошо, поэтому я пытаюсь исправить вручную во второй части rng на W1. rng должен быть следующим пустым столбцом. поэтому lastColumn, использующий MsgBox, ДЕЙСТВИТЕЛЬНО возвращает столбец «W», но я не могу установить для него значение rng (несоответствие типов). ой, а переменная num установлена на количество столбцов, которые мне нужно вставить. мои данные выглядят так:
счет | столбец с; данные нуждаются в разделении | столбец с; данные нуждаются в разделении
5 | 5 наборов данных, разделенных точкой с запятой | не волнует, потому что это конец листа
есть ли более простой способ сделать это? я даже близко?