2013-04-17 4 views
0

В основном я использую функцию TextToColumns для разделения данных, разделенных точкой с запятой в одной ячейке. проблема в том, что есть 2 столбца данных, которые нуждаются в этой функции, и мне нужно вставить данные без перезаписи.Excel, VBA, мне нужно отправить rng в lastcolumn. В настоящее время MsgBox покажет его

(Полегче, первый раз с помощью 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 

ИТАК, что я пытаюсь исправить это установка ГСЧ вручную во второй части к W1. rng должен быть следующим пустым столбцом. поэтому lastColumn с помощью MsgBox DOES возвращает столбец «W», но я не могу установить это на rng (тип несоответствия). oh, а переменная num устанавливается на количество столбцов, которые мне нужно вставить. мои данные выглядят так:

count | столбец с; нужны данные для разделения | столбец с; данные необходимо разделить

5 | 5 наборов данных, разделенных полуколонами | не заботятся, потому что это конец листа

есть ли более простой способ сделать это? я даже близко?

ответ

0

... Самое простое решение, если я правильно понял ваш вопрос ... Почему бы вам просто не сделать колонку THIRD, равную Column1 & ";" & Column2, а затем просто сделать текст в столбцы на одном столбце?

Или я что-то не хватает ???

+0

ОН, правый хороший момент! это исключило бы способность писать заголовок, но я мог бы жить с этим. – dalearyous

+0

Рад, что это сработало! - Если это так, не забудьте отметить решение в качестве ответа. –

+0

ну, это не потому, что значения для этого единственного столбца - это просто формула, а не фактические текстовые значения. также, мог бы я просто сделать макрос и продолжать использовать VBA? – dalearyous

0

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

Если вы обрабатываете столбцы данных справа налево, вам не нужно беспокоиться об изменении ссылок на адреса при вставлении столбцов. Это означает, что вы можете использовать один блок кода вставки/преобразования, итерации по двум адресам адреса данных, которые я предположил, это Q1 и R1.

Обратите внимание, что я добавил смещение в пункт назначения TextToColumns, чтобы избежать перезаписи исходных данных.

Option Explicit 

Sub myTextToColumns() 
    Dim sh As Worksheet 
    Dim rng As Range 
    Dim num As Long 
    Dim arr As Variant 
    Dim i As Long 
    Set sh = Worksheets("Sheet1") 
    arr = Array("R1", "Q1") 
    num = Application.WorksheetFunction.Max(Columns("P")) 
    With sh 
     For i = LBound(arr) To UBound(arr) 
      Set rng = .Range(arr(i)) 
      Set rng = .Range(rng, .Cells(.Rows.Count, rng.Column).End(xlUp)) 
      rng.Offset(0, 1).Resize(1, num).EntireColumn.Insert 
      rng.TextToColumns Destination:=rng.Offset(0, 1), 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 
     Next 
    End With 
End Sub 

 Смежные вопросы

  • Нет связанных вопросов^_^