判斷引數大於0 連續資料的條件判斷

2021-10-14 19:42:10 字數 2225 閱讀 5757

前幾天有學員問了乙個問題,如果他的單元格中包含某些字元,那麼在最後一列中就顯示有用,否則顯示不可用。如下:

當含有carpet時,最後一列中顯示有用。

其實,這個函式非常簡單,既然是查詢某個字元,直接用find函式就可以了,然後搭配著if函式進行判斷,結果不就出來了麼?

有了這個思路,來看一下另外乙個同學碰到的問題,看看該如何解決?**是這樣的:

她的問題是這樣的:如果有4個連續的衣服碼都有庫存,那麼就在最後一列中標註為齊碼,否則就為斷碼。比如第2行中的t101031,根據上述說明,結果應該是斷碼;第3行中的結果就是齊碼;

先來分析一下思路,這個題跟開始的那個有點不一樣,應該可以說是公升級版。

怎麼去判斷是連續的呢?我們用1表示有,用0表示無,假設將一行中的碼數全部連線在一起,只要遇到了「1111」這種四個1在一起的,那麼不就是說明這件款式是齊碼的麼!

根據上述這個思路,得出:

1、先判斷庫存情況,大於0的轉換成1,0的保持不變;

2、將1中的判斷情況連線在一起成為文字串;

3、判斷有沒有「1111」這種情況;

4、根據第3條得出是否是斷碼或齊碼的結果

一起來分步驟寫一下公式:

轉換為1和0,肯定是if函式了:

這個利用了陣列公式的特性,所以得出的結果是一組資料:

將這些結果連成一串的函式就比較多了,都分享一下吧:

第乙個:microsoft365中的textjoin函式

公式為:

=textjoin("",1,if(b2:g2<>0,1,0))

第乙個引數是分隔符的意思,第二個引數是是否忽略空值,第三個引數自然就是要連線的文字了;

缺陷:只有microsoft 365, office2019,wps2019中才有這個函式;

如果不是上述這些版本怎麼辦?接下來看:

第二個:concat函式

公式為:

=concat(if(b2:g2<>0,1,0))

引數雖然比textjoin簡單得多,但是如果之間要有連線符的話,還是得用textjoin。

其實關於連線文字的函式,除了上述兩個之外,還有phonetic函式,它只對文字起作用;concatenate函式,還有&符號,只是由於本題的限制,這三個都用不上,大家作為了解就好。

接下來,就是判斷是否有連續的庫存了。這個直接用find函式搞定。

公式為:

find("1111",concat(if(b2:g2<>0,1,0)))

這種結果說明沒找到,把公式下拉填充一下看看。

很明顯,能得到結果的,就表示有連續的4個1,結果就應該是齊碼。但是這裡直接巢狀if函式並不能得到我們要的結果,因為if的判斷條件值的結果應該是true或false,所以這一步還需要套乙個函式iserror直接做判斷:

有了結果true和false,最後再用if函式巢狀就簡單多了。

公式為:

=if(iserror(find("1111",concat(if(b2:g2<>0,1,0)))),"斷碼","齊碼")

52 連續陣列

題目描述 給定乙個二進位制陣列,找到含有相同數量的 0 和 1 的最長連續子陣列 的長度 示例 1 輸入 0,1 輸出 2 說明 0,1 是具有相同數量0和1的最長連續子陣列。示例 2 輸入 0,1,0 輸出 2 說明 0,1 或 1,0 是具有相同數量0和1的最長連續子陣列。思路來自 連續陣列的解...

1446 連續字元

給你乙個字串s,字串的 能量 定義為 只包含一種字元的最長非空子字串的長度。請你返回字串的能量。示例 1 輸入 s leetcode 輸出 2解釋 子字串 ee 長度為 2 只包含字元 e 示例 2 輸入 s abbcccddddeeeeedcba 輸出 5解釋 子字串 eeeee 長度為 5 只包...

2573 連續奇數和

時間限制 1 sec 記憶體限制 128 mb 提交 102 解決 57 題目描述 小明看到一本書上寫著 任何數字的立方都可以表示為連續奇數的和。比如 2 3 8 3 5 3 3 27 7 9 11 雖然他沒有想出怎麼證明,但他想通過計算機進行驗證。所以聰明的你快來幫小明證明吧,你的工作就是要找出任...