0

個々のポイントに分割する必要があるデータがあります。私のマクロは、散布図としてデータをグラフ化します。列 A はグラフのタイトル、列 B は X 軸、列 C と D は Y 軸です。私が必要とするのは、製品 ID に複数の番号がリストされている場合に、番号を独自の行に分割し、元のフォームから作成された各行で列 B、C、および D を同じに保つことです。したがって、行 167 の場合、それぞれ B、C、および D にパッケージング、200、および 100 を持つ 3 つの行 (001,002,003) が必要です。どこから始めればよいかわかりません。マクロを作成しようとしましたが、データに対して実行する「検索」式を記録しようとすると、すぐにつまずきました。どんな助けでも大歓迎です。

列 A: 001, 002, 003 // 列 B: 包装 // 列 C:200 // 列 D:100

申し訳ありませんが、データのスクリーンショットを投稿できませんでした。フォーラムでは許可されません。ご不明な点がございましたら、お気軽にお問い合わせください。頻繁に確認いたします。

前もって感謝します。

4

4 に答える 4

1

私はこれを非常に迅速に、効率をあまり気にせずに崇拝しましたが、これでうまくいくはずです:

  Sub SplitUpVals()

  Dim i As Long
  Dim ValsToCopy As Range
  Dim MaxRows As Long
  Dim ValToSplit() As String
  Dim CurrentVal As Variant


     MaxRows = Range("A1").End(xlDown).Row

     For i = 1 To 10000000

        ValToSplit = Split(Cells(i, 1).Value, ",")
        Set ValsToCopy = Range("B" & i & ":D" & i)

        For Each CurrentVal In ValToSplit

           CurrentVal = Trim(CurrentVal)
           Cells(i, 1).Value = CurrentVal
           Range("B" & i & ":D" & i).Value = ValsToCopy.Value

           Cells(i + 1, 1).EntireRow.Insert
           i = i + 1
           MaxRows = MaxRows + 1
        Next

        Cells(i, 1).EntireRow.Delete

     If i > MaxRows Then Exit For

     Next i

  End Sub

注意として、データが削除される可能性があるため、データの下のセルにデータがないことを確認してください。

于 2013-02-13T22:44:59.043 に答える
0

列Aのデータを解析する必要があります。これを行うには、文字列を配列に分割してから、配列項目を反復処理して、必要に応じて行を追加/挿入します。

ワークシートが表示されない場合は、おそらくこのようなものから始めます。これにより、セルの値が列Aから配列に分割され、配列内の項目を繰り返し処理して、必要に応じてワークシートを操作できます。

Sub TestSplit()
Dim myString as String
Dim myArray() as String
Dim cell as Range
Dim i as Long

For each cell in Range("A2",Range("A2").End(xlDown))
    myString = cell.Value 

    myArray = Split(myString, ",")  '<-- converts the comma-delimited string in to an array
    For i = lBound(myArray) to uBound(myArray)
        If i >= 1 Then
            'Add code to manipulate your worksheet, here
        End If
    Next
Next
End Sub
于 2013-02-13T22:42:15.443 に答える
0
Sub DivideData()

'これにより、同じ行に結合されたすべてのコードが、独自の個別のデータを持つ独自の個別の行に分割されます

Dim a, b, txt As String, e, s, x As Long, n As Long, i As Long, ii As Long
With Range("a1").CurrentRegion
    a = .Value
    txt = Join$(Application.Transpose(.Columns(1).Value))
    x = Len(txt) - Len(Replace(txt, ",", "")) + .Rows.Count
    ReDim b(1 To x * 2, 1 To UBound(a, 2))
    For i = 1 To UBound(a, 1)
        For Each e In Split(a(i, 1), ",")
            If e <> "" Then
                For Each s In Split(e, "-")
                    n = n + 1
                    For ii = 1 To UBound(a, 2)
                        b(n, ii) = a(i, ii)
                    Next
                    b(n, 1) = s
                Next
            End If
        Next
    Next
    With .Resize(n)
        .Columns(1).NumberFormat = "@"
        .Value = b
    End With
End With

サブ終了

于 2013-02-14T15:39:32.070 に答える
0

これはより良い解決策です(今はもっと時間がありました:))-これがうまくいくことを願っています!

  Sub SplitUpVals()

  Dim AllVals As Variant
  Dim ArrayIndex As Integer
  Dim RowLooper As Integer


   AllVals = Range("A1").CurrentRegion
   Range("A1").CurrentRegion.Clear

   RowLooper = 1

   For ArrayIndex = 1 To UBound(AllVals, 1)
      ValToSplit = Split(AllVals(ArrayIndex, 1), ",")

        For Each CurrentVal In ValToSplit

           CurrentVal = Trim(CurrentVal)
           Cells(RowLooper, 1).Value = CurrentVal
           Cells(RowLooper, 2).Value = AllVals(ArrayIndex, 2)
           Cells(RowLooper, 3).Value = AllVals(ArrayIndex, 3)
           Cells(RowLooper, 4).Value = AllVals(ArrayIndex, 4)

           RowLooper = RowLooper + 1
         Next

   Next ArrayIndex

  End Sub
于 2013-02-14T14:30:19.213 に答える