Excel 从A列的“我的字符串”(即段落)中删除特定词类和标点符号,并在B列中输入结果
请看标题。这是我的密码:Excel 从A列的“我的字符串”(即段落)中删除特定词类和标点符号,并在B列中输入结果,excel,excel-formula,vlookup,Excel,Excel Formula,Vlookup,请看标题。这是我的密码: Option Explicit Sub MakeWordList() Dim mObjWord As Word.Application Dim InputSheet As Worksheet Dim WordListSheet As Worksheet Dim PuncChars As Variant, x As Variant Dim i As Long, r As Long Dim txt As String
Option Explicit
Sub MakeWordList()
Dim mObjWord As Word.Application
Dim InputSheet As Worksheet
Dim WordListSheet As Worksheet
Dim PuncChars As Variant, x As Variant
Dim i As Long, r As Long
Dim txt As String
Dim wordCnt As Long
Dim AllWords As Range
Dim oString As String
Set mObjWord = CreateObject("Word.Application")
Application.ScreenUpdating = True
Set InputSheet = ActiveSheet
Set WordListSheet = Worksheets.Add(After:=Worksheets(Sheets.Count))
WordListSheet.Range("A1") = "All Words"
WordListSheet.Range("A1").Font.Bold = True
InputSheet.Activate
wordCnt = 2
PuncChars = Array(".", ",", ";", ":", "'", "!", "#", _
"$", "%", "&", "(", ")", " - ", "_", "--", "+", _
"=", "~", "/", "\", "{", "}", "[", "]", """", "?", "*")
r = 1
oString = ""
'Loop until blank cell is encountered and add the word to oString
Do While Cells(r, 1) <> ""
txt = Cells(r, 1)
For i = 0 To UBound(PuncChars)
txt = Replace(txt, PuncChars(i), "")
Next i
'Remove excess spaces
txt = WorksheetFunction.Trim(txt)
'Extract the words
x = Split(txt)
For i = 0 To UBound(x)
Set mObjWord = CreateObject("Word.Application")
' it does not run from here
Select Case x(i)
Case wdAdverb, wdVerb, wdConjunction, wdIdiom, wdInterjection, wdPronoun, wdPreposition
Case Else
oString = oString & " " & x(i)
End Select
Next i
InputSheet.Range("r, 2").Value = oString
r = r + 1
Loop
End Sub
选项显式
子MakeWordList()
Dim mObjWord作为Word.Application
将输入表作为工作表进行调整
将单词列表表设置为工作表
变型为暗蓬卡,变型为x
暗淡的i一样长,r一样长
以字符串形式显示文本
模糊的词
将所有单词作为范围
像细绳一样变暗
设置mObjWord=CreateObject(“Word.Application”)
Application.ScreenUpdating=True
设置InputSheet=ActiveSheet
Set WordListSheet=Worksheets.Add(后面:=Worksheets(Sheets.Count))
WordListSheet.Range(“A1”)=“所有单词”
WordListSheet.Range(“A1”).Font.Bold=True
输入表。激活
wordCnt=2
PuncChars=数组(“.”、“,”、“;”、“:”、“'”、“!”、“#”_
"$", "%", "&", "(", ")", " - ", "_", "--", "+", _
"=", "~", "/", "\", "{", "}", "[", "]", """", "?", "*")
r=1
oString=“”
'循环,直到遇到空白单元格并将单词添加到oString
“当单元格(r,1)”时执行”
txt=单元格(r,1)
对于i=0至UBound(PuncChars)
txt=替换(txt,PuncChars(i),“”)
接下来我
'删除多余的空格
txt=工作表函数.Trim(txt)
"摘抄文字,
x=拆分(txt)
对于i=0到UBound(x)
设置mObjWord=CreateObject(“Word.Application”)
“它不是从这里跑出来的
选择案例x(i)
副词,动词,连词,成语,感叹词,代词,介词
其他情况
oString=oString&&&x(i)
结束选择
接下来我
InputSheet.Range(“r,2”)。值=oString
r=r+1
环
端接头
似乎您希望加载MS Word的实例(实际上,您的代码在一个循环中加载了许多实例,可能有数百个),以访问诸如wdVerb之类的枚举,您希望这些枚举能够识别文本中的动词。枚举是数字,精确地说是长整数。例如,wdVerb表示值3(在单词VBE的即时窗口中键入?wdVerb)。
我不知道单词对这些数字有什么作用,但你的x(I)包含一个字符串
Select Case x(i)
Case wdAdverb, wdVerb
Case Else
因此必须始终默认为Else,除非它是2或3或您列出的其他数字之一。
我想到的第一个问题是你为什么不使用这个词。在Word文档中使用Word表格。
其次,你的想法无法实现。识别“我去了吗?”或“我是中间人”中的动词是一项艰巨的任务。不要期望它在一个数字下降时由单词来执行。
第三,您似乎希望提取大部分单词。为什么不先提取所有单词,然后列出你想排除的单词并过滤掉呢。
最后,您的数组(“.”、“,”、“;”)看起来很复杂。以下结构的篇幅较小
PuncChars = ".,;"
and
For i = 1 to Len(PuncChars)
Txt = Replace(Txt, Mid(PuncChars, i, 1), "")
Next i
您可以使用非常类似的系统过滤掉不想提取的单词。以下是新代码:
here is the new code now:
Option Explicit
Sub MakeWordList()
Dim mObjWord As Word.Application
Dim mySynInfo As Word.SynonymInfo
Dim InputSheet As Worksheet
Dim PuncChars As Variant, x As Variant
Dim i As Long, r As Long, j As Long
Dim txt As String
Dim oString As String
Dim myList As Variant
Dim myPos As Variant
Dim skipWord As Boolean
Set mObjWord = CreateObject("Word.Application")
Application.ScreenUpdating = True
Set InputSheet = ActiveSheet
InputSheet.Activate
PuncChars = Array(".", ",", ";", ":", "'", "!", "#", _
"$", "%", "&", "(", ")", " - ", "_", "--", "+", _
"=", "~", "/", "\", "{", "}", "[", "]", """", "?", "*")
r = 1
oString = ""
'Loop until blank cell is encountered and add the word to oString
Do While Cells(r, 1) <> ""
txt = Cells(r, 1)
For i = 0 To UBound(PuncChars)
txt = Replace(txt, PuncChars(i), "")
Next i
'Remove excess spaces
txt = WorksheetFunction.Trim(txt)
'Extract the words
x = Split(txt)
For i = 0 To UBound(x)
' getting insufficient memory error at the following command after have
' completed a few iteratons of the For loop successfully
Set mySynInfo = SynonymInfo(Word:=x(i), LanguageID:=wdEnglishUS)
If mySynInfo.MeaningCount <> 0 Then
myList = mySynInfo.MeaningList
myPos = mySynInfo.PartOfSpeechList
For j = 1 To UBound(myPos)
Select Case myPos(j)
Case wdAdverb, wdVerb, wdConjunction, wdIdiom, wdInterjection, wdPronoun, wdPreposition
skipWord = True
Case Else
skipWord = False
End Select
Next j
If Not skipWord Then
oString = oString & " " & x(i)
End If
End If
Next i
InputSheet.Cells(r, 2).Value = oString
r = r + 1
Loop
End Sub
选项显式
子MakeWordList()
Dim mObjWord作为Word.Application
将mysynfo设置为Word.SynonymInfo
将输入表作为工作表进行调整
变型为暗蓬卡,变型为x
我长,r长,j长
以字符串形式显示文本
像细绳一样变暗
Dim myList作为变体
Dim myPos作为变体
Dim skipWord作为布尔值
设置mObjWord=CreateObject(“Word.Application”)
Application.ScreenUpdating=True
设置InputSheet=ActiveSheet
输入表。激活
PuncChars=数组(“.”、“,”、“;”、“:”、“'”、“!”、“#”_
"$", "%", "&", "(", ")", " - ", "_", "--", "+", _
"=", "~", "/", "\", "{", "}", "[", "]", """", "?", "*")
r=1
oString=“”
'循环,直到遇到空白单元格并将单词添加到oString
“当单元格(r,1)”时执行”
txt=单元格(r,1)
对于i=0至UBound(PuncChars)
txt=替换(txt,PuncChars(i),“”)
接下来我
'删除多余的空格
txt=工作表函数.Trim(txt)
"摘抄文字,
x=拆分(txt)
对于i=0到UBound(x)
'在执行以下命令后出现内存不足错误
'成功完成了For循环的几次迭代
设置mysynfo=SynonymInfo(Word:=x(i),LanguageID:=wdenglishhus)
如果mysynfo.MeaningCount为0,则
myList=mysynfo.MeaningList
myPos=mysynfo.PartOfSpeechList
对于j=1至UBound(myPos)
选择案例myPos(j)
副词,动词,连词,成语,感叹词,代词,介词
斯基普沃德=真
其他情况
skipWord=False
结束选择
下一个j
如果不是skipWord那么
oString=oString&&&x(i)
如果结束
如果结束
接下来我
InputSheet.Cells(r,2).Value=oString
r=r+1
环
端接头
RegEx将是一个更好的选择。我在a列的每个单元格中都有一个文本段落。我正在尝试删除某些词类,包括介词、动词、副词等以及标点符号,并将结果输入B列的相应单元格。我还选择了Microsoft Word参考库。我的程序不会超出“选择…”命令的范围运行。我需要有人给我建议。我是一个新手。请问一个实际问题在对代码做了一些更改后,我能够部分运行此代码,然后它停止运行,并显示运行时错误5824消息“内存或磁盘空间不足。你能看看这段代码并建议如何避免内存崩溃吗?:这是一个完全不同的问题,我不想参与其中,不是因为你的问题是一个后续问题,我不这样做,而是因为我不知道