这个问题从已删除的问题中略有改进
对于那些可以看到已删除帖子的人,可以从这里获取:https://stackoverflow.com/questions/39793322/three-dimensional-lookup-no-concatenate-or-named-ranges-excel
我正在尝试进行没有命名范围或连接的三维查找.简化,我的数据在表格上:
Column1 Column2 Column3
Scott
P 1 2 3
M 4 5 6
N 7 8 9
George
P 10 11 12
M 13 14 15
N 16 17 18
Run Code Online (Sandbox Code Playgroud)
我现在想要搜索特定的名称,然后搜索该名称表中的特定字母,然后我想将此行号与特定列匹配.
我尝试了一个简单的INDEX/MATCH:
=INDEX(A:D,MATCH("M",A:A,0),MATCH("Column1",1:1,0))
Run Code Online (Sandbox Code Playgroud)
这适用于第一个名称但不是任何其他名称,因为它找到了第一个实例M.
如何修改它以查找其他名称?
我已在下面回答,但想看看是否有人有更好的解决方案.
我编写了以下代码来删除一行中使用 VBA 中的一行中的“*”或“-”字符之后的文本,但它给出了错误。任何人都可以帮忙吗?
Sub Removetext()
For each c In Range("A1:ZZ1")
c.Value = Left(c.Value, InStr(c.Value, "-") - 1)
Next C
End Sub
Run Code Online (Sandbox Code Playgroud) 我有一个工作簿,其表大小约为20000行,52列.有时,我需要一次更新选定行的百分比.我希望使用宏来根据行中的值更新选择单元格,由第二个较小的表格映射,更新的值将输入到表1中.几乎像VLOOKUP函数,但不是如果找不到条目,则擦除单元格.例如,根据主机ID更改电话号码.
我尝试在下面的代码中使用数组执行此操作,以获得表1中的一组特定值,但我的值未更新.我的VBA有点生疏,所以如果有人可以查看并协助让它运行,我们将不胜感激.我想最终根据表头更新表中的任何条目.
Sub NewNameandCostCenter()
Dim myList, myRange
Dim sht As Worksheet
Dim sht2 As Worksheet
Dim LastRow As Long
Dim LastColumn As Long
Dim StartCell As Range
Dim LastRow2 As Long
Set sht = Worksheets("NewNameMacro")
Set sht2 = Worksheets("ALL")
Set StartCell = Range("A2")
'Find Last Row and Column
LastRow = sht.Cells(sht.Rows.Count, StartCell.Column).End(xlUp).Row
LastColumn = sht.Cells(StartCell.Row, sht.Columns.Count).End(xlToLeft).Column
'set myList array
Set myList = sht.Range(StartCell, sht.Cells(LastRow, LastColumn))
LastRow2 = sht.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
'set myRange array
Set myRange = Sheets("ALL").Range("J2:M" & LastRow2)
'Update …Run Code Online (Sandbox Code Playgroud) 我有下表:
Account_Number Parent_Account Child_Account
R003247 R000355 R000002
R000355 NULL R003247
R000002 R003247 NULL
R004853 NULL R028636
R004853 NULL R028638
R004853 NULL R028637
R028636 R004853 NULL
R028638 R004853 NULL
R028637 R004853 NULL
Run Code Online (Sandbox Code Playgroud)
可以加载:
create table dbo.temptable
(Account_Number varchar(10),
Parent_Account varchar(10),
Child_Account varchar(10))
insert into dbo.temptable
values
('R003247','R000355','R000002'),
('R000355',NULL,'R003247'),
('R000002','R003247',NULL),
('R004853',NULL,'R028636'),
('R004853',NULL,'R028638'),
('R004853',NULL,'R028637'),
('R028636','R004853',NULL),
('R028638','R004853',NULL),
('R028637','R004853',NULL)
Run Code Online (Sandbox Code Playgroud)
此表表示帐号的拆分和重新分配。它与跟踪地块的分割和组合有关。
前三行,如上表所示,应该组合在一起,因为它来自R000355--> R003247-->R000002
如上表所示,最后 6 个也应分组,因为它显示R004853分为三个R028636, R028637, R028638。
我已经尝试了很多这样的变化:
SELECT CE.*,TT.ID
FROM dbo.temptable CE
INNER JOIN …Run Code Online (Sandbox Code Playgroud) 我在为谷歌表格编写脚本方面是全新的,所以我希望你们中的一些人可以帮助/指导我一点。
所以理想情况下,我想要一个脚本来清除(而不是删除)我的工作表中的所有过滤器。然而,这对我来说很复杂(如果你们中的一些人有这样的脚本,我很想看到它:))
相反,我做了这个(二手录音机):
function Clear_Filter() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('A5').activate();
spreadsheet.getActiveSheet().getFilter().removeColumnFilterCriteria(1);
spreadsheet.getRange('B5').activate();
spreadsheet.getActiveSheet().getFilter().removeColumnFilterCriteria(2);
spreadsheet.getRange('C5').activate();
spreadsheet.getActiveSheet().getFilter().removeColumnFilterCriteria(3);
spreadsheet.getRange('G5').activate();
spreadsheet.getActiveSheet().getFilter().removeColumnFilterCriteria(7);
spreadsheet.getRange('J5').activate();
spreadsheet.getActiveSheet().getFilter().removeColumnFilterCriteria(10);
spreadsheet.getRange('M5').activate();
spreadsheet.getActiveSheet().getFilter().removeColumnFilterCriteria(13);
};
Run Code Online (Sandbox Code Playgroud)
所以我的过滤器设置在第 5 行。首先,我对所有列(我有 20 个)进行了上述操作,但问题是,代码非常慢:(所以现在我正在使用我最常使用的列,过滤时,但代码仍然很慢。最糟糕的是,代码一次运行一列(我们在代码中看到),当代码完成时,我最终进入最后一列。
我可以做点什么吗?当我运行代码时,我不希望我的工作表窗口不断右转,然后最终出现在 M 列中。
我将不胜感激任何帮助!谢谢
我需要从具有多个条件的字符串中提取数字。
以下是几个示例:
从RE:Markitwire:120432889:Mx:24,693,059我需要得到24693059
从自动回复:Auftrag zurÜbertragungIRD Ref-Nr。MMX_23497152需要获取23497152
现在,我正在使用regexextract函数(在此网站上找到),该函数提取以2开头的8位数字。但是,它也将从表达式TGF00023242526提取数字,这是不正确的。而且,我不知道如何在代码中添加其他条件。
=RegexExtract(A11, ""(2\d{7})\b"", ", ")
Run Code Online (Sandbox Code Playgroud)
先感谢您。
Function RegexExtract(ByVal text As String, _
ByVal extract_what As String, _
Optional seperator As String = "") As String
Dim i As Long, j As Long
Dim result As String
Dim allMatches As Object
Dim RE As Object
Set RE = CreateObject("vbscript.regexp")
RE.Pattern = …Run Code Online (Sandbox Code Playgroud) 我得到了相互矛盾的结果。
用公式:
=MOD(1,1)
我得到0正如人们所期望的那样。
但如果我1通过公式来解决这个问题:
=MOD((1.2-1)/0.2,1)
我明白了1。
即使我将公式拆分为各个部分:
=(1.2-1)/0.2
和
=MOD(B5,1)
我得到 1
所以问题是,“为什么不同?”
在现已删除的问题中,OP 要求返回1.3并0.4来自1^1.3%2^0.4。
我立即想到了 FILTERXML。
我能够做到这一点:
=MID(FILTERXML("<a><b>"&SUBSTITUTE(A1,"%","</b><b>")&"</b></a>","//b"),FIND("^",FILTERXML("<a><b>"&SUBSTITUTE(A1,"%","</b><b>")&"</b></a>","//b"))+1,99)
Run Code Online (Sandbox Code Playgroud)
但这似乎太重复了。
我substring-after在 XPATH 1.0 中找到了它,但无法让它执行我想要的操作。我首先尝试:
=FILTERXML("<a><b>"&SUBSTITUTE(A1,"%","</b><b>")&"</b></a>","//b[substring-after(., '^')]")
Run Code Online (Sandbox Code Playgroud)
但这返回了完整的字符串和:
=FILTERXML("<a><b>"&SUBSTITUTE(A1,"%","</b><b>")&"</b></a>","substring-after(//b, '^')")
Run Code Online (Sandbox Code Playgroud)
刚刚返回了一个错误。
有没有办法只使用 FILTERXML 返回所需的数字?
我不知道使用单个单元格公式是否可以实现这一点。需要 Excel 2010 兼容(及更高版本)的公式。目的是使用如下公式
{=SUM(INDEX(built_Array;N(IF(1;ROW(INDIRECT(x1 &":"& x2)))))}
Run Code Online (Sandbox Code Playgroud)
其中 x1 和 x2 是对包含与构建数组兼容的起始索引和结束索引的单元格的引用。
Excel 公式的“构建数组”部分应根据其他地方的两个表中的数据构建:表上的标识符用于选择实际内容(使用查找 Excel 函数)。一张表包含重复值的数量,另一张表包含实际值。
例如:
| P1 | P2 | P3 | P1 | P2 | P3 | ||
|---|---|---|---|---|---|---|---|
| i01 | 2 | 4 | i01 | 20.0 | 20.6 | ||
| i02 | 3 | i02 | 10.0 | ||||
| i03 | 2 | 7 | 9 | i03 | 30.0 | 30.4 | 30.2 |
| i04 | 4 | 2 | i04 | 15.0 | 15.1 | ||
| i05 | 5 | i05 | 10.0 |
因此 i03 的构建数组将是
{30.0;30.0;30.4;30.4;30.4;30.4;30.4;30.4;30.4;30.2;30.2;30.2;30.2;30.2;30.2;30.2;30.2;30.2}
Run Code Online (Sandbox Code Playgroud)
对于 i04 来说是
{15.0;15.0;15.0;15.0;15.1;15.1}
Run Code Online (Sandbox Code Playgroud)
那么,对于 i04 取第 3 到第 5 个值,上面的数组 (ctrl-shift-enter) 公式的结果将是 45.1,而对于 i04 取第 2 到第 3 个值,结果将是 30。
我发现困难的是从公式内的表构建数组,特别是因为每个标识符可能具有不同数量的组件。
我有预感,这应该是可行的,在其他编程语言中,会使用迭代或递归,但我想探索这种方式,而不是恢复到 VBA(如果存在概念上的原因,这在 Excel …
我的 Office VBA 编辑器超级缩放到菜单面板的左角。我可以使用快捷方式访问设置,但\xc2\xb4t 没有找到修复它的方法。
\n我重新安装了 Office,但\xc2\xb4 没有帮助。我也尝试通过注册表删除设置,但没有效果。
\n\nexcel ×7
vba ×3
editor ×1
extract ×1
extraction ×1
javascript ×1
regex ×1
sql-server ×1
string ×1