如何将excel单元格中的每个单词大写?

如何将excel单元格中的每个单词大写?,excel,excel-formula,vba,Excel,Excel Formula,Vba,我有大约15k行,每行有3列,类似于下面的结构 ID标题说明 0有关此列的简短标题和详细说明 我想将标题列中的每个单词大写,使其显示为: 短标题 有没有办法做到这一点 =PROPER(B2) 该公式可以将字符串中每个单词的第一个字符大写 编辑:如果要手动执行此操作,请跨列复制公式以执行此操作。 您可以转到包含公式的单元格。在右下角,当您将鼠标悬停在单元格上时,您将看到一个+符号-当您看到该符号时,双击右下角 这将把公式复制到当前公式下面的行中,直到它发现前面的列中有数据为止 EDIT2:使用代

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

ID标题说明
0有关此列的简短标题和详细说明

我想将
标题
列中的每个单词大写,使其显示为:
短标题

有没有办法做到这一点

=PROPER(B2)
该公式可以将字符串中每个单词的第一个字符大写

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

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

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列的第一个单元格,执行粘贴特殊->值

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

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

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

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列的第一个单元格,进行特殊粘贴->值。

要在单个列上快速运行此操作,可以使用变体数组

对于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

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

对于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

谢谢,就这样。但是你能解释一下如何把它应用到我所有的行吗?啊,刚刚找到了。再次感谢。因为B列中有值,所以他不能在实际列中使用这个公式,因为如果他试图插入它,它会删除他的值。所以,我不明白为什么这是最好的答案lol@mehow你说得对。我不知道是什么让OP选择这个作为答案。谢谢,就这样。但是你能解释一下如何把它应用到我所有的行吗?啊,刚刚找到了。再次感谢。因为B列中有值,所以他不能在实际列中使用这个公式,因为如果他试图插入它,它会删除他的值。所以,我不明白为什么这是最好的答案lol@mehow你说得对。我不知道是什么让OP选择这个作为答案。