私は編集しようとしているExcelスプレッドシートを持っています。これは、データを処理するために使用される特定の列のフィールドを消去するクリーナーです。このコードは以前の同僚によって書かれたものです。ファイルはここにあります。私はExcelに比較的新しいだと私はコードを見ているとき、私はそれをすべての多くを理解していなかったので、VBAについて多くを知らないこのExcel VBAコードを変更する手助けをしてくれる人はいますか?
http://www.mediafire.com/file/luv3wsfhdvz20h7/Master_data_scrubber_-_USE_THIS_ONE.xlsm
Anways。私はクリーニングマクロを編集しようとしています。クリーンな全ボタンがあり、それは列A-APを取り、それの隣に新しい値の列を作成します。各列には個別のボタンクリーナーもあります。
列Bにはsku番号の列(I.G 40118)が含まれており、クリーンボタンにメーカーコードが追加されます(i.g. happ)。したがって、Cleanを押すと、BとCの間に列が挿入されます。この新しい列には値happ40118が入ります。
列Kにはイメージ名が付けられます。 K2の値は "hungryhippos-box.jpg"となります。現在、K列のクリーンボタンは、セルに挿入した値を新しい挿入列からコピーします。
ボタンを実際に値をコピーする代わりに、Cleaned_Sku列(新しく作成された列C)のセルから値を取り出し、列K(.jpg)の値から拡張子をタックして連結しますそれらを一緒に新しく作成された列Lに入れます。値はhapp40118.jpgのようになります。
コードは以下のようになります。
**For the Clean All**
Private Sub Clean_ALL_Click()
MsgBox ("This action will take a few moments.")
Application.ScreenUpdating = False
Cells.Select
Range("AM9").Activate
With Selection.Font
.Name = "Arial"
.Size = 8
End With
Call CleanSKUs_Click
Call CleanBrand_Click
Call Clean_MFG_SKU_Click
Call Clean_UPC_Click
Call Clean_ISBN_Click
Call Clean_EAN_Click
Call Clean_product_name_Click
Call Clean_Short_desc_Click
Call Celan_long_desc_Click
Call Clean_Image_Click
Call Clean_MSRP_Click
Call Clean_Cost_Click
Call Clean_product_weight_Click
Call Clean_product_weight_u_Click
Call Clean_product_length_Click
Call Clean_product_width_Click
Call Clean_product_height_Click
Call Clean_product_lwh_uom_Click
Call Clean_age_range_Click
Call Clean_Origin_Click
Call Clean_origin_text_Click
Call Clean_Product_safety_Click
Call Clean_category_Click
Call Clean_Processed_date_Click
Call Clean_Interactive_URL_Click
Call Cleaned_Drop_ship_Click
Call Cleaned_Developmental_Attributes_Click
Call Clean_keywords_Click
Call Clean_product_available_date_Click
Call Clean_gender_Click
Call Clean_attribute_Click
Call Clean_products_Awards_Click
Call Clean_P_Awards_index_Click
Call Clean_Out_of_Production_Click
Application.ScreenUpdating = True
MsgBox ("The data cleaning is done!" & vbCrLf & vbCrLf & " All the data has been copied to a new column," & vbCrLf & "check the data before using it.")
End Sub
----------
**For the Clean SKU**
Private Sub CleanSKUs_Click()
Dim a$, b$, C$, prefix$, count$, MyLetter$, number, ii, j, I As Integer
Dim lr As Long
Dim r As Range
Dim popbox As String
Dim popcount, loopI As Integer
For intCounter = 1 To ActiveSheet.UsedRange.Columns.count
count$ = Cells(1, intCounter).Address(False, False)
Range(count$).Select
If ActiveCell.Value = "SKU" Then
number = intCounter
ActiveCell.Offset(0, 1).EntireColumn.Insert
ActiveCell.Offset(0, 1).Value = "Cleaned SKUs"
Exit For
End If
Next intCounter
ii = number/26
If ii > 1 Then
ii = Int(ii)
j = ii * 26
If number = j Then
number = 26
ii = ii - 1
Else
number = number - j
End If
MyLetter = ChrW(ii + 64)
End If
MyLetter$ = MyLetter$ & ChrW(number + 64)
lr = Cells(Rows.count, "B").End(xlUp).Row 'find Last row
Set r = Range(MyLetter$ & "2:" & MyLetter$ & lr) 'define working range
Sheets("VARs").Activate
ActiveSheet.Cells(3, 2).Select
prefix$ = Selection.Value
Sheets("NewData").Activate
Dim d
Set d = CreateObject("Scripting.Dictionary")
popcount = 0
loopI = 1
For Each cell In r
loopI = loopI + 1
If d.Exists(cell.Value) Then
' tag the d(cell.value) row -- i.e. (the first appearance of this SKU)
Rows(d(cell.Value) & ":" & d(cell.Value)).Select
Selection.Interior.ColorIndex = 6
' tag the row
Rows(loopI & ":" & loopI).Select
Selection.Interior.ColorIndex = 6
' add duplicate to popup box
popcount = popcount + 1
Else
d.Add cell.Value, loopI
End If
a$ = cell.Value
For I = 1 To Len(a$)
b$ = Mid(a$, I, 1)
If b$ Like "[A-Z,a-z,0-9]" Then
C$ = C$ & b$
End If
Next I
C$ = prefix$ & C$
cell.Offset(0, 1).Value = LCase(C$) 'set value
C$ = "" 'reset c$ to nothing
Next cell
If popcount > 0 Then
MsgBox ("There were " & popcount & " repeated SKUs.")
End If
End Sub
----------
***For the Clean Image(This is the one I want to modify)**
Private Sub Clean_Image_Click()
Dim a$, b$, C$, count$, MyLetter$, number, ii, j, I As Integer
Dim lr As Long
Dim r As Range
For intCounter = 1 To ActiveSheet.UsedRange.Columns.count
count$ = Cells(1, intCounter).Address(False, False)
Range(count$).Select
If ActiveCell.Value = "Image filename" Then
number = intCounter
ActiveCell.Offset(0, 1).EntireColumn.Insert
ActiveCell.Offset(0, 1).FormulaR1C1 = "Cleaned Image Filename"
Exit For
End If
Next
ii = number/26
If ii > 1 Then
ii = Int(ii)
j = ii * 26
If number = j Then
number = 26
ii = ii - 1
Else
number = number - j
End If
MyLetter = ChrW(ii + 64)
End If
MyLetter$ = MyLetter$ & ChrW(number + 64)
lr = Cells(Rows.count, "B").End(xlUp).Row 'find Last row
Set r = Range(MyLetter$ & "2:" & MyLetter$ & lr) 'define working range
For Each cell In r
a$ = cell.Value
a$ = Trim(a$)
cell.Offset(0, 1).Value = a$ 'set value
a$ = "" 'reset c$ to nothing
Next cell
End Sub
おかげ
OK、最初のものが最初です。ほとんどの人があなたを叱責し、SOはコード作成サービスではないと伝えます。問題があるコードを提示している間に、達成しようとしたことを言っているわけではありません。一方、私はこの種の仕事を楽しんでいるので、以下を参照してください。 – Hrothgar