我有一个简短的 VBA 函数,可以生成文本字符串的二进制表示:
Public Function TextToBin(S As String) As String
Dim i As Long, L As Long
L = Len(S)
With Application.WorksheetFunction
For i = 1 To L
TextToBin = TextToBin & .Dec2Bin(Asc(Mid(S, i, 1)))
Next i
End With
End Function
Run Code Online (Sandbox Code Playgroud)
例如:
我被要求用一个简单的公式替换这个 UDF,以便应用程序可以在无宏的环境中运行。
我目前的解决方法是放置:
=IFERROR(DEC2BIN(CODE(MID($A$1,COLUMNS($A:A),1))),"")
Run Code Online (Sandbox Code Playgroud)
在单元格B1 中并复制。然后,在另一个单元格中,使用:
=TEXTJOIN("",TRUE,B1:IV1)
Run Code Online (Sandbox Code Playgroud)
但是,我不想承认,我们能做的最好的事情就是使用一万六千多个辅助细胞!
有没有一种简单、紧凑的方法来获得相同的结果?
是否有一个公式可以计算单元格中的项目数,每个项目用逗号分隔?
例如:
CELL A1 =“戴尔、苹果、三星、宏碁”
公式将返回 4。
我有一小块细胞,比如C4到G11。单元格包含各种长度的文本。我可以使用数组公式轻松获得块中最长字符串的长度:
=MAX(LEN(C4:G11))
Run Code Online (Sandbox Code Playgroud)
我需要一个公式来获取具有这个最长字符串的单元格的地址。如果有多个具有最长字符串的单元格,我需要最靠近块顶部的单元格的地址。如果同一行中有多个具有最长字符串的单元格,则我需要最靠近块左边缘的单元格的地址。
在上面的例子中,公式应该返回E8。
对于此工作簿,我不能使用VBA。有什么建议 ??
如果我在A1和A2 中有数字数据,那么:
=SUM(A1:A2)
Run Code Online (Sandbox Code Playgroud)
作品和:
=SUM(INDIRECT("A1:A2"))
Run Code Online (Sandbox Code Playgroud)
作品和:
=SUM(A1,A2)
Run Code Online (Sandbox Code Playgroud)
有效但是:
=SUM(INDIRECT("A1,A2"))
Run Code Online (Sandbox Code Playgroud)
不起作用。我猜这是因为"A1,A2"
不是有效的单元格引用。
任何人都可以解释为什么会这样,或者向我指出一些给出解释的在线文档?
如果A1中有一个单词, A2中有另一个单词,我可以使用以下方法确定“更大”:
=IF(A2>A1,A2,A1)
Run Code Online (Sandbox Code Playgroud)
在单元格B2中。这里的“更大”意味着如果数据按升序排序,则该值将位于底部:
所以鲸鱼在云之下。
我可以将这种方法向下延伸。因此,如果A3及以下有数据,则在B3中我输入:
=IF(B2>A3,B2,A3)
Run Code Online (Sandbox Code Playgroud)
并抄下:
所以Zygote是“最大”的价值。现在,如果我在A1到A11中有数字而不是单词,我就不需要所有这些“辅助”单元格。我可以使用:
=MAX(A1:A11)
Run Code Online (Sandbox Code Playgroud)
我的问题:是否有一个单单元格公式可以返回相当于数字MAX()的“最大”单词?
试图用一个非常简单的COUNITF/COUNTIFS
公式来帮助朋友。数据是这样的:
目标是计算除迈克、约翰、朱迪之外的数据单元格。当前公式:
=COUNTIFS(A2:A13,"<>mike",A2:A13,"<>john",A2:A13,"<>judy")
Run Code Online (Sandbox Code Playgroud)
它返回正确的值 3。问题是他要排除的名字多于三个。我们想在B列中列出它们,并让公式引用列表(否则公式会变得很大)。我们已经尝试过:
=SUM(COUNTIF(A2:A13,"<>B2:B4"))
Run Code Online (Sandbox Code Playgroud)
正常输入和数组输入,但它产生 12 !
奇怪的是,如果我们想包括而不是排除那么:
=SUM(COUNTIF(A2:A13,B2:B4))
Run Code Online (Sandbox Code Playgroud)
作品。我提供了一个 VBA 解决方案,但被拒绝了。
我有类似的数据:
我的目标是:
所以在上面的例子中我想要Juliet。如果A列中有多个单元格具有最大长度,那么我需要匹配第一次出现。
我可以使用辅助列轻松完成此操作。在C1 中,我可以输入=LEN(A1)
并复制;然后使用=INDEX(B:B,MATCH(MAX(C:C),C:C,0))
,但用户不想要辅助列。
我有一个数字列表,让我们说:
500 530 460 510
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助我使用一个公式来查看 530,460 和 510 以找到与 500 的最大绝对值差异吗?
该公式应得出 40 的答案。
我需要一个公式来查找并返回字符串中的第一个字母。所以如果一个单元格包含:
1234(*&^%$23ADFG54
Run Code Online (Sandbox Code Playgroud)
该公式将返回:
A
Run Code Online (Sandbox Code Playgroud)
编辑#1:
我目前正在使用以下UDF:
Public Function FirstLetter(Sin As String) As String
Dim i As Long, CH As String
FirstLetter = ""
For i = 1 To Len(Sin)
If Mid(Sin, i, 1) Like "[A-Z]" Then
FirstLetter = Mid(Sin, i, 1)
Exit Function
End If
Next i
End Function
Run Code Online (Sandbox Code Playgroud)
但我需要一个非 VBA 解决方案。
说我有两套:
1
2
3
4
5
6
Run Code Online (Sandbox Code Playgroud)
和
3
6
Run Code Online (Sandbox Code Playgroud)
我希望能够获得除第二个之外的第一个,例如 1 2 4 5。
我怎么能那样做?
我可以将这 3 个公式合并为一个公式吗?
=IF(ISBLANK(R32),0)
=IF(R32<12,1)
=IF(R32>11,1.5)
Run Code Online (Sandbox Code Playgroud)
如果没有输入,我想返回计数值为零的单元格,但如果单元格超过 11,则该单元格值为 1.5,如果较低,则值为 1,除非空白然后为空白。