Board logo

標題: 重新編號 [打印本頁]

作者: myleoyes    時間: 2011-1-17 22:45     標題: 重新編號

各位前輩你們好!
         前輩!問題如附檔說明
         請知道的前輩,不吝賜教謝謝再三!!
作者: hugh0620    時間: 2011-1-18 10:31

回復 1# myleoyes


    我是一個新手~ 有進去看你發的問題~
    下行是你提之問題
    [前輩!因為資料刪除的關係造成編號無法連續,希望按鈕後編號能夠重新編號請按鈕,這就是需求,請知道的前輩,不吝賜教謝謝再三!!]
    這樣的問題,可能是我文學程度不夠好,看不懂.
    若照你字面上的說法,你自己寫的已經是符合按鈕後會重新編號
   還是你有其他的意思??????
作者: Hsieh    時間: 2011-1-18 11:13

回復 2# hugh0620
簡單說明一下
樓主目的只是優化程式
以邏輯來說就是要將零亂的編號重新由1開始
遇到與前格不同時加1
以您過去的學習態度我想應該寫得出來
只需迴圈跑完這些儲存格
中間加入判斷而已
註:樓主的發問態度我想大家要引以為戒
      因為這樣往往會得不到好的解答

作者: hugh0620    時間: 2011-1-18 11:28

本帖最後由 hugh0620 於 2011-1-18 16:13 編輯

回復 3# Hsieh


    喔~~  原來是這樣呀~ 謝謝大大的說明~

   不過~ 我應該沒法寫的比樓主好吧~ 但我還是會試看看~
   其它方式的寫法(但可能是一種奇怪的邏輯來處理)~ ^.^

  用不同的寫法~ 不過是個新手的寫法~
  X = 0
  Do Until Cells(1, 3 + X) = ""
   If Cells(1, 3 + X) = Cells(1, 3 + X - 1) And Cells(2, 3 + X) = Cells(2, 3 + X - 1) Then
      If Cells(154, 3 + X - 1) = "" Then
         Cells(154, 3 + X) = 1
      Else
         Cells(154, 3 + X) = Cells(154, 3 + X - 1)
      End If
   Else
      Cells(154, 3 + X) = Cells(154, 3 + X - 1) + 1
   End If
  X = X + 1
  Loop
作者: myleoyes    時間: 2011-1-18 22:19

回復 3# Hsieh
hsieh前輩你好!
       偶像前輩!謝謝!!你的教誨小弟謹記在心
       只是小弟不知道要如何發問才能得到大家的
       認同,請前輩真的不吝再指導,小弟一定改進
       只是小弟有點要聲明的是好像小弟從來都不指導
       別人只要求別人幫小弟...其實不是小弟不願意
       只是我對Excel真的一點基礎都沒有就這裡來上課
       請各位前輩諒解...學到現在還一頭霧水...
       偶像前輩!請不吝再賜教謝謝再三!!!
作者: myleoyes    時間: 2011-1-18 22:26

回復 4# hugh0620
hugh0620 前輩你好!
      前輩謝謝!!原程式並非小弟所寫小弟沒有這種功力
         至目前為止只能亂拼湊套用罷!
         程式是截取Hsieh前輩之前所教導範例之一小段
         抱歉因小弟的偷懶造成你的誤解!!
         程式無法適用再附檔說明
         辛苦囉!請不吝賜教謝謝再三!!
作者: hugh0620    時間: 2011-1-19 09:50

本帖最後由 hugh0620 於 2011-1-19 10:10 編輯

回復 6# myleoyes


    不要叫我前輩~ 其實我也是新手~  ^^
    互相漏氣求進步啦~
    如果是固定15欄一個編號~ 我是有一個笨的寫法
   Sub 編號()
     I = 0                              
     For J = 1 To 100          '<------- J為編號
         For X = 0 To 14       '<------- X為跑15次,將J這個編號填寫15次
               I = I + 1            
              If Cells(1, 2 + I) = "" Then Exit Sub'<--------I為讓程式判斷是否有資料,若無則離開程式
              Cells(154, 2 + I) = J
         Next
    Next

End Sub
作者: oobird    時間: 2011-1-19 11:04

只是小弟不知道要如何發問才能得到大家的
       認同,請前輩真的不吝再指導,小弟一定改進

此例的問題在於:
沒有說明是以哪一列的數據為為分組的判條件
你想得到怎樣的結果也沒有表示出來
雖然下載了你的檔案,還是不懂你要做什麼
作者: Hsieh    時間: 2011-1-19 15:04

回復 4# hugh0620


學習就是不斷練習,不怕錯,只怕不去做
以此為例,就是從第3欄開始,遇到數值不同就加1
參考看看
  1. Sub 編號()
  2. k = 3: n = 1
  3. Do Until Cells(153, k) = ""
  4. test = Cells(153, k)
  5.     Cells(153, k) = n
  6.     If test <> Cells(153, k + 1) Then n = n + 1
  7. k = k + 1
  8. Loop
  9. End Sub
複製代碼

作者: hugh0620    時間: 2011-1-19 16:27

