返回列表 上一主題 發帖

[發問] 數字各取1

回復 12# samwang
測試成功 !
執行效率優化許多~只可惜,我一直搞不懂Arr和Brr要怎麼設立範圍和運算?
所以遇到多個Sheet(s)的範圍要運算就一籌莫展
感謝您一再的幫忙~感恩

TOP

回復 11# ziv976688

請測試看看,謝謝

Private Sub CommandButton1_Click()
Dim Arr, xD, s%, Tm, a%, i&, j&
Set xD = CreateObject("Scripting.Dictionary")
Tm = Timer
Application.ScreenUpdating = False '在背景下執行
   For s = 1 To 6   '6個工作表
        Shrr = Array("準2進3", "準3進4", "準4進5", "準5進6", "準6進7", "準7進8")
        With Sheets(Shrr(s - 1))
            Arr = .Range("d1:j" & .[b65536].End(3).Row)
            For i = 2 To UBound(Arr)
                For j = 1 To UBound(Arr, 2)
                    If Arr(i, j) <> "" Then
                        If InStr(Arr(i, j), ",") Then
                            For w = 0 To UBound(Split(Arr(i, j), ","))
                            a = Split(Arr(i, j), ",")(w): xD(a) = ""
                            Next
                        Else
                            xD(Arr(i, j)) = ""
                        End If
                    End If
                Next
            Next
            If xD.Count > 0 Then
                For i = 1 To xD.Count: Arr(i, 1) = Application.Small(xD.keys, i): Next
                With .Range("a4").Resize(xD.Count, 1)
                    .NumberFormatLocal = "00": .Value = Arr
                End With
                .[a2] = xD.Count & "個": Erase Arr: xD.RemoveAll
            End If
        End With
   Next
MsgBox Timer - Tm
End Sub

TOP

本帖最後由 ziv976688 於 2021-7-19 07:02 編輯

回復 5# ML089
不好意思,我將公式套用在VBA語法中~產生偵錯。
只是FREQUENCY和TRIM和SUBSTITUTE等函數對我來說~太深奧了~
恐怕是我將原5欄39個號碼的貴解,套用在7欄49個號碼公式時有改錯了!?
煩請您幫我檢視一下~ 好嗎 ?
或者請您直接以程式語法解題(有看過您解過程式題 )。
謝謝您
數字各取1(儲存格有,區隔符號)_VBA.rar (96.34 KB)

TOP

本帖最後由 ziv976688 於 2021-7-10 14:53 編輯

回復 9# hcm19522
我向小孩(年輕人用的版本比較新)借2007版測試看看。
感謝您的賜教和幫忙:D

TOP

本帖最後由 hcm19522 於 2021-7-22 11:17 編輯

https://blog.xuite.net/hcm19522/twblog/589903456
google"EXCEL迷"  blog  或google網址:https://hcm19522.blogspot.com/

TOP

回復 6# 准提部林
多學習到拆解有區隔符號的數字之公式。
感謝您的指導和幫忙

TOP

本帖最後由 ziv976688 於 2021-7-10 13:21 編輯

回復 5# ML089
測試1000期,單儲存格最多只見過3個數字,所以3~5個足夠用了。
感謝您的指導和幫忙

TOP

A2//陣列:
=TEXT(SMALL(IF(COUNTIF(B:F,TEXT(ROW($1:$39),"!*00!*")),ROW($1:$39),99),ROW(A1)),"[<99]00;")

數字限1~39
把a:f欄設成文字格式, 再將單獨的數字重新輸入為兩位數, 如:05,06

TOP

回復 1# ziv976688

A2 陣列公式,如下
=LOOKUP(99,IF({1;0},{0,""},{1,1}*SMALL((FREQUENCY(--(0&TRIM(MID(SUBSTITUTE(B$2:B$33&","&C$2:C$33&","&D$2:D$33&","&E$2:E$33&","&F$2:F$33&",,,,,",",","         "),{0,1,2,3,4}*9+1,9))),ROW($1:$99)-1)=0)*999+(ROW($1:$100)-1),ROW(A2))))
以三鍵方式輸入公式(SHIT+CTRL+ENTER)

公式限制
數字1~99
B:F每一列合併之數字串數也不能太多(3~5個),因為字串分隔只插入9個空格,也可增加插入空格來提高字串數。
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 3# ML089

是的!煩請指導。謝謝您!

TOP

        靜思自在 : 不怕事多,只怕多事。
返回列表 上一主題