一些例子是1000、10:00、0856、08:56、2100和23:56.
如果他们进入1234,则将其更改为12:34。
如果他们进入15:36,请停留为15:36.
输入文本时,将使用该文本更新Excel中的单元格。 Excel中的以下公式给了我我想要的东西,但是我希望从VBA完成此操作,因此我不必在代码中找到该单元格的每个实例并将其更新为其他。
=IF(COUNTIF(B2, "*" & ":" & "*"), B2, REPLACE(B2,LEN(B2)-1,0,":"))
我在VBA中尝试了类似的东西,但是当我尝试输入它时,有红色文本:
'Worksheets("Sheet1").Range("B2").Formula = "=IF(COUNTIF(B2, "*" & ":" & "*"), B2, REPLACE(B2,LEN(B2)-1,0,":"))"
在格式为文本
B
B2
单元)开始,然后继续到最后一个非空行(Singlecolumn
)。I编写了代码,因此您可以轻松地修改每种情况的行为。一旦您弄清楚每种情况到底应该发生什么,就可以改进(提出另一个问题)。
Module1
(VBE-->Insert-->Module
)
单元
Sub CorrectTimeSingleCell()
' Read.
Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
Dim ws As Worksheet: Set ws = wb.Sheets("Sheet1")
Dim cell As Range: Set cell = ws.Range("B2")
Dim rStr As String: rStr = CStr(cell.Value)
' Modify.
If InStr(rStr, ":") = 0 Then ' doesn't contain a colon
Select Case Len(rStr)
Case 0
rStr = "00:00"
Case 1
rStr = "00:0" & rStr
Case 2
rStr = "00:" & rStr
Case 3
rStr = "0" & Left(rStr, 1) & ":" & Right(rStr, 2)
Case 4
rStr = Left(rStr, 2) & ":" & Right(rStr, 2)
Case Else
rStr = Mid(rStr, 1, Len(rStr) - 2) & ":" & Right(rStr, 2)
End Select
Else ' contains a colon
' do nothing?
End If
' Write.
cell.Value = rStr
' Inform.
MsgBox "Time corrected.", vbInformation
End Sub
单列
Sub CorrectTime()
' Define constants.
Const TOP_CELL_ADDRESS As String = "B2"
' Read.
Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
Dim ws As Worksheet: Set ws = wb.Sheets("Sheet1")
Dim rg As Range, RowsCount As Long
With ws.Range(TOP_CELL_ADDRESS)
RowsCount = ws.Cells(ws.Rows.Count, .Column).End(xlUp).Row - .Row + 1
If RowsCount < 1 Then Exit Sub ' no data
Set rg = .Resize(RowsCount)
End With
Dim Data() As Variant
If RowsCount = 1 Then
ReDim Data(1 To 1, 1 To 1): Data(1, 1) = rg.Value
Else
Data = rg.Value
End If
' Modify.
Dim r As Long, rStr As String
For r = 1 To RowsCount
rStr = CStr(Data(r, 1))
If InStr(rStr, ":") = 0 Then ' doesn't contain a colon
Select Case Len(rStr)
Case 0
rStr = "00:00"
Case 1
rStr = "00:0" & rStr
Case 2
rStr = "00:" & rStr
Case 3
rStr = "0" & Left(rStr, 1) & ":" & Right(rStr, 2)
Case 4
rStr = Left(rStr, 2) & ":" & Right(rStr, 2)
Case Else
rStr = Mid(rStr, 1, Len(rStr) - 2) & ":" & Right(rStr, 2)
End Select
Data(r, 1) = rStr
Else ' contains a colon
' do nothing!?
End If
Next r
' Write.
rg.Value = Data
' Inform.
MsgBox "Times corrected.", vbInformation
End Sub
公式中间的引号是问题。 要出现在公式中的引号,您需要使用一对(“”)。 您在VBA中输入的公式也将在单元格B2上创建一个圆形参考。 如果您在单元格中输入的公式会给您想要的结果,请尝试:
Worksheets("Sheet1").Range("A2").Formula = "=IF(COUNTIF(B2,""*"" & "":"" & ""*""), B2, REPLACE(B2,LEN(B2)-1,0,"":""))"