使用十进制分隔符将时间转换为军用时间并复制到不同的工作表(VBA)

使用十进制分隔符将时间转换为军用时间并复制到不同的工作表(VBA),vba,excel,Vba,Excel,我必须输入大量的循环时间,并且必须使用“:”中间非常糟糕。此信息正在minitab中使用,因此输入的格式非常糟糕。我必须穿过sheet1上的26列才能输入16个数据单元。我没有每次都滚动,而是在一个列中创建了一个单独的表(2),其中包含16个单元格的数据,因此我只能在numberpad上输入数据。格式为hh.mm。然后,宏将“.”替换为“:”,并将其复制到相应位置的sheet1中。其他一切正常,但当输入hh.m0时,它将转换为hh.0m ex(运行宏后15.30变为15:03),但在宏后15.3

我必须输入大量的循环时间,并且必须使用“:”中间非常糟糕。此信息正在minitab中使用,因此输入的格式非常糟糕。我必须穿过sheet1上的26列才能输入16个数据单元。我没有每次都滚动,而是在一个列中创建了一个单独的表(2),其中包含16个单元格的数据,因此我只能在numberpad上输入数据。格式为hh.mm。然后,宏将“.”替换为“:”,并将其复制到相应位置的sheet1中。其他一切正常,但当输入hh.m0时,它将转换为hh.0m ex(运行宏后15.30变为15:03),但在宏后15.34变为15:34。如果没有零,代码工作正常。下面是大部分代码。pm和am工作正常,但填写的人没有把am和pm写在表格上,所以我们现在使用的是军事。我对完全不同的代码持开放态度,但这是我所能想到的

多谢各位

Set w1 = Sheets("Data Collection Sheet").Cells
Set w2 = Sheets("Sheet1").Cells

For x = 8 To 15
Cells(x, 2).Activate
Cells(x, 2).Replace what:=".", replacement:=":"
'Cells(x, 2).Replace what:="p", replacement:=" pm"
'Cells(x, 2).Replace what:="o", replacement:=" am"


Next x 
w1(9, 3).Value = w2(9, 2).Value
'  I go on to make other cells the same value but this should give an idea

尝试使用TimeValue函数:

a = TimeValue("15.30")
如果遇到“15.3”,可以在TimeValue语句之前检查并更改:

a = 15.3 'the initial value
b = a - Int(a) 'b = the fractional part
c = (b * 10) - Int(b * 10) 'c = the 2nd digit out of
'the fractional part

If c > 0 Then 'something like mm.d has been
'put in instead of mm.dd

使用代码的替代方法是使用公式:

=时间(INT(A1)、(A1-INT(A1))*100,0)

小数点左边的数字表示小时。小数点和后面的任何内容都会给出分钟数,然后将分钟数乘以100得到整数值。秒=0


我认为会议记录给了你一个问题,因为排除了小数点
0.03
将为您提供
03
,然后变成
3
0.30
还将为您提供
3
,因为
0.3=0.30=0.300=0.30000
,依此类推。

我尝试了此代码,但无效。输入a=timevalue(“15.30”)可以工作,但它不够灵活,因为字符串a=timevalue(单元格(1,2))单元格(2,2)。Value=a您的解决方案可以工作。非常感谢你。但在我的宏中,15.3或15.30会变成15:03。我不明白为什么。哦,很高兴它成功了!至于宏,它需要一种方法来知道它应该是3还是30。例如,它如何知道您是否希望值为30而不是300?请记住,0.30与0.300是相同的数字。在公式中,这是通过包含小数点并将其乘以100来处理的。如果你需要300,你会乘以1000。亚伦用了同样的逻辑。此外,我喜欢他使用INT,所以我也编辑了我的公式来使用它,因为它也可以在工作表函数中使用,这是一种更简单的方法。亲爱的,你编辑的版本解决了我刚刚发现的另一个问题。h、 00给出了一个错误(可能是因为小数点消失了)。但编辑后的版本输出正确的时间。谢谢Nethy和Aaron