2015-06-21 37 views
-1

我希望有人可以帮助我一个宏在Excel中的一些文本操作。Excel来改变选择的内容

问:

如何更改选定的单元格(乃至列/行)的使用宏的内容?宏应该怎么样?

有迹象表明,我期待在这个过程中遵循一些规则:

  • 让我们假定我们在单元格A1-A5以下内容:

    A1:一些文字,嘧菌酯

    A2:其他一些文字,Kvfr

    A3:随机文本,MOT

    A4:文本文字,文本,LPK

    A5:任何其他随机文本,KKJ

- >选择所述单元A1-A5或甚至整个列A,然后运行宏后,将结果应该是:

A1: Azx some text 

A2: Kvfr Some OtHer text 

A3: Mot Random TEXT 

A4: Lpk Text text, text 

A5: Kkj Any other random text 

基本上我必须采取像", aZx"; ", Kvfr"; ",mot"; ", LPK"; ",KKj",将它们转换为"Azx"; "Kvfr"; "Mot"; "Lpk"; "Kkj",然后将它们移动到该单元格中的整个文本的前面。

这些字母组可以在宏中硬编码。


我的第一个想法是把所有我感兴趣的阵列,像这样的表述:

Dim basicExpr(1 To 5) As String 
basicExpr(1) = ", aZx" 
basicExpr(2) = ", Kvfr" 
basicExpr(3) = ",mot" 
basicExpr(4) = ", LPK" 
basicExpr(5) = ",KKj" 

Dim replaceExpr(1 To 5) As String 
replaceExpr(1) = "Azx " 
replaceExpr(2) = "Kvfr " 
replaceExpr(3) = "Mot " 
replaceExpr(4) = "Lpk " 
replaceExpr(5) = "Kkj " 

然后我想遍历所有选定的单元格,并从basicExpr检查值(还要检查该值是否在字符串的末尾)并相应地处理单元格。

Set cellRange = Application.Selection 
For Each Cell In cellRange 

在这一点上我坚持,因为我不知道如何与instrrev从最后一个逗号选择到字符串的结尾,则标题情况下,并将其移动到字符串的前面。

+0

所以你想找到最后一个逗号后面的文本,将它移动到字符串的开头,根据标题大小写,并保持字符串的其余部分不变? – GSerg

+0

是的,这是我正在寻找的。 –

+0

然后'instrrev'将会找到最后一个逗号,'strconv'会转换为标题大小写,'for each'将循环遍历'selection.cells'。 – GSerg

回答

0

如果您始终想要移动逗号后找到的文本,则此代码将执行该操作。

Option Explicit 

Public Sub rearrangeTheText() 

Dim cellRange As Range 
Dim cell As Range 
Dim positionFound As Integer 
Dim theWholeText As String 
Dim theSmallPart As String 

Const TEXT_TO_FIND As String = "," 

    Set cellRange = Application.Selection 

    For Each cell In cellRange 
     theWholeText = CStr(cell.Value) 
     ' Look for last TEXT_TO_FIND 
     positionFound = InStrRev(theWholeText, TEXT_TO_FIND, , vbTextCompare) 
     If positionFound > 0 Then 
      ' Get the text that is after TEXT_TO_FIND 
      theSmallPart = Trim$(StrConv(Mid$(theWholeText, positionFound + Len(TEXT_TO_FIND)), vbProperCase)) 
      ' Delete the text and TEXT_TO_FIND from the end 
      theWholeText = Trim$(Mid$(theWholeText, 1, positionFound - 1)) 
      ' Add the text to the front, separated by a space 
      theWholeText = theSmallPart & Space(1) & theWholeText 
      ' Update the cell 
      cell.Value = theWholeText 
     End If 
    Next cell 

End Sub 
0

如何:

=PROPER(RIGHT(A1,3))&" "&LEFT(A1,LEN(A1)-5) 

5是基于与“AZX”末的例子 - 如果此改变,你必须对其进行编辑。没有宏,只是一个单元格中的函数。

+0

因为单元格的内容总是会变化的,所以这5个单元格不会总是存在,同时这个宏单元格需要应用到单元格的选择中 –

+0

因此,在你的例子中,你显示了逗号,然后是空格,然后是3个字符,有兴趣的人。这些5的组合如何变化?长度可以是任何 - 除非你打255我认为... –

+0

这是因为最后我们可以有超过3个字母,它可以是4或5甚至和逗号的位置不会总是这样,也可能有空格,如:“,KvFr”,“,KvfR”或其他组合。 –