2014-11-20 3 views
-1

Мне нужно взять столбец A, который имеет 2 значения в одной ячейке и создать строку для каждого номера между двумя значениями, но остальную часть столбцов так же, как и в исходная строка.excel macro для создания новой строки для числа diff

enter image description here

Вот мой текущий макрос.

Sub Macro1() ' ' Macro1 Макро '

' Dim CellValue As String strcellvalue = Replace (Range ("A9"). Value "", "") Если InStr (strcellvalue, "-") Тогда дим intCurrentBIN как двойная Тусклого intLastBIN As Double Тусклого intMainRow As Integer Dim intNewRow As Integer intMainRow = 9 intNewRow = intMainRow +-

intCurrentBIN = CDbl(Left(strcellvalue, InStr(strcellvalue, "-") - 1)) 
    intLastBIN = CDbl(Right(strcellvalue, Len(strcellvalue) - InStr(strcellvalue, "-"))) 

     Do While intCurrentBIN < (intLastBIN + 1) 
      Rows(intMainRow & ":" & intMainRow).Select 
      Selection.Copy 
      Rows(intNewRow & ":" & intNewRow).Select 
      Selection.Insert Shift:=xlDown 
      Range("A" & intNewRow).Select 
      ActiveCell.FormulaR1C1 = intCurrentBIN 
      intNewRow = intNewRow + 1 
      intCurrentBIN = intCurrentBIN + 1 
     Loop 
    Rows(intMainRow & ":" & intMainRow).Select 
    Selection.Delete 
End If 

End Sub

+0

Самый лучший способ, чтобы получить помощь здесь сначала попробовать что-то. Если вы застряли, сделайте некоторое исследование, сделайте попытку исправить вещи самостоятельно, и только тогда задайте конкретный вопрос о ваших попытках. Вопросы, требующие полных решений без демонстрации исследовательских усилий, обычно закрываются и закрываются. –

+0

Кажется, вам нужно начать изучать VBA и регулярные выражения. Регулярные выражения разбивают текст на цифры, а затем циклически повторяют время «the_difference», чтобы напечатать число и описание и код копирования для вновь добавленной строки в цикле. –

+0

У меня есть это до сих пор, что работает на моем примере, но не на моем файле. Будет проверять и находить, могу ли я его улучшить. – user5469

ответ

0

Я не совсем ясно, как к тому, что ваш вопрос. Ваш код работает нормально. Ниже приведен фрагмент кода, который работает и выполняет ту же работу, не вставляя линий:

Sub createRows()

Dim iStart As Integer, iEnd As Integer, iLastRow As Integer, iThreeFour As Integer, iLoop As Integer 
Dim sID As String, sDesc As String, sCode As String 

For iThreeFour = 3 To 4 

    sID = Range("A" & iThreeFour) 
    sDesc = Range("B" & iThreeFour) 
    sCode = Range("C" & iThreeFour) 

    iStart = Left(sID, InStr(sID, "-") - 1) 
    iEnd = Right(sID, Len(sID) - InStr(sID, "-")) 
    iLastRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row + 1 

    For iLoop = iStart To iEnd 

     Range("A" & iLastRow).Value = iLoop 
     Range("B" & iLastRow).Value = sDesc 
     Range("C" & iLastRow).Value = sCode 

     iLastRow = iLastRow + 1 

    Next iLoop 

Next iThreeFour 

End Sub

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