求解

..
2019-09-18 14:41 發佈
會寫VBA嗎?
用VBA處理起來很簡單

Sub MyCount(R1 As Range, R2 As Range)
i = 0
Do Until R1 = ""
If R1 = "/" Then
R2.Value = i
Set R2 = R2.Offset(0, 1)
i = 0
Else
i = i + 1
End If
Set R1 = R1.Offset(0, 1)
Loop
R2.Value = i
End Sub

Sub ToCount()
MyCount [B5], [B8]
MyCount [B14], [B17]
End Sub
另一種寫法,請參考
但資料太長不適用,Application.Transpose 能處理的大小有上限

Sub test()
Dim s, i As Integer
s = Split(Join(Application.Transpose(Application.Transpose(Range("b5:r5").Value)), ""), "/")
For i = 0 To UBound(s)
s(i) = Right(s(i), 1)
Next i
Range("b8:r8").Value = ""
Range("b8").Resize(, UBound(s) + 1) = s
End Sub

資料量不固定的話,2樓高手的寫法,才是最安全、不會出錯的方法
我算的是每個區間的格子數
三樓大大取的是每個區間最右方的文字

仔細一看好像都符合樓主問題的規律
樓主是不是該出來解釋解釋了
f10629 wrote:
我算的是每個區間的格子數
三樓大大取的是每個區間最右方的文字...(恕刪)


重新看一次圖片
我認為您是對的,他要的是格子數

我被範例誤導,很巧的是每區間最後一格的值,剛好是區間格子數
為什麼不用a、b、c……

如果每格只有一個字,程式碼改一行,s(i) = Len(s(i))


2019/9/19 08:00 補充
如果字數不固定,不用vba,改用公式



資料範圍,暫定$B$5:$Z$5
建議最後多加上一個 "/",這樣公式比較好寫,暫時想不到比較短的,請參考
B8=IFERROR((SMALL(IF($B$5:$Z$5="/",MATCH(COLUMN($B$5:$Z$5),COLUMN($B$5:$Z$5),0),""),COLUMN(A$1))-IFERROR(SMALL(IF($B$5:$Z$5="/",MATCH(COLUMN($B$5:$Z$5),COLUMN($B$5:$Z$5),0),""),COLUMN(A$1)-1),0)-1),"")
(陣列公式,其它往右拉)
首先要有下列一些狀況要注意,否則無法作業:
1.最後設定範圍的最後一個儲存格須為「/」。
2.超過統計數量的儲存格會自動填入0。


1、點取B8儲存格輸入公式:
=COUNT(OFFSET($A5,0,SUMPRODUCT(LARGE(($B5:$T5="/")*COLUMN($B5:$T5),COUNTIF($B5:$T5,"/")+3-COLUMN())),1,SUMPRODUCT(LARGE(($B5:$T5="/")*COLUMN($B5: $T5),COUNTIF($B5:$T5,"/")+2-COLUMN()))-SUMPRODUCT(LARGE(($B5:$T5="/")* COLUMN ($B5:$T5),COUNTIF($B5:$T5,"/")+3-COLUMN()))))
再將公式複製到C8:E13及B15:E15儲存格。
錦色如月,子耀光芒。
使用公式的作法:

ps.
1.若為樓主的例子,資料為橫式,可自行修改公式,
2.如果資料列最後有加上『/』,公式可更簡短,
3.末端超出範圍而出現的 0,懶得再以公式移除,不然公式會太長!



My Interior Knowledge is Extraordinaire
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?