回復 9# Hsieh


    大大的寫法是因應將原碼直接修改成新碼
   這樣簡短的程式碼~ 不算困難~ 但能直接就有這樣的邏輯~ 小弟還需要多學習~
作者: myleoyes    時間: 2011-1-20 10:19

回復 10# hugh0620
hugh0620 前輩你好!
      前輩謝謝!!程式適用非常感激還幫小弟
         詳細解說這是小弟最迫切需要的
         每當有前輩幫小弟解答時,都很想告訴他們
         可否幫我加註說明以便了解程式在說什麼?
         實在難以再開口要求...,造成今日學習感到
         很無力往後請多多指導這種最笨的方法謝謝再三!!
作者: myleoyes    時間: 2011-1-20 10:20

回復 8# oobird
oobird前輩你好!
      前輩!謝謝!小弟為了省去一些
      落落長的解說,有時也會詞不達意
      所以尋找類似程式來作為解說
      原本認為這樣比較容易讓指導前輩
      了解需求,以本範例為例原程式的內容
      這個Resize(, 15)不是告訴我們程式是
      以size大小來作為依據15就是大小的值
      B153=編號從C欄開始都是數字分別是9,14,20
      3組號,所以按鈕後變1,2,3等3組號應該是
      比言語容易了解重新編號的目的
      卻讓各位前輩更難了解殆勢!!真是始料未及
      真的謝謝你讓小弟發現錯誤所在
      以免增加往後學習的挫折感真是謝謝再三!!
作者: myleoyes    時間: 2011-1-20 10:22

回復 10# hugh0620
hsieh前輩你好!
       偶像前輩!謝謝!!你的教誨小弟謹記在心
       感謝你多年來總是秉持有教無類的精神
       教導我這位遲鈍學生...小弟感激在心謝謝再三!!!
       小弟另有一問題再請教,各位前輩!
         問題如附檔說明
        Sub 左移()
          If ActiveWindow.ScrollColumn > 2445 Then
          ActiveWindow.ScrollColumn = 2
          Else
          ActiveWindow.ScrollColumn = ActiveWindow.ScrollColumn + 15
          End If
       End Sub
       請知道的前輩,不吝賜教謝謝再三!!
作者: hugh0620    時間: 2011-1-20 12:14

本帖最後由 hugh0620 於 2011-1-20 12:17 編輯

回復 13# myleoyes


    HI~ 我只會用我現在學會的方式來幫你處理 (有測試過,可直接copy下面的程式碼)
   而我處理的方式是用 select case 來做~  我也有新增一個a1的執來幫我處理(主要是我還不會寫把資料暫存在變數中,所以需要一個欄位)
    這種處理方式在少數量上還ok~若是多筆數據的話~ 你可能就要加很多case~要寫很久~
    要短且優的程式 還是要看大大的
   
   Sub 左移()
     If Range("a1") = "" Then    '<----a1是用來處理選擇第幾個case
        Range("a1") = 1
     End If
     w = Range("a1")               
     Select Case w
     Case 1   '<----按第一次是第一個15筆的資料
     ActiveWindow.ScrollColumn = ActiveWindow.ScrollColumn
     Range("a1") = Range("a1") + 1
     Case 2 '<----按第二次是第二個15筆的資料
     ActiveWindow.ScrollColumn = ActiveWindow.ScrollColumn + 15
     Range("a1") = Range("a1") + 1
     Case 3  '<----按第三次是第三個15筆的資料
     ActiveWindow.ScrollColumn = ActiveWindow.ScrollColumn + 15
     Range("a1") = Range("a1") + 1
     Case 4 '<----按第四次 因為後面沒有資料,所以跳回到一開始的地方
     ActiveWindow.ScrollColumn = 3
     Range("a1") = ""
     End Select
End Sub
作者: Hsieh    時間: 2011-1-20 12:38

回復 14# hugh0620
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2.      Select Case Target(1).Address(0, 0)
  3.         Case "B1"
  4.             ActiveWindow.ScrollColumn = 1
  5.         Case "B2"
  6.         k = IIf(ActiveWindow.ScrollColumn + 15 > 255, -(ActiveWindow.ScrollColumn) + 3, 15)
  7.             ActiveWindow.ScrollColumn = ActiveWindow.ScrollColumn + k
  8.             Range("A2").Select
  9.         End Select
  10. End Sub
複製代碼

作者: hugh0620    時間: 2011-1-20 13:56

本帖最後由 hugh0620 於 2011-1-20 14:10 編輯

回復 15# Hsieh
  
     呵呵~  還是大大厲害~
     我也試著把大大的程式碼做了一個小小的修改~
   這樣就只要選擇"B2"這個儲存格~ 不用再點選"B1"    (有時USER會不知道要去按"B1",乾脆就把USER當EXCEL笨蛋,只要按一個地方就好)

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     Select Case Target(1).Address(0, 0)
        'Case "B1"                                                                                        '取消
        '    ActiveWindow.ScrollColumn = 1                                               '取消
        Case "B2"
        'k = IIf(ActiveWindow.ScrollColumn + 15 > 255, -(ActiveWindow.ScrollColumn) + 3, 15)  '大大為了防止欄大於255,嚴謹的寫法
        k=15                                                                                                  '若已經確定不可能超過255個欄位,其實只要令k=15每次增加15欄,也是可以的
        If Target.Offset(, ActiveWindow.ScrollColumn + k ) = "" Then           '新增 如果下面沒有資料就跳回到最前面
           ActiveWindow.ScrollColumn = 3                                                '新增
           Range("A2").Select                                                                   '新增
        Else                                                                                               '新增
            ActiveWindow.ScrollColumn = ActiveWindow.ScrollColumn + k
            Range("A2").Select
        End If                                                                                                 '新增
        End Select
