2016-03-27 5 views
-2

タイトルと同じように、マクロやvbaスクリプトが必要です。 Excelのメインの下に、最初の列のセルの値に基づいて番号を付けます。シートは、このような具合になります最初の列にあるセルの値に基づいて、Excelの主な行の下に余分な行を生成する方法

Value1  Description1 Email1 Name1 etc 
    Value2  Description2 Email2 Name2 etc 
    ....      
    Value N 

を私が最初のセルからの値に基づいて、新しい行を生成し、主なものから情報を残りの行を自動補完する必要がある各列の下。値1の列は、次の規則のいずれかに従います。
1.空のセルが存在する可能性があります。この場合、何も起こりません。
2. 10桁の数字が1つあります。この場合も、何も起こりません。
3.複数の10桁の数字をカンマで区切って指定することができます。カンマで区切ると、異なる行で抽出する必要があります。
4. "1234567890 - 1234567893"のようなものがあります。この場合、0,1,2,3で終わる値から始まる4つの新しい行を生成する必要があります。
5.「value-value、value」(ただし10桁の数字はbtw)のカンマで区切って4桁から新しい桁までの範囲があります。
6.最後に、 "value - value、value - value"のような2つの値の範囲。

重要なことは、セルの内容が数字であっても、最初の列のセルは常にテキストとしてマークされることです。

私はこれで私のブレークポイントに達しました。私は初心者にも秀でており、この仕事は私の新しい仕事の一部として受けています。だから、それを作るか、時間を壊す。お願いします。

最後の例は:

1000000000 - 1000000003       Text1 [email protected] Joe   
1000000000          Text1 [email protected] Joe  
1000000001          Text1 [email protected] Joe   
1000000002          Text1 [email protected] Joe  
1000000003          Text1 [email protected] Joe   
2000000000, 2000000002       Text2 [email protected] Bob   
2000000000          Text2 [email protected] Bob     
2000000002          Text2 [email protected] Bob 
3000000000- 3000000002, 3000000005- 3000000007 Text3 [email protected] John 
3000000000          Text3 [email protected] John     
3000000001          Text3 [email protected] John 
3000000002          Text3 [email protected] John 
3000000005          Text3 [email protected] John 
3000000006          Text3 [email protected] John 
3000000007          Text3 [email protected] John 
+1

ニースのソフトウェア仕様。問題を解決するための元々の努力の観点から、あなたは何を示していますか? – Jeeped

答えて

1

行を挿入、常に底部で開始し、上部に向かって働きます。同様に、分割した後は、最後の部分から最初の部分に向かって作業します。

バリアント配列に残りの値を格納して、新しい各行の繰り返し値を入力します。

Module1 (Code)

Option Explicit 

Sub insertRows() 
    Dim rw As Long, i As Long, j As Long 
    Dim vals As Variant, vtmp As Variant, vtmp2 As Variant 

    With Worksheets("Sheet1") 
     For rw = .Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1 
      If CBool(InStr(1, .Cells(rw, 1).Value2, Chr(44))) Or _ 
       CBool(InStr(1, .Cells(rw, 1).Value2, Chr(45))) Then 
       vals = .Cells(rw, 1).Resize(1, 4).Value2 
       vtmp = Split(Replace(vals(1, 1), Chr(32), vbNullString), Chr(44)) 
       For i = UBound(vtmp) To LBound(vtmp) Step -1 
        vtmp2 = Split(vtmp(i), Chr(45)) 
        For j = Int(Right(vtmp2(UBound(vtmp2)), 1)) To Int(Right(vtmp2(LBound(vtmp2)), 1)) Step -1 
         .Cells(rw + 1, 1).EntireRow.Insert 
         .Cells(rw + 1, 1).Resize(1, 4) = vals 
         .Cells(rw + 1, 1) = Int(Left(vtmp2(UBound(vtmp2)), 9) & j) 
         With .Cells(rw + 1, 1).Resize(1, 4).Interior 
          .Pattern = xlSolid 
          .PatternColorIndex = xlAutomatic 
          .ThemeColor = xlThemeColorAccent6 
          .TintAndShade = 0.799981688894314 
          .PatternTintAndShade = 0 
         End With 
        Next j 
       Next i 
       'optionally delete the original row 
       '.Rows(rw).EntireRow.Delete 
      End If 
     Next rw 
    End With 

End Sub 

私はあなたが元の行を削除したい場合には、いくつかのコメントのコードを残しています。


insertRows_10_digits
サンプル・データinsertRowsの前に()

insertRows_10_digits_after
insertRows後のサンプル・データ()

+0

ありがとうございます、あなたは雇用者です! – Fahrenhate

関連する問題