2012-03-17 124 views
4

以下是VBA代码。 Sheet2包含通用格式的所有值。运行代码后,Sheet3的“C”列中的值包含13位或更多位数的指数值。如何在Excel工作表中将列格式设置为数字格式?

应该如何处理以使Sheet3的'C'列不包含指数值?

private Sub CommandButton1_Click() 
Dim i, j, k As Variant 

k = 1 
For i = 1 To 30000 
If Sheet2.Range("c" & i).Value >= 100 And Sheet2.Range("c" & i).Value < 1000 Then 
Sheet3.Range("a" & k).Value = Sheet2.Range("a" & i).Value 
Sheet3.Range("b" & k).Value = Sheet2.Range("b" & i).Value 

Sheet3.Range("c" & k).Value = Sheet2.Range("c" & i).Value 

k = k + 1 
End If 
Next 

End Sub 
+0

请详细解释一下。你只是想在特定列中格式化数字或什么? – elrado 2012-03-17 17:55:54

+0

是想格式化只需要的列 – Punith 2012-03-17 18:04:03

+0

我没有看到这在13,而是在第15位。你想要显示结果还是数学运算?是保存为文本字符串并转换为值使用它可能? – datatoo 2012-03-17 21:11:35

回答

20

这会将列A格式化为文本,B作为常规格式,C作为数字格式。

Sub formatColumns() 
Columns(1).NumberFormat = "@" 
Columns(2).NumberFormat = "General" 
Columns(3).NumberFormat = "0" 
End Sub 
+0

我试图通过Workbooks(“B.xlsm”)在特定工作簿中为特定工作表执行此操作ActiveSheet.Columns(“1”)。NumberFormat =“0 “'这似乎并不适合我。有任何想法吗? – user248884 2017-10-05 23:12:20

1

如果你的13位“一把手”是真的文字,那是你不打算做任何数学,你可以用单引号

Sheet3.Range("c" & k).Value = "'" & Sheet2.Range("c" & i).Value 

它前面,但我不看不到怎样一个13位数字将永远得到过去的if语句,因为它总是会大于1000这里有一个替代版本

Sub CommandClick() 

    Dim rCell As Range 
    Dim rNext As Range 

    For Each rCell In Sheet2.Range("C1:C30000").Cells 
     If rCell.Value >= 100 And rCell.Value < 1000 Then 
      Set rNext = Sheet3.Cells(Sheet3.Rows.Count, 1).End(xlUp).Offset(1, 0) 
      rNext.Resize(1, 3).Value = rCell.Offset(0, -2).Resize(1, 3).Value 
     End If 
    Next rCell 

End Sub 
0

对不起碰到一个老问题,但答案是数字符单元格的长度而不是它的值。

CellCount = Cells(Row, 10).Value 
If Len(CellCount) <= "13" Then 
'do something 
End If 

希望有帮助。干杯

相关问题