2011-11-03 22 views
1

在Excel中,我試圖讓宏用移動號「 - 」。宏與破折號移動數字新細胞

我有一列E與數字

54525841-1 
454152 
1365466 
1254566-1 
1452577-1 

我想宏將所有那些有能力在年底列C. 破折號或連字符的數字,所以我需要E1 54525841名單-1被移動到C1

+0

這是在Excel中,還是什麼? –

+0

它適用於excel – user1013478

回答

1

我得到了它通過這個工作:

Sub MoveDash() 
    x = Range("E" & Rows.Count).End(xlUp).Row 
    For Each Cell In Range("E2:E" & x) 
    If InStr(Cell, "-") <> 0 Then 
     Cell.Offset(, 1) = Cell 
     Cell.ClearContents 
    End If 
    Next Cell 
end sub 
2

你需要「工作表Sheet1」更改爲你的數據是表的名稱。

這看起來通過在E列中的每個單元格(與數據),並且如果它包含劃線移動值翻過到C柱。

Sub MoveDashes() 
    Dim Sheet As Worksheet 
    Dim Index As Long 
    Set Sheet = ThisWorkbook.Worksheets("Sheet1") 
    For Index = 1 To Sheet.Cells(Application.Rows.Count, "E").End(xlUp).Row 
    If InStr(1, Sheet.Cells(Index, "E"), "-") > 0 Then 
     Sheet.Cells(Index, "C") = Sheet.Cells(Index, "E").Value 
     Sheet.Cells(Index, "E").Value = "" 
    End If 
    Next 
End Sub 
+0

我使用了宏而沒有任何事情發生。 – user1013478

+0

是名爲「Sheet1」的工作表嗎?如果不是,則需要相應地調整代碼。 – JimmyPena

+0

如果在問題表單爲活動工作表時正在運行宏,則不需要引用表單。每個循環的A會比for循環更有效。 – aevanko

1

是否必須是宏?高級過濾器如何?

你的號碼在列E.假設他們有一個頭。

E1: Number 

E2: 54525841-1 

E3: 454152 

E4: 1365466 

E5: 1254566-1 

E6: 1452577-1 

在工作表中的獨立區域(假設列G)將以下標準:

G1: Number 

G2: *-* 

你的高級篩選條件是這樣的:

advanced filter criteria

任何與一個「 - 」中,將被複制到列C.

0

你可以做到這一點沒有VBA,但這裏是使用字典對象做一個有效的方法。

Sub MoveNumbersWithDash() 

Application.ScreenUpdating = False 
Dim i As Long, lastRow As Long 
Dim varray As Variant 
Dim dict As Object 
Set dict = CreateObject("scripting.dictionary") 

lastRow = Range("E" & Rows.Count).End(xlUp).Row 
varray = Range("E1:E" & lastRow).Value 

For i = 1 To UBound(varray, 1) 
    If InStr(1, varray(i, 1), "-") <> 0 Then 
     dict.Add i, varray(i, 1) 
    End If 
Next 

Range("C1").Resize(dict.Count).Value = _ 
Application.WorksheetFunction.Transpose(dict.items) 

Application.ScreenUpdating = True 
End Sub 

工作原理: 這裏的主要議題是避免調用到Excel(如每個循環)。這將使該功能快速發展(特別是如果你有成千上萬的行)並且效率更高。首先,我找到E中使用的最後一個單元格,然後將整行轉儲到變量數組中。然後我遍歷每個元素,檢查它是否包含「 - 」,如果它包含,我將它添加到字典對象。 POINT:將條目添加爲ITEM,而不是KEY。這確保我們允許重複。變量I對於每個條目都是唯一的,所以我將它用作關鍵字。然後,我簡單的轉儲細胞的整個陣列「 - 」入列C.

爲什麼字典? 字典對象非常快,並帶有2個非常棒的功能:.Keys和.Items。這些將返回字典中所有鍵或項目的數組,您可以使用Transpose函數將整個值列轉儲到Excel中。超高效。