Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从excel单元格/excel文件提取多个url地址_Excel_Regex_Vba_Excel Formula - Fatal编程技术网

从excel单元格/excel文件提取多个url地址

从excel单元格/excel文件提取多个url地址,excel,regex,vba,excel-formula,Excel,Regex,Vba,Excel Formula,我在excel中有多个单元格,如下面的单元格,我想提取所有以“”开头的URLhttps://images" 在这张图片上,你可以看到我想要实现的目标。在左边的单元格中,我有一些URL,但当我调用函数时,我希望得到右边单元格的内容(所有以“https://images") 我通过编写=ExtrUrls(A14) 编辑-如果您只需要一个字符串,那么不需要创建数组,只需将每个M附加到一个字符串并返回该字符串即可。将函数返回类型更改为String而不是String() 函数ExtrUrls(作为字符串)

我在excel中有多个单元格,如下面的单元格,我想提取所有以“”开头的URLhttps://images"

在这张图片上,你可以看到我想要实现的目标。在左边的单元格中,我有一些URL,但当我调用函数时,我希望得到右边单元格的内容(所有以“https://images") 我通过编写=ExtrUrls(A14)

编辑-如果您只需要一个字符串,那么不需要创建数组,只需将每个M附加到一个字符串并返回该字符串即可。将函数返回类型更改为String而不是String()

函数ExtrUrls(作为字符串)作为字符串
尺寸rv作为字符串,sep作为字符串
Dim RE作为对象,MC作为对象,M作为对象
Const sPat As String=“https?:\/\/(images\)?[-a-zA-Z0-9@:%。[-a-zA-Z0-9]{1256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9á-249;-193-217()@:%。+.~\35;?&/=])”电子邮件的正则表达式
我想我会坚持多久
'初始化正则表达式引擎
Set RE=CreateObject(“vbscript.regexp”)
带RE
.Pattern=sPat
.Global=True
.IgnoreCase=True
如果是,则进行测试
设置MC=.Execute(S)
对于MC中的每M
rv=rv&sep&M
sep=“;””或任何您想要的分隔符
下一个M
如果结束
以
ExtrUrls=rv
端函数

当以数组公式(Ctrl+Shift+Enter)输入时,自定义项适用于一行单元格

如果从一列单元格中将其作为数组公式调用,则可以“翻转”数组:

函数extruls(s As String)'As String()
Dim sTemp()'作为字符串
Dim RE作为对象,MC作为对象,M作为对象
Const sPat As String=“https?:\/\/(images\)?[-a-zA-Z0-9@:%。[-a-zA-Z0-9]{1256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9á-249;-193-217()@:%。+.~\35;?&/=])”电子邮件的正则表达式
我想我会坚持多久
'初始化正则表达式引擎
Set RE=CreateObject(“vbscript.regexp”)
带RE
.Pattern=sPat
.Global=True
.IgnoreCase=True
如果是,则进行测试
设置MC=.Execute(s)
ReDim sTemp(1至MC.计数)
i=0
对于MC中的每M
i=i+1
sTemp(i)=M
下一个M
如果结束
以
'如果从一列单元格调用,则翻转数组
错误时继续下一步“忽略未作为UDF调用时的错误”
Set rng=Application.Caller
在出现错误时转到0'停止忽略错误
如果不是,那么rng什么都不是
如果rng.Rows.Count>1,则sTemp=Application.Transpose(sTemp)
如果结束
ExtrUrls=sTemp
端函数

你到底怎么称呼这个?当作为数组公式输入一行单元格时,它对我有效。它在一列单元格中不起作用,因为返回的数组是“错误的”。我通过write=extruls(A14)调用该函数。我尝试使用该函数,但仍然只得到一个url。。有没有办法将所有结果保存到字符串中,然后将该字符串返回到单元格?谢谢。如果您只需要一个字符串,那么不需要创建数组,只需将每个
M
附加到一个字符串并返回该字符串即可。将函数返回类型更改为
String
,而不是
String()
<div id="images-gallery" class="slick-carousel slick-carousel-arrow-style-2" data-was-processed="true"><div class="gallery-thumb" data-src="https://images.mytestdomain.gr/image1.jpg" data-idx="1"><picture>
<source type="image/webp" srcset="https://cdn.mytestdomain.gr/photos/small/44x44-90_jpg/%CE%BA%CF%85%CF%84%CE%B4%CF%86.webp" media="(max-width: 768px)">
<source type="image/webp" srcset="https://cdn.mytestdomain.gr/photos/small/60x60-90_jpg/%CE%BA%CF%85%CF%84%CE%B4%CF%86.webp" media="(max-width: 1024px)">
img src="https://cdn.mytestdomain.gr/photos/small/105x105-90/%CE%BA%CF%85%CF%84%CE%B4%CF%86.jpg" alt="Oral-B 3D White Brilliance Οδοντόβουρτσα για Λευκά Δόντια 1 τεμάχιο" title="Oral-B 3D White Brilliance Οδοντόβουρτσα για Λευκά Δόντια 1 τεμάχιο" class="loaded" data-was-processed="true">
</picture></div><div class="gallery-thumb" data-src="https://images.mytestdomain.gr/3014260090890bbbbbbbbb.jpg" data-idx="2"><picture>
<source type="image/webp" srcset="https://cdn.mytestdomain.gr/photos/small/44x44-90_jpg/3014260090890bbbbbbbbb.webp" media="(max-width: 768px)">
<source type="image/webp" srcset="https://cdn.mytestdomain.gr/photos/small/60x60-90_jpg/3014260090890bbbbbbbbb.webp" media="(max-width: 1024px)">
<source type="image/webp" srcset="https://cdn.mytestdomain.gr/photos/small/78x78-90_jpg/3014260090890bbbbbbbbb.webp" media="(max-width: 1280px)">
<img src="https://cdn.mytestdomain.gr/photos/small/105x105-90/3014260090890bbbbbbbbb.jpg" alt="Oral-B 3D White Brilliance Οδοντόβουρτσα για Λευκά Δόντια 1 τεμάχιο" title="Oral-B 3D White Brilliance Οδοντόβουρτσα για Λευκά Δόντια 1 τεμάχιο" class="loaded" data-was-processed="true">
</picture></div></div>
Option Explicit
Function ExtrUrls(S As String) As String()
    Dim sTemp() As String
    Dim RE As Object, MC As Object, M As Object
    Const sPat As String = "https?:\/\/(images\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9á-ùÁ-Ù()@:%_\+.~#?&//=]*)" 'Regex for emails
    Dim i As Long
    
'Initialize Regex engine
Set RE = CreateObject("vbscript.regexp")
With RE
    .Pattern = sPat
    .Global = True
    .IgnoreCase = True
    If .Test(S) = True Then
        Set MC = .Execute(S)
        ReDim sTemp(1 To MC.Count)
        i = 0
        For Each M In MC
            i = i + 1
            sTemp(i) = M
        Next M
    End If
End With
ExtrUrls = sTemp
End Function