Office中国论坛/Access中国论坛

标题: 做了一个EXCEL宏,请帮助看看,谢谢 [打印本页]

作者: yanwei82123300    时间: 2016-5-6 14:45
标题: 做了一个EXCEL宏,请帮助看看,谢谢
做了一个EXCEL宏,目的是将数据的某一列列的格式设置成"000"三位,请帮助看看,谢谢
但是有一个问题就是数据的行数不固定,同时具体是哪一列需要进行选取,请问如何使宏可以自动判断数据的行数,然后再次进行格式的设置,谢谢

Sub format_text()
'
' format_text Macro
'
'
Columns("C:C").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "=RIGHT(""000""&RC[-1],3)"
    Range("B1").Select
    Selection.AutoFill Destination:=Range("B1:B500")
    Range("B1:B500").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub


作者: roych    时间: 2016-5-6 14:55
有个玩意儿叫usedrange.row,或者range("B1").end(xldown).row都可以判断行标(也可以改为rows来判断行数)
不过需要注意的是,这些都是读取连续单元格的。
如果是不连续单元格(即区域内有空值),应该用内置函数counta来判断,例如:application.WorksheetFunction.counta(sheet1.range("B:B"))即可统计非空行数。
作者: 盗梦    时间: 2016-5-6 14:55
Selection.NumberFormatLocal = "000"
作者: yanwei82123300    时间: 2016-5-6 15:03
请大家看看例子,绿色的部分想设置成“000”三位,谢谢
作者: yanwei82123300    时间: 2016-5-6 15:22
我修改了一下宏代码,目前不会如何界定行数,还有如何需求某一列进行格式设定,请大家帮助看看谢谢了
Sub format000()
Columns("C:C").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("C2").Select
    ActiveCell.FormulaR1C1 = "=RIGHT(""000""&RC[-1],3)"
    Range("C2").Select
End Sub
    Selection.AutoFill Destination:=Range("C2:C131")
    Range("C2:C131").Select
作者: yanwei82123300    时间: 2016-5-6 15:22
我修改了一下宏代码,目前不会如何界定行数,还有如何需求某一列进行格式设定,请大家帮助看看谢谢了
Sub format000()
Columns("C:C").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("C2").Select
    ActiveCell.FormulaR1C1 = "=RIGHT(""000""&RC[-1],3)"
    Range("C2").Select
End Sub
    Selection.AutoFill Destination:=Range("C2:C131")
    Range("C2:C131").Select
End Sub
作者: roych    时间: 2016-5-6 16:02
  1. Sub getFormat()
  2.     Dim i As Long
  3.     Application.ScreenUpdating = False
  4.     For i = 2 To Sheet1.Range("A1").End(xlDown).Row
  5.         With Sheet1.Range("B" & i)
  6.             .Interior.Color = RGB(0, 192, 0)
  7.             .NumberFormat = "000"
  8.         End With
  9.     Next
  10.     Application.ScreenUpdating = True
  11. End Sub
复制代码

作者: yanwei82123300    时间: 2016-5-6 16:44
刚刚是了,死机了,不知什么原因?xx
作者: ly    时间: 2016-5-7 07:13
yanwei82123300 发表于 2016-5-6 15:03
请大家看看例子,绿色的部分想设置成“000”三位,谢谢

Sub FormatRng()
ActiveSheet.Range("B2", Cells(Rows.Count, 2).End(xlUp)).NumberFormat = "000"
End Sub


作者: yanwei82123300    时间: 2016-5-7 07:51
谢谢,大家的帮助!但是数据导入到access中还是不准确不是000三位的!在EXCEL中显示是三位,但是excel中显示还是原来的样子,请大家看看
作者: roych    时间: 2016-5-7 08:56
yanwei82123300 发表于 2016-5-7 07:51
谢谢,大家的帮助!但是数据导入到access中还是不准确不是000三位的!在EXCEL中显示是三位,但是excel中显 ...

那个就不是显示格式的了。前面的都是用类似于单元格格式的写法的。应该修改单元格的值才能实现。
作者: ly    时间: 2016-5-7 15:48
yanwei82123300 发表于 2016-5-7 07:51
谢谢,大家的帮助!但是数据导入到access中还是不准确不是000三位的!在EXCEL中显示是三位,但是excel中显 ...

在excel中,可以用文本格式来表示,但一定不是数值了

  1. Sub FormatRng()
  2. ActiveSheet.Range("B2", Cells(Rows.Count, 2).End(xlUp)).Select
  3.         For Each cell In Selection.Cells
  4.             cell.Value = Format(cell, "'000")
  5.         Next
  6. End Sub
复制代码

作者: yanwei82123300    时间: 2016-5-9 08:18
ly 发表于 2016-5-7 15:48
在excel中,可以用文本格式来表示,但一定不是数值了

谢谢帮助




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3