面倒なデータ入力の時間を数え切れないほど節約できる方法でExcelを自動化しようとしています。これが私の問題です。
すべての在庫のバーコードを印刷する必要があります。これには、それぞれ特定の数量の4,000のバリエーションが含まれています。
Shopifyは当社のeコマースプラットフォームであり、カスタマイズされたエクスポートをサポートしていません。ただし、在庫数列を含むすべてのバリアントのCSVをエクスポートできます。
バーコード印刷のハードウェア/ソフトウェアにはDymoを使用しています。 Dymoは、行ごとに1つのラベルのみを印刷します(数量列は無視されます)。
在庫列の値に基づいて行「x」を何度も複製するようにExcelを自動化する方法はありますか?
データのサンプルは次のとおりです。
コードを変更できるように、似たようなことをした人を見つけようとしましたが、1時間検索した後でも、開始した場所は正しいです。よろしくお願いします!
デビッドは私をそれに打ち負かしましたが、別のアプローチは誰も傷つけません。
次のデータを検討してください
Item Cost Code Quantity
Fiddlesticks 0.8 22251554787 0
Woozles 1.96 54645641 3
Jarbles 200 158484 4
Yerzegerztits 56.7 494681818 1
この機能で
Public Sub CopyData()
' This routing will copy rows based on the quantity to a new sheet.
Dim rngSinglecell As Range
Dim rngQuantityCells As Range
Dim intCount As Integer
' Set this for the range where the Quantity column exists. This works only if there are no empty cells
Set rngQuantityCells = Range("D1", Range("D1").End(xlDown))
For Each rngSinglecell In rngQuantityCells
' Check if this cell actually contains a number
If IsNumeric(rngSinglecell.Value) Then
' Check if the number is greater than 0
If rngSinglecell.Value > 0 Then
' Copy this row as many times as .value
For intCount = 1 To rngSinglecell.Value
' Copy the row into the next emtpy row in sheet2
Range(rngSinglecell.Address).EntireRow.Copy Destination:= Sheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Offset(1)
' The above line finds the next empty row.
Next
End If
End If
Next
End Sub
Sheet2に次の出力を生成します
Item Cost Code Quantity
Woozles 1.96 54645641 3
Woozles 1.96 54645641 3
Woozles 1.96 54645641 3
Jarbles 200 158484 4
Jarbles 200 158484 4
Jarbles 200 158484 4
Jarbles 200 158484 4
Yerzegerztits 56.7 494681818 1
このコードの注意点は、[数量]列に空のフィールドを含めることはできないということです。私はDを使用したので、お気軽にNに置き換えてください。
あなたが始めるのに十分なはずです:
Sub CopyRowsFromColumnN()
Dim rng As Range
Dim r As Range
Dim numberOfCopies As Integer
Dim n As Integer
'## Define a range to represent ALL the data
Set rng = Range("A1", Range("N1").End(xlDown))
'## Iterate each row in that data range
For Each r In rng.Rows
'## Get the number of copies specified in column 14 ("N")
numberOfCopies = r.Cells(1, 14).Value
'## If that number > 1 then make copies on a new sheet
If numberOfCopies > 1 Then
'## Add a new sheet
With Sheets.Add
'## copy the row and paste repeatedly in this loop
For n = 1 To numberOfCopies
r.Copy .Range("A" & n)
Next
End With
End If
Next
End Sub
答えるのが少し遅れるかもしれませんが、これは他の人を助けるかもしれません。このソリューションをExcel2010でテストしました。たとえば、「Sheet1」はデータが配置されているシートの名前であり、「Sheet2」は繰り返しデータが必要なシートです。これらのシートが作成されていると仮定して、以下のコードを試してください。
Sub multiplyRowsByCellValue()
Dim rangeInventory As Range
Dim rangeSingleCell As Range
Dim numberOfRepeats As Integer
Dim n As Integer
Dim lastRow As Long
'Set rangeInventory to all of the Inventory Data
Set rangeInventory = Sheets("Sheet1").Range("A2", Sheets("Sheet1").Range("D2").End(xlDown))
'Iterate each row of the Inventory Data
For Each rangeSingleCell In rangeInventory.Rows
'number of times to be repeated copied from Sheet1 column 4 ("C")
numberOfRepeats = rangeSingleCell.Cells(1, 3).Value
'check if numberOfRepeats is greater than 0
If numberOfRepeats > 0 Then
With Sheets("Sheet2")
'copy each invetory item in Sheet1 and paste "numberOfRepeat" times in Sheet2
For n = 1 To numberOfRepeats
lastRow = Sheets("Sheet1").Range("A1048576").End(xlUp).Row
r.Copy
Sheets("Sheet1").Range("A" & lastRow + 1).PasteSpecial xlPasteValues
Next
End With
End If
Next
End Sub
このソリューションは、DavidZemensソリューションのわずかに変更されたバージョンです。