End Sub
作者: myleoyes    時間: 2011-1-20 21:29

回復 16# hugh0620
hugh0620 前輩你好!
      前輩謝謝!!你還是如此詳細解說
         小弟在你的指導下應該比較容易
         了解程式基礎原理,不過這個左移
         真的遇到大資料可真的累死囉!!因為小弟目前的資料
         已經存到RN囉!還再增加之中哈哈!!
         往後請多多指導這種最笨的方法謝謝再三!!
作者: myleoyes    時間: 2011-1-20 21:31

回復 15# Hsieh
hsieh前輩你好!
       偶像前輩!謝謝!!你的程式真的沒話說除了謝謝還是謝謝再三!!
作者: Hsieh    時間: 2011-1-20 21:58

回復 16# hugh0620
在已使用範圍內循環
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2.      Select Case Target(1).Address(0, 0)
  3.         Case "B1"
  4.             ActiveWindow.ScrollColumn = 1
  5.         Case "B2"
  6.         k = IIf(ActiveWindow.ScrollColumn + 15 > UsedRange.Columns.Count, -(ActiveWindow.ScrollColumn) + 3, 15)
  7.             ActiveWindow.ScrollColumn = ActiveWindow.ScrollColumn + k
  8.             Range("A2").Select
  9.         End Select
  10. End Sub
複製代碼

作者: FAlonso    時間: 2011-1-21 08:58

回復 1# myleoyes
  1. Sub changeindex()
  2. Dim mydic As Object
  3. Dim mycell As range
  4. Dim i As Integer

  5. Set mydic = CreateObject("scripting.dictionary")

  6. For Each mycell In range([c153], [c153].End(xlToRight))

  7. If mydic.exists(mycell.Value) Then
  8. mycell.Value = mydic(mycell.Value)
  9. Else
  10. i = i + 1
  11. mydic(mycell.Value) = i
  12. mycell.Value = mydic(mycell.Value)
  13. End If
  14. Next

  15. Set mydic = Nothing

  16. End Sub
複製代碼
現在要理解發問者的意思,比寫程式更困難
作者: hugh0620    時間: 2011-1-21 09:45

回復 19# Hsieh
    大大真厲害 僅加上UsedRange.Columns.Count這一小段 就能使中間有中斷的部份~ 也能夠往下去抓有資料的部份~
     又學習到了~
作者: myleoyes    時間: 2011-1-21 21:22

回復 20# FAlonso
FAlonso 前輩你好!
      前輩謝謝!!歹勢!這樣說明讓你看嘎霧煞煞
       你的程式也適用謝謝再三!!
作者: myleoyes    時間: 2011-1-28 10:20

回復 21# hugh0620
各位前輩你們好!
         前輩!這個類似問題小弟還是
         作不出來如附檔說明
         請知道的前輩,不吝賜教謝謝再三!!
作者: Hsieh    時間: 2011-1-28 20:51

回復 23# myleoyes
  1. Sub nn()
  2. Range([L1], Cells(1, Columns.Count)) = ""
  3. Do Until i = [A1]
  4. [L1].Offset(, i * 10) = i + 1
  5. i = i + 1
  6. Loop
  7. End Sub
複製代碼

作者: GBKEE    時間: 2011-1-29 15:19

回復 23# myleoyes
  1. Sub Ex()
  2.     Range("b1").Resize(1, Columns.Count - 1) = ""
  3.     For i = 0 To Range("a1") - 1
  4.         'Cells(1, 12) 為L1
  5.         Cells(1, 12 + i * 10) = i + 1  'i * 10 每隔10欄
  6.     Next
  7. End Sub
複製代碼

作者: myleoyes    時間: 2011-1-29 21:56

回復 24# Hsieh
hsieh前輩你好!
       偶像前輩!謝謝!!程式雖然短短幾字
       也看過說明?小弟實在無法理解含義
       不好意思無理的請求
       可否解釋一下程式的意思
       Do Until i = [A1]
       尤其是 i代表多少?是6嗎?
       辛苦囉!謝謝再三!!
作者: myleoyes    時間: 2011-1-29 22:13

回復 25# GBKEE
GBKEE前輩你好!
       良師!謝謝!!程式可以謝謝再三!!
作者: Hsieh    時間: 2011-1-30 00:26

回復 26# myleoyes


    變數i就是將來要的編號
Do Until i=[a1]
意思是迴圈執行到i值等於[a1]的值停止
作者: myleoyes    時間: 2011-1-30 09:28

回復 28# Hsieh
hsieh前輩你好!
       偶像前輩!謝謝再三!!




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)