乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      excel vba常見(jiàn)問(wèn)題解答

       昵稱1904906 2010-06-26
      excel vba常見(jiàn)問(wèn)題
      --------引用
       

      001。用命令按扭打印一個(gè)sheet1中B2:M30區(qū)域中的內(nèi)容?
      我想在Sheet2中制件一個(gè)命令按扭, 打印表Sheet1中的[B2:M30] 區(qū)域中的內(nèi)容?
      解答:可以將打印區(qū)域設(shè)為b2:m30,然后打印,如:
      sheets("sheet1").printarea="b2:m30"
      sheets("sheet1").printout
      隨手寫(xiě)的,你可以試試看。最簡(jiǎn)單的方法是:你先 錄制宏,在錄制宏過(guò)程中, 跑到頁(yè)面設(shè)置里面, 把打印范圍設(shè)置到你想要的范圍。
      然后退出,停止錄制宏, 你就可以得到一些代碼!

      002。能否對(duì)一列中的文字統(tǒng)一去掉最后一個(gè)字?這些文字不統(tǒng)一,有些字?jǐn)?shù)多,有些字?jǐn)?shù)少。如何處理?我用{"&-}不行
      解答:=REPLACE(A1,LEN(A1),1," ")(在過(guò)渡列進(jìn)行)

      003.能否根據(jù)單元格數(shù)值自動(dòng)標(biāo)記序號(hào)?
      各位大佬,一工作表有兩列,“序號(hào)”及“金額”,能否將金額不等于0的行自動(dòng)標(biāo)上序號(hào)呢?如無(wú)現(xiàn)成的函數(shù),應(yīng)怎樣設(shè)置?
      解答:Dim xuhao As Integer
      xuhao = 1
      Range("b2").Select
      Do While Selection <> ""
        If Selection <> 0 Then
        ActiveCell.Previous.Value = xuhao
        xuhao = xuhao + 1
        End If
        ActiveCell.Offset(1, 0).Range("a1").Select
      Loop

      004.求教自定義函數(shù)
      查詢了一些自定義函數(shù)的例子都是單變量的。自定義函數(shù)能否建立“(As Range) As Interger”的函數(shù),應(yīng)該可以的,請(qǐng)各位大師賜教!請(qǐng)以“∑x2”為例,萬(wàn)分感謝!(該用"For Each ...Next",就是還不知道如何引用Range中的每個(gè)值,請(qǐng)高手指點(diǎn)。)
      解答:參數(shù)使用Range而函數(shù)值為Integer是可以的
      用for each next循環(huán)思路也是對(duì)的,應(yīng)該這樣作:
      dim rg as range
      dim ivalue as integer
      for each rg in 參數(shù)區(qū)域
      ivalue=ivalue+rg.value
      next
      函數(shù)=ivalue
      大概意思如此,但沒(méi)有加入防錯(cuò)處理,你自己先試試看,有問(wèn)題在問(wèn)。
      又問(wèn):試了一天,還是不行。
      Public Function x2(rng As Range) As Integer
      Dim rng As Range
      Dim ivalue As Integer
      For Each rng In rng.Range
      ivalue = ivalue + rng.value ^ 2
      Next
      x2 = ivalue
      End Function
      還望您的幫助。
      解答:Public Function SUMX2(rng As Range) As Integer
          '你的錯(cuò)誤有幾項(xiàng):
          '1.函數(shù)名不能使用單元格位址的形式,否則在工作表中引用函數(shù)產(chǎn)生歧義,excel以為你引用單元格
          '2.參數(shù)名與內(nèi)部變量名沖突,rng本來(lái)是定義參數(shù),在過(guò)程中不應(yīng)出現(xiàn)重名變量
          '3.rng已被定義為range對(duì)象變量,實(shí)際意義是一range引用,不能再用rng.Range引用,range的range屬性是什么呢,沒(méi)有吧
          '函數(shù)我已經(jīng)給你改了,基本能用
          Dim rg As Range
          Dim ivalue As Integer
              For Each rg In rng
                  ivalue = ivalue + rg.value ^ 2
              Next
          SUMX2 = ivalue
      End Function
      結(jié)果:調(diào)試成功!,非常感謝!

      005.判斷字符串的包含性
      用什么命 令“abcdefg”是否包含“abc”?
      解答:If VBA.InStr(1, "abcdefg", "abc") <> 0 Then MsgBox "包含"

      006.利用背景實(shí)現(xiàn)套打的解決方案
      利用背景套打主要在于數(shù)據(jù)打印位置的確定,關(guān)鍵就是要使圖片和實(shí)物之間的尺寸保持一致,這里我引入一個(gè)中間參照物—空白表(只有表格線的表)。具體操作以套打支票為例說(shuō)明:
                (1)將支票掃描成圖片。
                (2)打印一個(gè)空白表,使其與支票尺寸一致(需反復(fù)調(diào)整打印,也可行、列分別打印)。
                (3)用“畫(huà)圖”的縮放功能調(diào)整圖片大小,導(dǎo)入excel作背景,并使其與空白表大小一致(亦需反復(fù)調(diào)整導(dǎo)入,每次均用原圖縮放,再另存為一個(gè)文件)。
                (4)根據(jù)圖片背景調(diào)整好單元格,填入數(shù)據(jù)后套打支票,效果是匹配度達(dá)99%。
                (5)由于每次都是用原圖縮放,故可取得縮放比例作為參數(shù),再套打其他表格時(shí),即可直接依參數(shù)縮放圖片。
                思路:因?yàn)榭瞻妆?支票,圖片=空白表,所以圖片=支票。
                該方案已證實(shí)可行。

      007.宏放在worksheet和sheet及模塊中各有什么區(qū)別?
      解答:放在thisworkbook或sheet中的宏與模塊中的宏的主要區(qū)別是book或sheet中的過(guò)程函數(shù)只能是對(duì)象所專有的,不能在對(duì)象之外的任何地方調(diào)用(很顯然不能聲明Public過(guò)程,否則編譯報(bào)錯(cuò)),而模塊中聲明Public過(guò)程函數(shù)可以在任何地方使用。

      008.關(guān)于excel問(wèn)題
      在excel中如何用公式實(shí)現(xiàn)單元格內(nèi)容遞增?
      如:    AB12
                AB13
                AB14
                .......
                AB100
      條件是無(wú)法確定儲(chǔ)存格中的內(nèi)容的前面有多少個(gè)字符,也就是,可能是2個(gè),也可能是3個(gè),或者更多。
      解答:為什麼要用公式呢?
      如 A1 = AB12 ,只要你向下拉的複制就可以。

      公式可參考 (條件是 AB12 不可以是 AB02, 處理 0 為首的數(shù)字 有困難,亦不可以只有英文字)
      A1 = AB12
      A2 = LEFT(A1,LEN(A1)-SUM(LEN(A1)-LEN(SUBSTITUTE(A1,{"0","1","2","3","4","5","6","7","8","9"},"")))) & RIGHT(A1,SUM(LEN(A1)-LEN(SUBSTITUTE(A1,{"0","1","2","3","4","5","6","7","8","9"},""))))+1
      (A1 = AB12

      公式
      =LEN(SUBSTITUTE(A1,{"0","1","2","3","4","5","6","7","8","9"},""))
      答案看到的是 4 ,但其實(shí)它回傳一個(gè)數(shù)組 {4,3,3,4,4,4,4,4,4,4}

      公式
      =LEN(A1)-LEN(SUBSTITUTE(A1,{"0","1","2","3","4","5","6","7","8","9"},""))
      答案看到的是 0 ,但其實(shí)它回傳一個(gè)數(shù)組 {0,1,1,0,0,0,0,0,0,0}

      公式
      =SUM(LEN(A1)-LEN(SUBSTITUTE(A1,{"0","1","2","3","4","5","6","7","8","9"},""))) 是將 {0,1,1,0,0,0,0,0,0,0} 加總
      = 2)

      009.給數(shù)組公式、VBA愛(ài)好者潑點(diǎn)冷水。
      數(shù)組公式、VBA威力巨大,在某些情形下提高效率非常明顯,但各有其弱點(diǎn)。數(shù)組公式在大數(shù)據(jù)的時(shí)候,運(yùn)行速度慢得無(wú)法忍受。比如,我日常需要編制得幾個(gè)報(bào)表,原始數(shù)據(jù)有4-8萬(wàn)行,20——30列,用數(shù)組根本無(wú)法操作。倒是利用數(shù)據(jù)透視表及其他一些組合功能,可謂神速。而VBA主要適用與日常比較固定的一些工作,對(duì)于一些臨時(shí)性工作而言,缺乏靈活性,有殺雞用牛刀之嫌疑。因此,根據(jù)我個(gè)人多年工作經(jīng)驗(yàn)的體會(huì),能熟練地靈活運(yùn)用EXCEL基本功能和常用函數(shù),就可以高效地完成大部分日常工作。
      我比較常用地東西有:數(shù)據(jù)透視表,數(shù)據(jù)——有效性,ctrl+enter,index ,match,indirect,offset,if,vlookup,下拉列表框,絕對(duì)引用與相對(duì)引用,編輯——選擇性粘貼(數(shù)值、乘除、轉(zhuǎn)置等),圖表,條件格式,定義名稱,分列,填充等。
      相反觀點(diǎn):數(shù)據(jù)透視表的計(jì)算是excel中內(nèi)置的,同樣的計(jì)算次數(shù)速度與數(shù)組公式是一樣的,數(shù)組公式計(jì)算慢有兩個(gè)因素,一是公式的編寫(xiě)不合理,另一個(gè)主要的原因是數(shù)組公式要對(duì)所有的引用數(shù)據(jù)進(jìn)行計(jì)算,不管這些數(shù)據(jù)是否有效。
      VBA應(yīng)該是最靈活的,在VBA中結(jié)合數(shù)組公式是可以達(dá)到最佳目的的,可用VBA先分析出數(shù)組公式要用的有效引用區(qū)域,在輔助表中進(jìn)行數(shù)組計(jì)算(這個(gè)速度比用VBA直接分析計(jì)算要快得多),再將結(jié)果記入需要的單元格中,然后刪除輔助表。
      其實(shí)你說(shuō)的那些基本操作均可用VBA來(lái)做的,速度比手工做要快。


      010.從式子抽取一小式子的問(wèn)題?
      b1=sum(a1:a10)+(10+20)/4,怎么從中取出(10+20)/4或其結(jié)果(即5)?用evaluate、get.cell都不能取出。
      解答:定義X=get.formula($B$1)得到B1的公式,再用MID、Right等函數(shù)截取

      011.or可以用數(shù)組應(yīng)用?
      有一個(gè)工作表,數(shù)據(jù)上萬(wàn)行,其中一列是我要分析的數(shù)值,數(shù)值比如為:0111,0112,0113,0114,0115,0116,0117中的任何一個(gè)。我要統(tǒng)計(jì)除0111,0113,0115之外的數(shù)據(jù)。公式:{sum(if(or(sheet!A2:A1111="0111",sheet!a2:a1111="0113",sheet!a2:a1111="0115"),1,0))},可是統(tǒng)計(jì)數(shù)字和我篩選相加的不一樣,用if層層選,可以。請(qǐng)問(wèn)原因?
      解答:數(shù)組公式中用*、+代替AND、OR
      {sum(if((sheet!A2:A1111="0111")+(sheet!a2:a1111="0113")+(sheet!a2:a1111="0115"),1,0))}

      012.countif表達(dá)式的格式
      請(qǐng)問(wèn):我想找A1:A15中,值不為空的數(shù)目,用countif命令怎么寫(xiě)呢?
      解答1:應(yīng)為counta(a1:a15)。countif為找a1:a15中,特定值的數(shù)目。
      解答2:=ROWS(A1:A15)*COLUMNS(A1:A15)-COUNTIF(A1:A15,"")
      =ROWS(A1:A15)*COLUMNS(A1:A15)-COUNTBLANK(A1:A15)
      解答3:直接用count(a1:a15)不是更好嗎!

      013.刪除字符串中某個(gè)字符的函數(shù)是什么?刪除字符串中某個(gè)字符的函數(shù)是什么?
      舉例:字符串“i love you a!"想刪除a字面,應(yīng)該用什么函數(shù)實(shí)現(xiàn)?還有就是在字符串中某個(gè)位置加入某個(gè)字符用什么函數(shù)呢?
      解答:如果有一定的規(guī)律,可以用Replace函數(shù)。例如:在A1單元格已有的字符串”123467"中加入個(gè)5變?yōu)?#8220;1234567”??梢赃@樣做:=replace(a1,5,,"5")
      另一方法:用CONCATENATE函數(shù)。
      例如:a5單元格里的數(shù)據(jù)是“asdfhjkl",在另外的單元格了輸入下面的函數(shù)
      CONCATENATE(LEFT(A5,4),"l",RIGHT(A5,4)),得到的結(jié)果就是”asdflhjkl",然后用“選擇性粘貼,粘貼數(shù)值”粘貼回a5單元格就可以了。

      014.兩表合一實(shí)例
          問(wèn)題提出:怎樣把兩個(gè)表(有相同的字段)怎樣合并成一個(gè)表?
           思路:用CountIf()函數(shù)對(duì)表1進(jìn)行判斷,如果其值為0,則表示沒(méi)以重復(fù),再將表2中和表1不重復(fù)的數(shù)據(jù)復(fù)制到表1中,從而實(shí)現(xiàn)兩表合一。
      解題的方法:
      Sub dd()
      b = Sheets(2).[a1].CurrentRegion.Rows.Count + 1
      ‘判斷表2的行數(shù)
      For i = 3 To b
      a = Sheets(1).[a1].CurrentRegion.Rows.Count + 1 
      ‘判斷表1的行數(shù)
      c = Sheets(2).[a1].CurrentRegion.Columns.Count  
      ‘判斷表2的列數(shù)
      If Application.WorksheetFunction.CountIf(Sheets(1).[b1:b1000], Sheets(2).Cells(i, 2)) = 0 Then
      Sheets(2).Range(Sheets(2).Cells(i, 1), Sheets(2).Cells(i, c)).Copy Sheets(1).Cells(a, 1) 
      ‘將表2中與表1不重復(fù)的數(shù)據(jù)復(fù)制到表1中
      End If
      Next
      End Sub

      015.有沒(méi)有辦法把加載宏內(nèi)置到Excel文件里?
      因?yàn)橛昧?Networkdays 函數(shù),用到了分析工具庫(kù),但是還要發(fā)給別人,怎么辦?
      解答:試試在"Thisworkbook"中寫(xiě)如下語(yǔ)句:
      Private Sub Workbook_Open()
          Application.RegisterXLL Filename:= _
              "Office安裝路徑\Office\Library\Analysis\ANALYS32.XLL"
      End Sub
      又問(wèn):Office安裝路徑怎么寫(xiě)呀?大家不一定都裝在C盤(pán)上。
      解答:試試:Application.Path & "\Library\Analysis\ANALYS32.XLL"

      046.如何在userform上顯示最大化與最小化按鈕
      解答:
      利用API
      Option Explicit
      Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
      Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
      Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
      Private Const GWL_STYLE = (-16)
      Private Const WS_THICKFRAME As Long = &H40000     '(恢復(fù)大小)
      Private Const WS_MINIMIZEBOX As Long = &H20000    '(最小化)
      Private Const WS_MAXIMIZEBOX As Long = &H10000    '(最大化)

      Private Sub UserForm_Initialize()
        Dim hWndForm As Long
        Dim IStyle As Long
        hWndForm = FindWindow("ThunderDFrame", Me.Caption)
        IStyle = GetWindowLong(hWndForm, GWL_STYLE)
        IStyle = IStyle Or WS_THICKFRAME  '還原
        IStyle = IStyle Or WS_MINIMIZEBOX '最小化
        IStyle = IStyle Or WS_MAXIMIZEBOX '最大化
        SetWindowLong hWndForm, GWL_STYLE, IStyle
      End Sub

      017.這個(gè)判斷代碼怎么寫(xiě)
      在A列輸入日期,如果所輸入日期為1月1日或5月1日則B列相關(guān)單元格+1,其他日期+0,這要用到什么函數(shù)?代碼怎么寫(xiě)?謝謝!
      解答:用IF函數(shù)或用Worksheet_Change事件
      Private Sub Worksheet_Change(ByVal Target As Range)
          If Target.Column = 1 Then
              If IsDate(Target) Then
                  If (Month(Target) = 1 And Day(Target) = 1) Or (Month(Target) = 5 And Day(Target) = 1) Then
                      Target.Offset(0, 1) = Target.Offset(0, 1) + 1
                  End If
              End If
          End If
      End Sub

      018.這個(gè)匯總表拆分程序怎么寫(xiě),高手幫忙!
      要將總表里的數(shù)據(jù)按工作單位字段拆分成數(shù)個(gè)分表(每個(gè)單位一張表格,標(biāo)簽名字為工作單位)這個(gè)程序怎么編寫(xiě),請(qǐng)高手指點(diǎn)。如果記錄增多或字段增多(但拆分字段不增)這個(gè)程序又應(yīng)該怎樣改寫(xiě),請(qǐng)高手稍微講解一下,應(yīng)為我不是為這一個(gè)表,還想用到別的工作表中,謝謝!
      解答:Sub Add_data(sht_Name)   '找出要取資料的區(qū)域
          Dim i As Integer, j As Integer, row_d As Integer
          Dim First_row As Integer, Last_row As Integer
          On Error Resume Next
          With Sheets("總表")
              i = 1
              Do Until .Cells(i, 3).value = sht_Name
                  i = i + 1
              Loop
              First_row = i
             
              j = First_row
              Do Until .Cells(j, 3) <> sht_Name
                  j = j + 1
              Loop
              Last_row = j - 1
          End With
          Sheets("總表").Range(Cells(First_row, 1), Cells(Last_row, 12)).Select
          Selection.Copy
          Sheets(sht_Name).Select
          Range("A2").Select
          ActiveSheet.Paste
          With ActiveSheet
              row_d = .Range("A2").End(xlDown).Row + 1
              Range("B" & row_d).value = "合計(jì)"
              For i = 5 To 11
                  Cells(row_d, i).value = Application.WorksheetFunction.Sum(Range(Cells(2, i), Cells(row_d - 1, i)))
              Next i
          End With
         
          Sheets("總表").Activate
          Range("A2").Select
         
      End Sub

      020.這個(gè)公式應(yīng)該怎么寫(xiě)?
      我想統(tǒng)計(jì)所有物料編碼的第一個(gè)字符為a的庫(kù)存數(shù)量的總和,這個(gè)公式應(yīng)該怎么寫(xiě)?A列為物料編碼,B列為庫(kù)存數(shù)量。
      解答:=SUMIF($A:$A,"a*",$B:$B)


      021.樣修改此宏?

      下面的宏是k版主幫我寫(xiě)的,從文件夾內(nèi)匯入其他工作表表格。匯入范圍為第五行、第L列。
      如匯入范圍改為第三行、第R列。
      怎樣修改此宏?

      Public Sub Feed_in2()
      Dim Row_dn, Row_dn1, i, j, k, m As Integer
      Dim Path1, Str1 As String
      Dim wb As Workbook
      Row_dn = [B65536].End(xlUp).Row
      Path1 = Application.ActiveWorkbook.Path
      Str1 = ActiveWorkbook.Name
      k = 5

          With Application
              .EnableEvents = False
              .ScreenUpdating = False
              If Row_dn >= 5 Then
                  Range("B5:L" & Row_dn).ClearContents
              End If
              With .FileSearch
                  .NewSearch
                  .LookIn = Path1
                  .FileType = msoFileTypeExcelWorkbooks
                  If .Execute <= 1 Then
                      MsgBox "files no found": Exit Sub
                  Else
                      For m = 1 To .FoundFiles.Count
                          Str2 = Split(.FoundFiles(m), "\")
                          n1 = UBound(Str2)
                          Str2 = Str2(n1)
                          If Str2 <> Str1 Then
                              Set wb = Workbooks.Open((Path1 & "\" & Str2), True, True)
                              Row_dn1 = wb.Sheets(1).[B65536].End(xlUp).Row
                              For i = 5 To Row_dn1
                                  For j = 2 To 12
                                      Workbooks(Str1).Sheets(1).Cells(k, j) _
                                         = wb.Sheets(1).Cells(i, j)
                                  Next j
                                  k = k + 1
                              Next i
                              wb.Close False
                              Set wb = Nothing
                          End If
                      Next m
                  End If
              End With
              .EnableEvents = True
          End With
          End Sub
      解答:除了B65536中的5,其余5都改成3;將Range("B5:L" & Row_dn)改成Range("B5:R" & Row_dn);將For j = 2 To 12改成For j = 2 To 17。

      022.怎樣控制textbox的只讀,要使textbox中的數(shù)據(jù)不能改變(刪除或修改),在屬性里我沒(méi)有找到有相關(guān)的方法嗎?
      解答:Textbox.Enabled = False,直接修改控件屬性都行。
      又問(wèn):這樣還不行,因?yàn)門(mén)extbox在顯示上就灰顯了,我想只讓它不可改變值,在顯示上還是原來(lái)的形式。
      解答:那就用Label代替,設(shè)置BackColor和SpecialEffect屬性。

      023.請(qǐng)教個(gè)小問(wèn)題!
      你好:我錄制了個(gè)刪除工作表的宏,但每次運(yùn)行后,總出現(xiàn)確認(rèn)刪除提示框,請(qǐng)問(wèn)該如何編寫(xiě),直接默認(rèn)刪除,不在作確認(rèn)呢?
      解答:Application.DisplayAlerts = False
      代碼為:Sub Dell()
           '
           '  Dell Macro
           '  DC.Direct 記錄的宏 2003-11-14
              Application.DisplayAlerts = False
              Sheets("Sheet2").Select
              ActiveWindow.SelectedSheets.Delete

              ActiveWorkbook.Save
              Application.DisplayAlerts = True
            End Sub

      024.小知識(shí):當(dāng)垂直滾動(dòng)條滾動(dòng)到無(wú)法顯示1-3行時(shí),凍結(jié)窗口,1-3行就好像被隱藏了,但是取消隱藏也不行。

      025.選A1后,自動(dòng)顯示B1內(nèi)容,有無(wú)方法實(shí)現(xiàn)。有A1列和B1兩列,*D1處做了數(shù)據(jù)-有效性-序列-選擇A1~A9
      *D1選擇A1時(shí),要求在G1中自動(dòng)跳出B1的內(nèi)容, 選A2時(shí),自動(dòng)跳出B2的內(nèi)容*余此類推。
      解答:G1公式:=Vlookup(D1,A1:B9,2,0)
      又問(wèn):假設(shè),有C列中也有數(shù)據(jù),我要在G1中顯示C列中的數(shù)據(jù),該怎么算?
      解答:G1公式:=Vlookup(D1,A1:B9,3,0)

      026. 向上填充的快捷鍵是什么?我只會(huì)向下填充的快捷鍵,向上-向左-向右的都是什么呢?
      解答:向上-Alt+E,I,U。向左-Alt+E,I,L。向右-CTRL+R

      027.下方單元格上移,包含該單元格的公式不要變化
      哪位高手幫幫忙!我試驗(yàn)了很久也沒(méi)找到解決的辦法:
      能不能做到刪除單元格以后,下方單元格上移,包含該單元格的公式不要變化?;蛘呤牵喊醋hift拖動(dòng)單元格,使兩個(gè)單元格互相交換位置以后,包含該單元格的公式不要發(fā)生變化。注意,用加$的辦法是不能解決這個(gè)問(wèn)題的,如公式改為:=SUM($A$1:$A$9),經(jīng)上述操作后,結(jié)果還是一樣。
      解答:=SUM(INDIRECT("A1:A10"))
      新問(wèn)題:但是還有一個(gè)問(wèn)題:我這一列有2000多個(gè)數(shù)據(jù),似乎不能通過(guò)拖動(dòng)的辦法將公式復(fù)制200遍,達(dá)到每10個(gè)1求和的結(jié)果。
      解答:=IF(MOD(ROW(),10)<>0,"",SUM(OFFSET(INDIRECT(ADDRESS(ROW(),COLUMN(),)),,-1,-10,)))

      028.一列中刪除重復(fù)數(shù)據(jù)的方法
      例如在C2:C500中有重復(fù)數(shù)據(jù)。在D2中 =COUNTIF(C2:$C$100,C2) 計(jì)算出 C2在此列中的出現(xiàn)次數(shù),然后復(fù)制公式到整列,最后刪除在D列中大于1的行即可.

      029.哪為大俠來(lái)幫忙關(guān)于VBA的問(wèn)題
      小弟想同時(shí)對(duì)excel工作簿下的幾個(gè)工作表進(jìn)行插入圖表的操作!這幾個(gè)工作表中已經(jīng)在相同的位置區(qū)域內(nèi)輸入了數(shù)據(jù). 語(yǔ)言如下: 運(yùn)行顯示 "下表越界" (下劃線的地方)。請(qǐng)問(wèn)高手又什么辦法解決,或者可以用其它的方法。
      sub biaoge()
      for a = 1 to 3
      sheets("sheet(a)").select
          charts.add
          activechart.applycustomtype charttype:=xlbuiltin, typename:="兩軸線-柱圖"
        activechart.setsourcedata source:=sheets("sheet (a)").range("a1:j3"), plotby:=xlrows   
      activechart.location where:=xllocationasobject, name:="sheet(a)"       activechart.hasdatatable = true
          activechart.datatable.showlegendkey = true
          activechart.legend.select
          selection.delete
       next a
      end sub
      解答:sheets("sheet(a)").select是錯(cuò)的??梢杂胹heets("Sheet_Name").select。

      029.比較大小
      例如512.03,我用函數(shù)取了這個(gè)數(shù)的最后兩個(gè)數(shù)03用他與10比較,結(jié)果總是顯示03>10,不知道是什么原因,請(qǐng)高手指點(diǎn),謝謝!!!
      解答:取后兩位數(shù)結(jié)果是文本型,對(duì)比可用right(a1,2)*1>10或者用:value(right(a1,2))>10也可

      030.討論:用RANGE和CELLS選擇單元格
      EXCEL的基本元素就是單元格,第一步就是要學(xué)會(huì)操作單元格了,列舉兩種方式。
      SUB RANGE() ‘用RANGE選擇B5單元格
       RANGE(“B5”).SELECT
      END SUB
      SUB CELLS() ‘用CELLS選擇B5單元格
       CELLS(5,2).SELECT
      END SUB
      RANGE編程時(shí)無(wú)法變化,CELLS可以通過(guò)變量選擇單元格。
      回應(yīng)1:RANGE 一樣方便, 甚至更方便. 實(shí)際使用中可以用一變量
      srArea="B" & i
      RANGE(srArea).SELECT
      srArea="金額" ' 一命名為 金額 的單元格/區(qū)域
      RANGE(srArea).SELECT
      回應(yīng)2:我覺(jué)得各有長(zhǎng)處,如果有變量需要循環(huán)判斷,用Cells相對(duì)比較簡(jiǎn)單,但是有時(shí)候固定區(qū)域的,命名后用Range更靈活。
      回應(yīng)3:沒(méi)錯(cuò). 幫助中也是推薦 CELL 的.
      靈活性來(lái)講, RANGE 要強(qiáng)多了, 而且使用時(shí)可以通過(guò) . 提取符快速讀取它的屬性和方法.
      另外, 對(duì)于可變更的工作表, 用 RANGE 來(lái)操作命名區(qū)域?qū)⒃黾映绦虻膹椥?
      比如工作中插入一行/列, VBA 中用 CELL 就可能導(dǎo)致運(yùn)行操作錯(cuò)誤, 而 RANGE(srArea) 作為指定區(qū)域, 可適應(yīng)單元格的這類變更.


      031.關(guān)于FileSystemObject的引用
      請(qǐng)問(wèn)各路高手,有人可以為我指點(diǎn)一下filesystemobject引用的詳細(xì)說(shuō)明,特別是fileexists方法的實(shí)例。
        解答:Sub testing()
         
          '先判斷文件是否存在,是則刪除之
         
          Dim strmyfile As String
          strmyfile = "d:\book1.xls"
          If filetoFind(strmyfile) Then
              Kill strmyfile
          End If
         
      End Sub

      Function filetoFind(fileName As String) As Boolean
          Dim fsobj As Object
          Set fsobj = CreateObject("Scripting.FileSystemObject")
          If fsobj.fileexists(fileName) Then
              filetoFind = True
          End If
      End Function
      在幫助文件中是這樣描述的:FileSystemObject 對(duì)象  
      描述:提供對(duì)計(jì)算機(jī)文件系統(tǒng)的訪問(wèn)。
      語(yǔ)法:Scripting.FileSystemObject
      說(shuō)明:下面的代碼舉例說(shuō)明了如何使用 FileSystemObject 返回一個(gè) TextStream 對(duì)象,該對(duì)象是可讀并可寫(xiě)的:
      Set fs = CreateObject("Scripting.FileSystemObject")
      Set a = fs.CreateTextFile("c:\testfile.txt", True)
      a.WriteLine("This is a test.")
      a.Close
      在上面列出的代碼中,CreateObject 函數(shù)返回 FileSystemObject (fs)。CreateTextFile 方法接著創(chuàng)建文件作為一個(gè) TextStream 對(duì)象(a),而 WriteLine 方法則向創(chuàng)建的文本文件中寫(xiě)入一行文本。Close 方法刷新緩沖區(qū)并關(guān)閉文件。
      FileExists 方法
      描述:如果指定的文件存在,返回 True,若不存在,則返回 False。
      語(yǔ)法:object.FileExists(filespec)
      FileExists 方法語(yǔ)法有如下幾部分:
      部分 描述:object 必需的。始終是一個(gè) FileSystemObject 的名字。
      filespec 必需的。要確定是否存在的文件的名字。如果認(rèn)為文件不在當(dāng)前文件夾中,必須提供一個(gè)完整的路徑說(shuō)明(絕對(duì)的或相對(duì)的)。

      032.excel時(shí)間函數(shù)2(菜鳥(niǎo)教程)
      這一貼說(shuō)明時(shí)間函數(shù),time,hour,minute,second的用法。
      time的計(jì)算過(guò)程:
      time(hour,minute,second),time地返回值為0-0.99999999之間的數(shù)值,它的計(jì)算方法如下:
      hour的范圍:0-24
      minute的范圍:0-59
      second的范圍:0-59
      在滿足以上輸入范圍的時(shí)候:time(hour,minute,second)=hour/24+minute/(24*60)+second/(24*60*60)。如:tiem(05,34,29)=0.232280092592593.如何計(jì)算的呢?
      5/24+34/(24*60)+29/(24*60*60)=0.208333333333333+0.0236111111111111
      +0.000335648148148148=0.232280092592593。
      在幫助文件里還有hour,minute,second不再范圍情況,這時(shí)候,如何計(jì)算的呢?
      1、second/60,除的整數(shù)為minute,mod(second,60)為second
      2、minute/60,除的整數(shù)為hour,mod(minute,60)為minute
      3、hour/24,mod(hour,24)為hour
      最后再用hour/24+minute/(24*60)+second/(24*60*60)計(jì)算。
      幫助中的例子:time(0,0,2000)=0.023148如何算的呢?
      2000/60=33   mod(2000,60)=20
      time(0,0,2000)=time(0,33,20)=0/24+33/(24*60)=20/(24*60*60)=0.023148
      呵呵,其實(shí)沒(méi)有什么用,會(huì)用這個(gè)函數(shù)就可以可,如何算的就不必在意了!!!

      033.年月日的問(wèn)題
          EXCEL表格中年月有時(shí)候輸入不對(duì),(早已記錄過(guò)大量數(shù)據(jù),改寫(xiě)麻煩。)比如198001,意思是1980年1月,可是設(shè)置單元格式日期只有年月日,沒(méi)有年月。怎么做?
      解答:插入一輔助列,假設(shè)198001在E1,F(xiàn)=IF(MID(E1,5,1)="0",LEFT(E1,4)&"年"&RIGHT(E1,1)&"月",LEFT(E1,4)&"年"&RIGHT(E1,2)&"月")
      試一下。
      又問(wèn):198001能否改為1980-1?或者1980年1月改為1980-1?
      解答:f1=IF(MID(e1,5,1)="0",LEFT(e1,4)&"-"&RIGHT(e1,1),LEFT(e1,4)&"-"&RIGHT(e1,2))
      或者更簡(jiǎn)單一些:=LEFT(A6,4)&"-"&value(RIGHT(A6,2))(數(shù)據(jù)在a6單元格)
      也可以這樣:=date(mid(e1,1,4),mdi(e1,5,2),1)這樣會(huì)顯示為1980-1-1,然后可以隨意設(shè)置成相應(yīng)的日期格式。

      034.請(qǐng)幫忙解釋一個(gè)公式
      =LEFT(A1,(SEARCHB("?",A1)-1)/2)這是我在站內(nèi)過(guò)去的帖子里看到的一個(gè)公式,用于提取前文后數(shù)中的文字部分,非常好用。請(qǐng)教這個(gè)公式中最后兩步的意義是什么?另外,當(dāng)A1是“1234個(gè)”的格式時(shí),當(dāng)如何提取其中的文字呢?
      解答:1、公式的含義是:查找第一個(gè)半角字符出現(xiàn)的位置[SEARCHB("?",A1)],減去1后除以2,就是文字的字符數(shù)目,將其提取出來(lái)。
      2、=RIGHT(A1,LENB(A1)-LEN(A1))

      035.關(guān)于宏和程序
      我現(xiàn)在已經(jīng)用excel編了一個(gè)較完整的程序,并且能夠給源程序加密碼,實(shí)現(xiàn)"工程不可見(jiàn)",但是我發(fā)現(xiàn)在vba編輯環(huán)境 里還能看到我的大部分宏,雖然說(shuō)不能編輯,但能運(yùn)行,請(qǐng)問(wèn)如何隱藏起來(lái)。
      解答:不用模塊函數(shù),重寫(xiě)成類或放到workbook中,或在程序中直接將菜單宏隱藏。或者:新建類,然后將模塊中的程序拷貝到類,提示:找不到宏。
      又問(wèn):我現(xiàn)在已經(jīng)能做到屏蔽調(diào)alt+F11鍵了,雖然不能看到我的宏程序,但是依然可以運(yùn)行我的宏,請(qǐng)高手做答,如何隱藏起我的宏。
      解答:在宏的聲明前加Private。

      036.請(qǐng)教多條件求和的問(wèn)題
      大家好,我是個(gè)新手,想向大家請(qǐng)教指定多條件求和的函數(shù)公式。
      譬如,有一張工作表有4列標(biāo)題:品名,數(shù)量,日期,簽收人。
      若我想求,符合條件為:品名為A,日期為Y,簽收人為B的數(shù)量之和。
      該用那個(gè)函數(shù)公式?
      解答:=IF(A2="a",IF(B2="03.10.22",COUNTIF(D:D,D2),"時(shí)間無(wú)"),"無(wú)")
      A列品名,B列日期,C列數(shù)量,D列簽收人用if 嵌套。
      或者:數(shù)組公式
      {=sum((a1:a100=品名)*(c1:c100=日期)(d1:d100=簽收人)*(B1:B100))}
      也可以:{=SUM((($A$1:$A$100)="a")*(($B$1:$B$100)="03.10.22"))}

      037.請(qǐng)教關(guān)于星期的計(jì)算?
      如何通過(guò)輸入一個(gè)日期:2003-10-20即可得到該天在本年度的第幾個(gè)星期?
      解答:使用 WEEKNUM 函數(shù)。
      如:=WEEKNUM(A1)
      =WEEKNUM(TODAY())
      或者:日期在a1
      =INT((A1-DATE(YEAR(A1),1,0)+WEEKDAY(DATE(YEAR(A1),1,0),1)+7-WEEKDAY(A1,1))/7)
      也可以用VBA:
      'under the iso standard, a week always begins on a monday, and ends on a sunday.
      'the first week of a year is that week which contains the first thursday of the year,
      'or, equivalently, contains jan-4.
      '
      public function isoweeknum(anydate as date, _
           optional whichformat as variant) as integer
      '
      ' whichformat: missing or <> 2 then returns week number,
      '              = 2 then yyww
      '
          dim thisyear as integer
          dim previousyearstart as date
          dim thisyearstart as date
          dim nextyearstart as date
          dim yearnum as integer

          thisyear = year(anydate)
          thisyearstart = yearstart(thisyear)
          previousyearstart = yearstart(thisyear - 1)
          nextyearstart = yearstart(thisyear + 1)
          select case anydate
              case is >= nextyearstart
                  isoweeknum = (anydate - nextyearstart) \ 7 + 1
                  yearnum = year(anydate) + 1
              case is < thisyearstart
                  isoweeknum = (anydate - previousyearstart) \ 7 + 1
                  yearnum = year(anydate) - 1
              case else
                  isoweeknum = (anydate - thisyearstart) \ 7 + 1
                  yearnum = year(anydate)
          end select
          if ismissing(whichformat) then
              exit function
          end if
          if whichformat = 2 then
              isoweeknum = cint(format(right(yearnum, 2), "00") & _
              format(isoweeknum, "00"))
          end if
      end function

      public function yearstart(whichyear as integer) as date
      dim weekday as integer
      dim newyear as date

      newyear = dateserial(whichyear, 1, 1)
      weekday = (newyear - 2) mod 7
      if weekday < 4 then
          yearstart = newyear - weekday
      else
          yearstart = newyear - weekday + 7
      end if
      end function

      038.請(qǐng)教日期的轉(zhuǎn)換問(wèn)題
      我的程序里有這樣一段代碼:
      Dim str As Date
      str=now
      Sheet1.Cells(1, "A") = str
      運(yùn)行后在單元格里顯示
      2003/11/13  15:19:45
      但我想讓它顯示成如下的格式:
      2003年11月13日(小時(shí),分,秒去掉)
      我用year(str)想單獨(dú)取得年的值,但顯示1905/06/25  0:00:00
      請(qǐng)問(wèn)有什么好的方法可以實(shí)現(xiàn)這種轉(zhuǎn)換嗎?
      解答:
      Dim str As Date
      str=now
      Sheet1.Cells(1, "A") = format(str,"yyyy年mm月dd日")

      039.如何用vba實(shí)現(xiàn)刪除最右邊的字符
      1月、2月、3月...........10月、11月、12月
      請(qǐng)問(wèn)如何用vba實(shí)現(xiàn)把“月”刪除 只提?。?、2、3.......10、11、12。
      解答:Sub abc()
      Dim a As Integer
      Dim b As String
      Dim c As String
      c = ""
      For a = 1 To Len(b)
          c = c & IIf(Mid(b, a, 1) <> "月", Mid(b, a, 1), "")
      Next
      MsgBox c
      End Sub
      或者:
      A1= 1月、2月、3月、4月、5月、6月、7月、8月、9月、10月、11月、12月
      [A1] = Application.WorksheetFunction.Substitute([A1], "月", "")

      040.請(qǐng)問(wèn)如何定義相對(duì)定位的名稱
      我想定義一個(gè)各個(gè)工作表(一個(gè)工作薄內(nèi))使用的名稱。該名稱為相對(duì)定位,
      如我在sheet1表的B2中該名稱是 sheet1 表的A2,我在sheet2表的B2中時(shí)該名稱是sheet2表的A2單元格,可我在定義名稱時(shí)它總是加上工作表名。
      解答:=offset(indirect(address(row(),column(),)),,-1,,)

      041.請(qǐng)問(wèn)如何替換?
      有很多條這樣的記錄:******(212),****(315),*********(658)。如何只保留括號(hào)里的數(shù)字,*號(hào)是漢字。
      解答:設(shè)數(shù)據(jù)在A30單元格 =MID(A30,FIND("(",A30)+1,LEN(A30)-FIND("(",A30)-1)
      IF 你的數(shù)據(jù)都是要求記錄中最后面的三碼數(shù)字
      可以試著用簡(jiǎn)單的方式解決 
      =RIGHT(A1,3)
      又問(wèn):我是要合并,你卻要拆分!你能告訴我怎樣將兩列:即“數(shù)字列”和“文字列”合并成一列?
      解答:試試這個(gè):
      Sub Join() '將選擇的行幾個(gè)單元格數(shù)值合并到一列的一個(gè)單元格
        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.求教合并單元格區(qū)域的連續(xù)讀取方法
      求教:1、如何選定連續(xù)的合并單元格區(qū)域;2、如何連續(xù)讀取合并單元格中的內(nèi)容。
      解答: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      產(chǎn)品代碼    產(chǎn)品名     生產(chǎn)機(jī)器名       產(chǎn)品代碼    產(chǎn)品名     生產(chǎn)機(jī)器名
      2      012354      a203         1m爐             225894       nj033              ?
      3      214345      b4032       發(fā)泡爐           056894       kkl001             ?        
      4      225894      nj033        1m爐             214345       b4032             ?
      5      056894      kkl001        發(fā)泡爐                 
      6      124589      lli002         1m爐            

      SHEET1是一張?jiān)促Y料表,而SHEET2是一個(gè)生產(chǎn)計(jì)劃表的一部分。
      請(qǐng)問(wèn):
              我求SHEET2中的A列中產(chǎn)品代碼相對(duì)應(yīng)的C列的”生產(chǎn)機(jī)器名“。
              這個(gè)公式怎么寫(xiě)?
      解答:Sheet2的C2格公式為:=VLOOKUP($A2,SHEET1!A:C,3,0)

      044.討論一下取最后一個(gè)單詞的方法
      例如現(xiàn)在在A1中有一句“M. Henry Jackey”,如何用函數(shù)將最后的一個(gè)單詞取出來(lái)呢? 當(dāng)然,我們現(xiàn)在是知道最后的單詞是6個(gè)字符,可以用Right(A1,6)來(lái)計(jì)算,但如果最后一個(gè)單詞的字符數(shù)是不定的呢,如果做呢? 請(qǐng)大家試下有幾種方法。
      解答:方法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、用自定義函數(shù)當(dāng)然方便,而且簡(jiǎn)單。
      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()),"")拖出來(lái)的第一個(gè)字符就行。
      方法5、{=RIGHT(A1,LEN(A1)-MAX((MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)=" ")*ROW(INDIRECT("1:"&LEN(A1)))))}
      嫌長(zhǎng)就(假定最長(zhǎng)100字符)
      {=RIGHT(A1,LEN(A1)-MAX((MID(A1,ROW(1:100),1)=" ")*ROW(1:100)))}

      045.如何獲取工作表中某一列有多少條記錄?
      因?yàn)槊恳涣械牡挠涗浂疾灰粯佣?,所以我想獲得每一列各有多少條記錄,怎么做?
      解答: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
      這樣也行:用下面的方法可測(cè)出任一列使用的行數(shù)
      a=Sheet1.range("b1").End(xlDown).Row。
      總結(jié):
      1.Sub aa()
        MsgBox (Application.CountA(Range("C:C")))
      End Sub
      結(jié)果永遠(yuǎn)都是1或者3,可是實(shí)際上記錄有600多條
      2.
      Sub aa()
      Worksheets("sheet1").Activate
          Range("c2").Select
          x1 = "=COUNTA(sheet1!C)"
          MsgBox x1
      End Sub
      這個(gè)是看fhj 示例的文件錄制成宏改的,不過(guò)運(yùn)行結(jié)果永遠(yuǎn)是 =counta(sheet1!c)
      3.
      Sub aa()
          x1 = "=COUNTA(sheet1!C)"
          MsgBox x1
      end sub
      提示和前面的一樣。
      4.其實(shí)已經(jīng)試了幾十種方法了。還是錯(cuò)的。作為公式時(shí),是可以使用。但是卻
      無(wú)法把獲得的值賦值給一個(gè)變量。除非是先寫(xiě)到一個(gè)單元格里,再重新讀出來(lái)。
      不過(guò)我覺(jué)得太麻煩了。而且寫(xiě)的時(shí)候會(huì)修改工作表。不是很恰當(dāng)。

      解答:Application.CountA(Range("C:C"))返回除去無(wú)值單元格的所有單元格的數(shù)量。
      Sheet1.range("C1").End(xlDown).Row返回第一次遇到空單元格前的單元格的數(shù)量。
      (注:當(dāng)C列有空白單元格時(shí)用:
      myEndRow=sheets("sheet1").range("C65536").End(xlUp).row)
      結(jié)論:Sub aa()
      x1 = Sheet1.Range("C3").End(xlDown).Row
          MsgBox x1
      end sub
      這就對(duì)了。謝謝各位!
      回應(yīng):推薦你用
       Columns(1).SpecialCells(xlCellTypeConstants).Count


      045.如何禁止輸入空格
      在Excel中如何通過(guò)編輯“有效數(shù)據(jù)”來(lái)禁止錄入空格?煩請(qǐng)大俠們費(fèi)心解答。不勝感激。
      解答:有效性公式。=COUNTIF(A1,"* *")=0
      (注:COUNTIF(A1,"* *") 在單元格有空格時(shí)結(jié)果為1,沒(méi)有空格時(shí)結(jié)果為0
      如希望第一位不能輸入空格:countif(a1," *")=0
      如希望最后一位不能輸入空格:countif(a1,"* ")=0)

      046.如何判斷單元格中單詞的數(shù)量?
      比如我在A1中輸入“you are a good boy”如何判斷單詞為5個(gè)?
      解答:=LEN(E12)-LEN(SUBSTITUTE(E12," ",""))+1
      (注:方法很巧妙 用trim把前后的空格去掉。如果有標(biāo)點(diǎn)符號(hào)或者兩個(gè)詞之間的空格數(shù)大于1個(gè)就不好辦了)

      047.如何取數(shù)
      表一有數(shù)據(jù),要求表二中數(shù)據(jù)為取一行表一數(shù)據(jù),空一行。
      解答:
      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.如何通過(guò)VBA編程將符合條件的數(shù)據(jù)庫(kù)記錄輸入到EXCEL中
      現(xiàn)在有access格式的數(shù)據(jù)表 TEST

      貨號(hào)                   貨名                    規(guī)格                  單價(jià)....

      1-01                 貨品1                   1M                  250.00

      1-02                 貨品2                   4Kg                 100.00

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

      N-99               貨品N                   999                 999.99

      現(xiàn)在我想在EXCEL的單元格中輸入貨號(hào),通過(guò)VBA代碼自動(dòng)從數(shù)據(jù)表中查找出相應(yīng)的記錄,并在相鄰的列分別自動(dòng)錄入貨品、規(guī)格、單價(jià)等內(nèi)容,從而實(shí)現(xiàn)EXCEL自動(dòng)數(shù)據(jù)錄入。請(qǐng)問(wèn)這VBA代碼應(yīng)如何寫(xiě)?謝謝!

      解答: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 貨號(hào)='" & Target & "'"
      With Rs
          .Open Query, Cnn, adOpenStatic, adLockReadOnly
          If .RecordCount = 0 Then
          MsgBox "沒(méi)有此貨號(hào)!"
               Target.ClearContents
          Else
              Target.CopyFromRecordset Rs
          End If
         .Close
      End With
      With Application
          .ScreenUpdating = True
          .EnableEvents = True
      End With
      End Sub

      049.如何統(tǒng)計(jì)一個(gè)單元格中的數(shù)字有幾位數(shù)?
      解答1:=LEN(單元格地址)
      又問(wèn):如果中間有漢字或者是字母、符號(hào)呢,或是數(shù)者都有呢?
      解答2:=SUM(LEN(A1)-LEN(SUBSTITUTE(A1,{"0","1","2","3","4","5","6","7","8","9"},"")))
      解答3:=2*LEN(A1)-LENB(A1)
      (備注:對(duì) 中文 + 數(shù)字 是很好的做法,但有英文字 或 中文 + 數(shù)字 + 英文 就出錯(cuò))

      050.如何選取列內(nèi)不重複資料
      解答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:提供一個(gè)以陣列方法為思考模式的方法
      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開(kāi)始,所以+1
      End Sub
       

       

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多