類似した内容に基づいて複数のExcel行を結合してからVBAの列を増やす


0

ワークシートのすべての行をチェックして、次に同じ2つの行を結合し、それが完了したら "QTY"列を増やすVBAルーチンを設定しようとしています。

以下は私が達成しようとしていることの前後の例です。


前: before


後: after


スーパーユーザーやインターネット上のさまざまな場所で見いだしたいくつかの解決策を適用しようとしましたが、残念ながらこれに直接当てはまるものはなく、ExcelのVBAに関する理解が限られているため、この問題を回避できません。


1
あなたもあなたのコードを共有する必要がありますので、私たちはあなたが何をしようとしているのか、そしてどこで問題が起こっているのかを見ることができます。
Dave

データ統合が目的としているのは、まさにその状況ではありませんか。私見は何もプログラムする必要はありません、それはXLに含まれていて、そして速いです。
user1016274

Data Consolidationを使用しない理由は2つあります。まず最初に、この特定の設定ではうまくいきませんでした。おそらく、このファイルにヘッダーがあるためです。第二に、これは顧客のためのものであり、私は彼らにとってプロセスを可能な限り単純にしたかったのです。
hilli_micha

回答:


0

使用する前に、このコードをモジュールに挿入して変数を変更してください。 数量列 自分のいる列の番号まで 数量 タイトル:

Sub customgroup()
    Dim a As Application
    Dim wkb As Workbook
    Dim wks As Worksheet
    Dim DataRange As Range
    Set a = Application
    Set wkb = ThisWorkbook
    Set wks = wkb.Sheets(1)
    wks.Application.ScreenUpdating = False
    qtycolumn = 4 'this have to be changed to the QTY column
    reviewing = True
    visitrow = 1
    While reviewing = True
        visitrow = visitrow + 1
        If wks.Cells(visitrow, 1) = "" Then
            reviewing = False
        End If
        If wks.Cells(visitrow, qtycolumn) <> 0 Then
            countitems = 1
            visitrow2 = visitrow + 1
            reviewing2 = reviewing
            While reviewing2 = True
                If wks.Cells(visitrow2, 1) = "" Then
                    reviewing2 = False
                End If
                If wks.Cells(visitrow2, qtycolumn) <> 0 Then
                    compareranges = Join(a.Transpose(a.Transpose(wks.Rows(visitrow).Value)), Chr(0)) = Join(a.Transpose(a.Transpose(wks.Rows(visitrow2).Value)), Chr(0))
                    If compareranges = True Then
                        countitems = countitems + wks.Cells(visitrow2, qtycolumn)
                        wks.Cells(visitrow2, qtycolumn) = 0
                    End If
                End If
                visitrow2 = visitrow2 + 1
            Wend
            wks.Cells(visitrow, qtycolumn) = countitems
        End If
    Wend
    visitrow = visitrow - 1
    LastColumn = wks.Range("A1").CurrentRegion.Columns.Count
    Set DataRange = Range(Cells(1, 1), Cells(visitrow, LastColumn))
    lettercolumn = Split(Cells(, qtycolumn).Address, "$")(1)
    DataRange.Sort key1:=Range(lettercolumn & ":" & lettercolumn), order1:=xlDescending, Header:=xlYes
    For i = visitrow To 2 Step -1
        filterqty = wks.Cells(i, qtycolumn)
        If filterqty = 0 Then
            wks.Rows(i).Delete
        End If
    Next i
   wks.Application.ScreenUpdating = True
End Sub

どうもありがとうございます!私はスクリーンショットに表示するのを忘れたヘッダーを説明するために "To 2"を "To 5"に変更するために "For"文にマイナーチェンジをしなければなりませんでした、しかしこれは素晴らしい作品です!再度、感謝します!
hilli_micha
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.