私は小さな小売店を経営しており、商品の在庫ラベルの作成を任されています。在庫管理ソフトウェア (AMan Pro) からアイテムのリストを Excel にエクスポートし、アイテムの説明、数量、状態、SKU 番号、およびプラットフォーム (ビデオ ゲーム プラットフォーム) を取得します。私は現在2つのマクロを持っています。1 つは SKU を使用可能な形式にトリミングし (先頭の文字を取り除きます)、もう 1 つは複数の数量アイテムを別の行に分割します。(つまり、数量 5 のアイテム #1 は数量 1 の 5 つの行にコピーされます) これは機能しますが、マクロで処理できる不要な手順を実行していると思います。
私の AMan プログラムは、項目を含む Excel ワークブックを吐き出します。次に、それらの項目をシート 1 の「マクロ有効」ワークブックにコピーして、マクロを実行します。シート 2 には、ラベル用に適切にフォーマットされたデータがあります。例えば; 最初の 60 文字のみを使用するように [説明] フィールドをトリミングする式があります。(一部、かなり長い説明があります)
セカンドシートはあまり必要ない気がします。アイテムをシート 1 にコピーし、シート 1 ですべての書式設定を行うマクロを実行したいと思います。
- 複数の数量を持つアイテムを別々の行に分けます (これには動作するマクロがあります)。
- SKU (作業マクロ) から先頭の文字を削除し、SKU を 7 桁の数字形式 (#######) にします。
- 説明を最初の 60 文字だけに減らします。
- 条件を最初の 2 文字だけに減らします。
- プラットフォームを最初の 15 文字だけに減らします。
これが現在のマクロ コードとスプレッドシートへのリンクです。よろしくお願いします。 SKU_LABEL_FINAL.xlsm
Sub ExpandRows()
Dim dat As Variant
Dim i As Long
Dim rw As Range
Dim rng As Range
Set rng = Sheets(1).UsedRange
dat = rng
' Loop thru your data, starting at the last row
For i = UBound(dat, 1) To 2 Step -1
' If Quantity > 1
If dat(i, 2) > 1 Then
' Insert rows to make space
Set rw = rng.Rows(i).EntireRow
rw.Offset(1, 0).Resize(dat(i, 2) - 1).Insert
' copy row data down
rw.Copy rw.Offset(1, 0).Resize(dat(i, 2) - 1)
' set Quantity to 1
rw.Cells(1, 2).Resize(dat(i, 2), 1) = 1
End If
Next
Columns("D:D").Select
Selection.Replace What:="AManPro-", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
サブ終了