热门关键字:  总结  实习  工作  报告  打印机
当前位置 :| 首页>设备维护>

EXCEL常见问题五十问题解答

来源: 作者: 时间:2006-10-15 点击:

041.请问如何替换?
有很多条这样的记录:******(212),****(315),*********(658)。如何只保留括号里的数字,*号是汉字。
解答:设数据在A30单元格 =MID(A30,FIND("(",A30)+1,LEN(A30)-FIND("(",A30)-1)
IF 你的数据都是要求记录中最后面的三码数字
可以试着用简单的方式解决 
=RIGHT(A1,3)
又问:我是要合并,你却要拆分!你能告诉我怎样将两列:即“数字列”和“文字列”合并成一列?
解答:试试这个:
Sub Join() '将选择的行几个单元格数值合并到一列的一个单元格
  Application.ScreenUpdating = False
  Application.Calculation = xlCalculationManual
  On Error Resume Next
  Dim iRows As Long, mRow As Long, ir As Long, ic As Long
  iRows = Selection.Rows.Count
  Set lastcell = Cells.SpecialCells(xlLastCell)
  mRow = lastcell.Row
  If mRow < iRows Then iRows = mRow 'not best but better than nothing
  iCols = Selection.Columns.Count
  For ir = 1 To iRows
     newcell = Trim(Selection.Item(ir, 1).value)
     For ic = 2 To iCols
       trimmed = Trim(Selection.Item(ir, ic).value)
       If Len(trimmed) <> 0 Then newcell = newcell & " " & trimmed
       Selection.Item(ir, ic) = ""
     Next ic
     Selection.Item(ir, 1).value = newcell
  Next ir
  Application.Calculation = xlCalculationAutomatic
  Application.ScreenUpdating = True
End Sub

042.求教合并单元格区域的连续读取方法
求教:1、如何选定连续的合并单元格区域;2、如何连续读取合并单元格中的内容。
解答:Public Sub adre()
Dim cell As Range
Dim iRow_dn1 As Integer
iRow_dn1 = [B65536].End(xlUp).Row
Set av1 = Range("B3:B" & iRow_dn1)
    For Each cell In av1
            If cell <> "" Then
            MsgBox cell.Address & " 等於 " & " ※ " & cell & " §"
        End If       
    Next   
End Sub

043.求一公式
sheet1                                             sheet2
            A              B            C                   A             B                 C
1      产品代码    产品名     生产机器名       产品代码    产品名     生产机器名
2      012354      a203         1m炉             225894       nj033              ?
3      214345      b4032       发泡炉           056894       kkl001             ?        
4      225894      nj033        1m炉             214345       b4032             ?
5      056894      kkl001        发泡炉                 
6      124589      lli002         1m炉            

SHEET1是一张源资料表,而SHEET2是一个生产计划表的一部分。
请问:
        我求SHEET2中的A列中产品代码相对应的C列的”生产机器名“。
        这个公式怎么写?
解答:Sheet2的C2格公式为:=VLOOKUP($A2,SHEET1!A:C,3,0)

044.讨论一下取最后一个单词的方法
例如现在在A1中有一句“M. Henry Jackey”,如何用函数将最后的一个单词取出来呢? 当然,我们现在是知道最后的单词是6个字符,可以用Right(A1,6)来计算,但如果最后一个单词的字符数是不定的呢,如果做呢? 请大家试下有几种方法。
解答:方法1、用一列公式填充
=IF(LEFT(RIGHT($A$1,ROW()),1)=CHAR(32),RIGHT($A$1,ROW()-1),“”)
方法2、=MID(A1,FIND("       *",SUBSTITUTE(A1," ","       *",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))+1,LEN(A1)-FIND(" ",A1))
方法3、用自定义函数当然方便,而且简单。
Function xx(n As String) As String
    n = Application.Trim(n)
    lastone = Right(n, Len(n) - InStrRev(n, " "))
    xx = lastone
End Function
方法4、=IF(ISERROR(SEARCH("",TRIM(LEFT(B1)))),RIGHT($A$1,ROW()),"")拖出来的第一个字符就行。
方法5、{=RIGHT(A1,LEN(A1)-MAX((MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)=" ")*ROW(INDIRECT("1:"&LEN(A1)))))}
嫌长就(假定最长100字符)
{=RIGHT(A1,LEN(A1)-MAX((MID(A1,ROW(1:100),1)=" ")*ROW(1:100)))}

045.如何获取工作表中某一列有多少条记录?
因为每一列的的记录都不一样多,所以我想获得每一列各有多少条记录,怎么做?
解答:RecordNumbers=Application.COUNTA(A:A)
或者:Private Sub UserForm_Activate()
x = Sheet1.UsedRange.Rows.Count
x1 = Sheet1.CountA(c4, cx)
也可以:Sub aa()
  MsgBox (Application.CountA(Range("A:A")))
End Sub
还可以:Sub aa()
x = Sheet1.UsedRange.Rows.Count
MsgBox (Application.CountA(Range("c3:cx")))
End Sub
这样也行:用下面的方法可测出任一列使用的行数
a=Sheet1.range("b1").End(xlDown).Row。
总结:
1.Sub aa()
  MsgBox (Application.CountA(Range("C:C")))
End Sub
结果永远都是1或者3,可是实际上记录有600多条
2.
Sub aa()
Worksheets("sheet1").Activate
    Range("c2").Select
    x1 = "=COUNTA(sheet1!C)"
    MsgBox x1
