如何利用excel单元格中的每个单词?

时间:2013-03-18 08:23:53

标签: excel excel-vba excel-formula vba

我有大约15k行,每行有3列,类似于以下结构。

  

ID标题说明
  0简短标题关于本专栏的一些长篇描述

我想将Title列中的每个单词都大写,以便显示为:
A Short Title

有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:3)

=PROPER(B2)

公式可以将字符串中每个单词的每个第1个字符大写。

编辑:如果您想手动执行此操作,请在列中复制公式以执行此操作 您可以转到包含公式的单元格。在右下角,当您将鼠标悬停在单元格上时会看到一个+号 - 当您看到它时双击右下角。

这会将公式复制到当前行下面的行,直到它发现前面的列中有数据。

EDIT2:使用代码

Option Explicit
Sub ChangeAllCellsInThisColumnToProperCase(ByVal StartCell As Range)
Dim LastCell As Range
Set LastCell = StartCell.End(xlDown)

Dim data
Dim RangeToCover As Range

Set RangeToCover = Range(StartCell.Address & ":" & LastCell.Address)
data = RangeToCover.Value

Dim CountOfCells As Long
CountOfCells = RangeToCover.Cells.Count

Dim Counter, element
For Counter = 1 To CountOfCells
    element = data(Counter, 1)
    element = WorksheetFunction.Proper(element)
    data(Counter, 1) = element
Next

Range(StartCell.Address & ":" & LastCell.Address).Value = data
End Sub

EDIT3:手动完成(@ mehow评论后) - 在另一个空栏中输入公式(比如F栏),在B2上做一个合适的案例 - 复制公式,选择要应用此公式的其余单元格 - 选择性粘贴 - >公式
- 复制F
的列内容 - 转到B列的第一个单元格,Do a Paste Special - >值。

答案 1 :(得分:1)

要在单个列上快速运行,您可以使用变量数组

对于B栏:

Sub QuickUpdate()
Dim X()
Dim lngRow As Long
X = Range([b1], Cells(Rows.Count, "B").End(xlUp)).Value2
For lngRow = 1 To UBound(X, 1)
    X(lngRow, 1) = Application.Proper(X(lngRow, 1))
Next lngRow
[B1].Resize(UBound(X, 1), UBound(X, 2)).Value2 = X
End Sub