我已经在我的宏中停留了一周的代码,并且已经阅读并尝试了许多方法来解决这个问题。
我必须声明我对VBA不是很好,所以请耐心等待,我会感谢对某些步骤的象征性解释。
我想要做的事情实际上相当简单,我在一个表中有一个大约1000行的大型数据库,我希望尽可能有效地对同一行号的两列(带有重复项)进行匹配,例如:
第1栏:詹姆斯,约翰,约翰,詹姆斯,杰布
专栏#2:史密斯,李,史密斯,遗嘱,黑人
我想找到" John" &安培; "史密斯"简单的答案就是排#3。
但增加的复杂性是匹配目标是一个变量,例如
dim name1 as string
dim name2 as string
dim r as long
name1 = "John"
name2 = "Smith"
r = application.worksheetfunction.match(name1&name2,.range("A:A")&.range("B:B"),0)
必须通过宏中的多次迭代重复此函数。
我已尝试过使用for i = 1到1000并通过if参数单独匹配两列,但据我所知,我无法从循环中获取行号,即r = result.row在循环外变空。
非常感谢您阅读本文!这个论坛为我现有的代码做出了很多贡献,我非常感谢到目前为止的帮助。
答案 0 :(得分:0)
坚持' r'这是由数组中的Match()返回的。稍后,使用该数组进行进一步操作。
答案 1 :(得分:0)
本周早些时候我不得不做类似的事情,虽然问题看起来令人生畏,但阅读这里和其他地方的帖子给出了一个相当简单但简单的解决方案。
第1步: 在电子表格的C列中,插入以下公式
public class YourAdapter extends BaseAdapter {
private static int HEADER_TYPE = 0;
private static int CONTENT_TYPE_1 = 1;
private static int CONTENT_TYPE_2 = 2;
@Override
public int getViewTypeCount() {
return 3;
}
@Override
public int getItemViewType(int position) {
if (header)
return HEADER_TYPE;
else if (content_type_1)
return CONTENT_TYPE_1;
else
return CONTENT_TYPE_2;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (getItemViewType(position) == HEADER_TYPE) {
//make header view
} else if (getItemViewType(position) == CONTENT_TYPE_1 {
//make content view
//be careful position is the position in the list view
} else {
//make content view
//be careful position is the position in the list view
return convertView;
}
}
将其复制并粘贴到A和B中的所有单元格。
第2步: 您的VBA代码看起来不错。但是,您需要某种方法将结果打印到某个地方。您可以打印到消息框
=CONCATENATE(A1&B1)
或表格
例如。 =msgbox(r)
这些应该有希望解决你的问题。