[vba]excel中求选中数据和为给定数所有的组合

昨天下午开始学习的vba,累死了,肯定有bug,待调试

vba程序如下:

 1 Dim aSum As Integer
 2 Dim tSum As Integer
 3 Dim judge(30) As Integer
 4 Dim arrMax As Integer
 5 Dim arr
 6 Dim location(30) As Integer
 7
 8 Function Test()
 9     Dim arrWmax As Integer
10     Dim Rng As Range
11     Dim beginRow As Integer
12     Dim beginLine As Integer
13
14     Set Rng = Application.InputBox(prompt:="Please Select....", Type:=8)
15     rr = Rng.Address
16     beginRow = Rng.Column
17     beginLine = Rng.Row
18
19     arr = Range(rr)
20     aSum = 0
21     arrMax = UBound(arr)
22     arrWmax = UBound(arr, 2)
23
24     For loca = 1 To arrMax
25         location(loca) = beginLine
26         beginLine = beginLine + 1
27     Next
28
29     For col = 2 To arrWmax  ‘modify
30         tSum = arr(1, col)
31         Call subTest(1, beginRow)
32     Next
33
34 End Function
35
36 Function subTest(n As Integer, beginRow As Integer)
37     If aSum > tSum Then
38         Exit Function
39     End If
40
41     Dim i As Integer
42     Dim j As Integer
43     If aSum = tSum Then
44         For i = 1 To n
45             If judge(i) = 1 Then
46                 Sheets(1).Cells(location(i), beginRow).Interior.Color = vbRed
47             End If
48         Next
49
50         Exit Function
51     End If
52
53     If n = arrMax Then
54         Exit Function
55     End If
56
57     For j = n To arrMax
58         If judge(j) = 0 Then
59             judge(j) = 1
60             aSum = aSum + arr(j, 1)
61             Call subTest(j, beginRow)
62
63             judge(j) = 0
64             aSum = aSum - arr(j, 1)
65             If j < arrMax Then
66                 While arr(j, 1) = arr(j + 1, 1)
67                       j = j + 1
68                 Wend
69             End If
70         End If
71     Next
72
73 End Function
时间: 2024-10-12 10:23:48

[vba]excel中求选中数据和为给定数所有的组合的相关文章

接口测试中读取excel中的请求数据含有中文问题,UnicodeEncodeError: &#39;latin-1&#39; codec can&#39;t encode character &#39;\u5c0f&#39; in position

错误信息:UnicodeEncodeError: 'latin-1' codec can't encode character '\u5c0f' in position 31: Body ('小') is not valid Latin-1. Use body.encode('utf-8') if you want to send it encoded in UTF-8的错误 原因:从excel中读取你的接口请求数据时带有中文时在发送求情时会出现上述错误.只需要将请求数据转化为bytes类型即可

java程序转换excel中科学记数法的数据为date类型

今天出于某些原因从mongodb数据库中导出了一些数据,为了更直观的发送给其他人查阅,便使用mongoVUE的导出为excel功能. 但是导出后出现了一个问题,里边有一列存储时间的,存储的是long型毫秒数,在导出后就自动变成了科学记数法. 且不说从科学记数法中辨别出实际时间,即便是原本的毫秒值也是不易于辨别的,但是这些long值不能直接在excel中转换成date类型,因此我便想到使用poi来把这些毫秒值转换成date再写入原文件中. 从mongodb中导出的excel的科学记数法如下图: j

Excel中如何对数据进行简单排序

excel表格如何排序,在Excel 2013中,对数据表中的数据进行排序时,如果按照单列的内容进行简单排序,可以直接使用选项板中的"升序"选项或"降序"选项来完成.[解决方法,教程视频资料如下] 本教程视频资料来源:http://edu.51cto.com/course/15404.html 完整博客资料:http://blog.51cto.com/13172026/2292179 完整视频资料:http://edu.51cto.com/lecturer/1316

VBA excel中批量创建超链接代码(连接当前文档中的sheet)

excel中批量创建超链接代码(连接当前文档中的sheet),在sheet1中B列中要创建一系列的超链接,链接的内容是本文档中的其他sheet,如下图,在sheet1下创建宏,代码如下. Sub 宏1() Dim temp, temp2 Dim i, j j = 1 For i = 5 To 74 temp = "'G" & j & "'!A1" temp2 = "G" & j Range("B" &a

EXCEL VBA中写了个宏把本EXCEL中的表数据批量导出为csv格式的文件

Sub csv()    Dim Fs, myFile As Object    Dim myfileline As String 'txtfile的行数据    Dim sht As Worksheet        For Each sht In ThisWorkbook.Sheets        ns = sht.Cells(1, 8)        Set Fs = CreateObject("Scripting.FileSystemObject")   '建立filesyt

VBS读取txt文档数据查找Excel中单元格数据符合条件的剪切到工作表2中

Dim fso,f,a set oExcel = CreateObject( "Excel.Application" ) oExcel.Visible = false '4) 打开已存在的工作簿: oExcel.WorkBooks.Open( "F:\1.xlsx" ) On Error Resume Next '判断是否存在Sheet2工作表,不存在新建 If oExcel.WorkSheets("Sheet2") Is Nothing The

往Excel中快速写入数据的又一种方法

往Excel写入数据的方法比较多,但实际应用场景及对性能的要求决定了需要对方法有所取舍.一些具体情形和方法可以参见https://blog.csdn.net/u013109267/article/details/52651647?locationNum=2&fps=1 但受到.Net framework及Excel版本的影响,一些比较旧的方法不再有效.比如上面网页中快速写入的关键方法get_Range和set_Value在新的VSTO环境中就受到影响.但原帖中的思路跟方法是可以借鉴的: //将T

VBA Excel 对比两列数据

Sub Md() ' ' Macro1 Macro ' 宏由 BX 录制,时间: 2012-6-8 ' 宏中的列数可以输入 A - IV 也可以输入 1-256 ' Dim i%, j%, i1%, j1%, i2%, j2% myi = UCase(InputBox("第一列")) myj = UCase(InputBox("第二列")) ' '************************************ If myi Like "[A-Z]

VBA excel中表示列的字母换成数字

出自这里 数字转列标: Split(Cells(1,1).Address(1,0),"$")(0)    '将1-256替换红色的1就可以 Cells(1, a) 选中对应的第一行第A列的一个单元格: Address的返回值为该单元格的绝对地址 ,如$A$1,即A列1行: 它有4个参数,咱们直说前俩,第一个为行的绝对路径,默认为true,第二个为列的绝对路径默认为false a: Cells(1, 1).Address() "$A$1" b: Cells(1, 1)