End Sub
这个是看fhj 示例的文件录制成宏改的,不过运行结果永远是 =counta(sheet1!c)
3.
Sub aa()
    x1 = "=COUNTA(sheet1!C)"
    MsgBox x1
end sub
提示和前面的一样。
4.其实已经试了几十种方法了。还是错的。作为公式时,是可以使用。但是却
无法把获得的值赋值给一个变量。除非是先写到一个单元格里,再重新读出来。
不过我觉得太麻烦了。而且写的时候会修改工作表。不是很恰当。

解答:Application.CountA(Range("C:C"))返回除去无值单元格的所有单元格的数量。
Sheet1.range("C1").End(xlDown).Row返回第一次遇到空单元格前的单元格的数量。
(注:当C列有空白单元格时用:
myEndRow=sheets("sheet1").range("C65536").End(xlUp).row)
结论:Sub aa()
x1 = Sheet1.Range("C3").End(xlDown).Row
    MsgBox x1
end sub
这就对了。谢谢各位!
回应:推荐你用
 Columns(1).SpecialCells(xlCellTypeConstants).Count


045.如何禁止输入空格
在Excel中如何通过编辑“有效数据”来禁止录入空格?烦请大侠们费心解答。不胜感激。
解答:有效性公式。=COUNTIF(A1,"* *")=0
(注:COUNTIF(A1,"* *") 在单元格有空格时结果为1,没有空格时结果为0
如希望第一位不能输入空格:countif(a1," *")=0
如希望最后一位不能输入空格:countif(a1,"* ")=0)

046.如何判断单元格中单词的数量?
比如我在A1中输入“you are a good boy”如何判断单词为5个?
解答:=LEN(E12)-LEN(SUBSTITUTE(E12," ",""))+1
(注:方法很巧妙 用trim把前后的空格去掉。如果有标点符号或者两个词之间的空格数大于1个就不好办了)

047.如何取数
表一有数据,要求表二中数据为取一行表一数据,空一行。
解答:
Sub test()
On Error Resume Next
Application.ScreenUpdating = False
For i = 1 To Sheets(1).UsedRange.Rows.Count
  Sheets(1).Rows(VBA.Trim(VBA.Str(i)) + ":" + VBA.Trim(VBA.Str(i))).Copy
  Sheets(2).Activate
  Sheets(2).Rows(VBA.Trim(VBA.Str(i * 2 - 1)) + ":" + VBA.Trim(VBA.Str(i * 2 - 1))).Select
  ActiveSheet.Paste
Next i
Application.ScreenUpdating = True
End Sub

048.如何通过VBA编程将符合条件的数据库记录输入到EXCEL中
现在有access格式的数据表 TEST

货号                   货名                    规格                  单价....

1-01                 货品1                   1M                  250.00

1-02                 货品2                   4Kg                 100.00

................

N-99               货品N                   999                 999.99

现在我想在EXCEL的单元格中输入货号,通过VBA代码自动从数据表中查找出相应的记录,并在相邻的列分别自动录入货品、规格、单价等内容,从而实现EXCEL自动数据录入。请问这VBA代码应如何写?谢谢!

解答:Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rs As New ADODB.Recordset
Dim Query As String
Dim Cnn As String
With Application
    .ScreenUpdating = False
    .EnableEvents = False
End With
Cnn = "Driver=Microsoft Access Driver (*.mdb);DBQ=C:\*.mdb"
Query = "SELECT * FROM TEXT WHERE 货号='" & Target & "'"
With Rs
    .Open Query, Cnn, adOpenStatic, adLockReadOnly
    If .RecordCount = 0 Then
    MsgBox "没有此货号!"
         Target.ClearContents
    Else
        Target.CopyFromRecordset Rs
    End If
   .Close
End With
With Application
    .ScreenUpdating = True
    .EnableEvents = True
End With
End Sub

049.如何统计一个单元格中的数字有几位数?
解答1:=LEN(单元格地址)
又问:如果中间有汉字或者是字母、符号呢,或是数者都有呢?
解答2:=SUM(LEN(A1)-LEN(SUBSTITUTE(A1,{"0","1","2","3","4","5","6","7","8","9"},"")))
解答3:=2*LEN(A1)-LENB(A1)
(备注:對 中文 + 數字 是很好的做法,但有英文字 或 中文 + 數字 + 英文 就出錯)

050.如何選取列內不重複資料
解答1:Sub ff()
Dim aa As New Collection
cc = 2
On Error Resume Next
Do Until Cells(3, cc) = ""
   aa.Add Cells(3, cc).value, Cells(3, cc).Text
   cc = cc + 1
Loop
On Error GoTo 0
cc = 2
For Each itm In aa
   Cells(5, cc) = itm
   cc = cc + 1
Next
End Sub
解答2:提供一個以陣列方法為思考模式的方法
Sub ff()
On Error Resume Next
   cc = 2
   Set NoDupes = CreateObject("Scripting.Dictionary")
   Do Until Cells(3, cc) = ""
           NoDupes.Add Cells(3, cc).value, Cells(3, cc).value
       cc = cc + 1
   Loop
   Range("B6").Resize(1, UBound(NoDupes.keys) + 1) = NoDupes.keys        '陣列由0開始,所以+1
End Sub

上一页 1 2 3 4 5下一页
最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
赞助商链接