如何提取区域内非空值,到指定列?
excel吧
全部回复
仅看楼主
level 6
2021年11月23日 01点11分 1
level 6
A2:M9中非空数据,提取至O列。谢谢各位老师。
2021年11月23日 01点11分 2
level 8
上具体图
2021年11月23日 02点11分 3
楼上有图
2021年11月23日 03点11分
@玛瑙湖manaohu =INDIRECT(MID(REPT(TEXT(SMALL(IF($A$2:$M$9="",9999,COLUMN($A:$M)*100+ROW($2:$9)),ROW(A1)),"c00r00"),2),4,6),)&""
2021年11月23日 05点11分
level 11
如果不用vba且列数不多的话,感觉先筛选再复制就相对比较简单易操作
2021年11月23日 02点11分 4
需要函数支持一下
2021年11月23日 03点11分
level 8
=INDIRECT(MID(REPT(TEXT(SMALL(IF($A$2:$M$9="",9999,COLUMN($A:$M)*100+ROW($2:$9)),ROW(A1)),"c00r00"),2),4,6),)&""
输完公式后,按CTRL+SHIFT+ENTER组合键,下拉
2021年11月23日 05点11分 5
level 11
试着用别的函数写了一个,一共用了4次函数,直接下拉就行。仅供参考:不过个人觉得这样的数据录入方式不可取。
=FILTERXML("<a><b>"&SUBSTITUTE(TEXTJOIN(",",1,$A$2:$M$10),",","</b><b>")&"</b></a>","/a/b["&ROW()&"]")
2021年11月23日 10点11分 6
level 13
自定义函数代码:
Function 啥名呢(区域 As Range)
Dim arr, brr()
arr = 区域
For j = 1 To UBound(arr, 2)
For i = 1 To UBound(arr)
If arr(i, j) <> "" Then
n = n + 1
ReDim Preserve brr(1 To n)
brr(n) = arr(i, j)
End If
Next i
Next j
啥名呢 = Application.WorksheetFunction.Transpose(brr)
End Function
2021年11月23日 11点11分 7
level 13
2021年11月23日 13点11分 8
level 11
'未做去重
Option Explicit
Sub abc()
 Dim a, i, j, m
 a = [a1].CurrentRegion.Value
 ReDim b(1 To UBound(a) * UBound(a, 2), 1 To 1)
 For j = 1 To UBound(a, 2)
  For i = 2 To UBound(a)
   If Len(a(i, j)) Then m = m + 1: b(m, 1) = a(i, j)
  Next
 Next
 [a2].Offset(, UBound(a, 2) + 1).Resize(m) = b
End Sub
2021年11月23日 13点11分 9
1