ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 262|回复: 8

[求助] If i And j 是什么意思

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-9-30 09:21 | 显示全部楼层 |阅读模式
执行以下代码:


Sub aaa()
For i = 1 To 10
    For j = 1 To 10
        b = 0
        a = i And j
        If i And j Then     '''这句话什么意思?
            b = 1
        End If
        Debug.Print "i=" & i & ",j=" & j & ",a=" & a & ",b=" & b
    Next
Next
End Sub
结果是:


i=1,j=1,a=1,b=1
i=1,j=2,a=0,b=0
i=1,j=3,a=1,b=1
i=1,j=4,a=0,b=0
i=1,j=5,a=1,b=1
i=1,j=6,a=0,b=0
i=1,j=7,a=1,b=1
i=1,j=8,a=0,b=0
i=1,j=9,a=1,b=1
i=1,j=10,a=0,b=0
i=2,j=1,a=0,b=0
i=2,j=2,a=2,b=1
i=2,j=3,a=2,b=1
i=2,j=4,a=0,b=0
i=2,j=5,a=0,b=0
i=2,j=6,a=2,b=1
i=2,j=7,a=2,b=1
i=2,j=8,a=0,b=0
i=2,j=9,a=0,b=0
i=2,j=10,a=2,b=1
i=3,j=1,a=1,b=1
i=3,j=2,a=2,b=1
i=3,j=3,a=3,b=1
i=3,j=4,a=0,b=0
i=3,j=5,a=1,b=1
i=3,j=6,a=2,b=1
i=3,j=7,a=3,b=1
i=3,j=8,a=0,b=0
i=3,j=9,a=1,b=1
i=3,j=10,a=2,b=1
i=4,j=1,a=0,b=0
i=4,j=2,a=0,b=0
i=4,j=3,a=0,b=0
i=4,j=4,a=4,b=1
i=4,j=5,a=4,b=1
i=4,j=6,a=4,b=1
i=4,j=7,a=4,b=1
i=4,j=8,a=0,b=0
i=4,j=9,a=0,b=0
i=4,j=10,a=0,b=0
i=5,j=1,a=1,b=1
i=5,j=2,a=0,b=0
i=5,j=3,a=1,b=1
i=5,j=4,a=4,b=1
i=5,j=5,a=5,b=1
i=5,j=6,a=4,b=1
i=5,j=7,a=5,b=1
i=5,j=8,a=0,b=0
i=5,j=9,a=1,b=1
i=5,j=10,a=0,b=0
i=6,j=1,a=0,b=0
i=6,j=2,a=2,b=1
i=6,j=3,a=2,b=1
i=6,j=4,a=4,b=1
i=6,j=5,a=4,b=1
i=6,j=6,a=6,b=1
i=6,j=7,a=6,b=1
i=6,j=8,a=0,b=0
i=6,j=9,a=0,b=0
i=6,j=10,a=2,b=1
i=7,j=1,a=1,b=1
i=7,j=2,a=2,b=1
i=7,j=3,a=3,b=1
i=7,j=4,a=4,b=1
i=7,j=5,a=5,b=1
i=7,j=6,a=6,b=1
i=7,j=7,a=7,b=1
i=7,j=8,a=0,b=0
i=7,j=9,a=1,b=1
i=7,j=10,a=2,b=1
i=8,j=1,a=0,b=0
i=8,j=2,a=0,b=0
i=8,j=3,a=0,b=0
i=8,j=4,a=0,b=0
i=8,j=5,a=0,b=0
i=8,j=6,a=0,b=0
i=8,j=7,a=0,b=0
i=8,j=8,a=8,b=1
i=8,j=9,a=8,b=1
i=8,j=10,a=8,b=1
i=9,j=1,a=1,b=1
i=9,j=2,a=0,b=0
i=9,j=3,a=1,b=1
i=9,j=4,a=0,b=0
i=9,j=5,a=1,b=1
i=9,j=6,a=0,b=0
i=9,j=7,a=1,b=1
i=9,j=8,a=8,b=1
i=9,j=9,a=9,b=1
i=9,j=10,a=8,b=1
i=10,j=1,a=0,b=0
i=10,j=2,a=2,b=1
i=10,j=3,a=2,b=1
i=10,j=4,a=0,b=0
i=10,j=5,a=0,b=0
i=10,j=6,a=2,b=1
i=10,j=7,a=2,b=1
i=10,j=8,a=8,b=1
i=10,j=9,a=8,b=1
i=10,j=10,a=10,b=1
请问这里面 If i And j Then     这句话什么意思?看不懂呀,求大佬指点

TA的精华主题

TA的得分主题

发表于 2024-9-30 09:43 来自手机 | 显示全部楼层
按位与运算,这个得懂二进制。

TA的精华主题

TA的得分主题

发表于 2024-9-30 09:48 来自手机 | 显示全部楼层
比如i=3,j=7
则转成二进制是
0011
0111
进行按位与运算(同1为1),结果是
0011
结果就是十进制的3

TA的精华主题

TA的得分主题

发表于 2024-9-30 10:21 | 显示全部楼层
这是个好问题,之前都是默认0为false,其它数字为true,没想到and下会用二进制判断

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-30 10:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
今铭昔 发表于 2024-9-30 09:48
比如i=3,j=7
则转成二进制是
0011

感谢感谢,那这个的意义是什么呢?
我是问文言一心里面给的代码,要求实现给定一组数字,他们的和等于目标值,或者小于误差值。
  1. Sub FindSumCloseToTarget()  '文言一心
  2.     Dim ws As Worksheet
  3.     Dim LastRow As Long
  4.     Dim Target As Double
  5.     Dim tolerance As Double
  6.     Dim cell As Range
  7.     Dim Sum As Double
  8.     Dim isFound As Boolean
  9.     Dim combination() As Range
  10.     Dim i As Long, j As Long
  11.     Dim combinationsTotal As Long
  12.     Dim currentCombination As Long
  13.     Dim combinationSum As Double
  14.     Dim combinationArray() As Variant
  15.     Dim resultArray() As Variant
  16.     Dim usedCombination() As Boolean
  17.    

  18.     ' 设置工作表
  19.     Set ws = ThisWorkbook.Sheets("Sheet1") ' 修改为你的工作表名称
  20.       
  21.     ' 获取目标值和误差值
  22.     target = InputBox("请输入目标值 m:", "目标值")
  23.     tolerance = InputBox("请输入误差值 s:", "误差值")
  24.       
  25.     Range("A:A").ClearFormats
  26.    
  27.    
  28.     ' 获取A列最后一行
  29.     LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
  30.       
  31.     ' 初始化数组
  32.     ReDim combinationArray(1 To LastRow)
  33.     ReDim usedCombination(1 To LastRow)
  34.       
  35.     ' 遍历A列所有数字,初始化combinationArray
  36.     i = 1
  37.     For Each cell In ws.Range("A1:A" & LastRow)
  38.         If IsNumeric(cell.Value) Then
  39.             combinationArray(i) = cell.Value
  40.             i = i + 1
  41.         End If
  42.     Next cell
  43.       
  44.     ' 如果A列没有数字,则退出
  45.     If i = 1 Then
  46.         MsgBox "A列没有可用的数字。", vbExclamation
  47.         Exit Sub
  48.     End If
  49.       
  50.     ' 尝试所有可能的组合
  51.     combinationsTotal = 2 ^ (i - 1) - 1 ' 组合总数(排除空组合)
  52.     isFound = False
  53.       
  54.     For currentCombination = 1 To combinationsTotal
  55.         ' 重置求和和usedCombination数组
  56.         combinationSum = 0
  57.         For j = 1 To i - 1
  58.             usedCombination(j) = False
  59.             
  60.             If currentCombination And (2 ^ (j - 1)) Then ''''''就是这里,这个什么意思
  61.                 usedCombination(j) = True
  62.                 combinationSum = combinationSum + combinationArray(j)
  63.             End If
  64.         Next j
  65.          
  66.         ' 检查组合和是否在目标范围内
  67.         If Abs(combinationSum - Target) <= tolerance Then
  68.             isFound = True
  69.             ' 标记组合中的单元格为黄色背景
  70.             For j = 1 To i - 1
  71.                 If usedCombination(j) Then
  72.                     ws.Cells(j, 1).Interior.Color = vbYellow
  73.                     
  74.                 End If
  75.             Next j
  76.            
  77.             Exit For
  78.         End If
  79.     Next currentCombination
  80.    
  81.    
  82.    
  83.     ' 如果未找到符合条件的组合,则告知用户
  84.     If Not isFound Then
  85.         MsgBox "无法找到符合条件的组合。" , vbExclamation
  86.     End If
  87. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2024-9-30 13:38 来自手机 | 显示全部楼层
qisile 发表于 2024-9-30 10:26
感谢感谢,那这个的意义是什么呢?
我是问文言一心里面给的代码,要求实现给定一组数字,他们的和等于目 ...

我现在不怎么写VBA了,多半是运用二进制中1的位权判断组合是否存在,你可以搜关于运用二进制进行权限管理的知识

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-30 14:14 | 显示全部楼层
今铭昔 发表于 2024-9-30 13:38
我现在不怎么写VBA了,多半是运用二进制中1的位权判断组合是否存在,你可以搜关于运用二进制进行权限管理 ...

好的,感谢大佬指点  &#4326;( &#180;&#65381;&#7447;&#65381;` )比心

TA的精华主题

TA的得分主题

发表于 2024-9-30 14:15 | 显示全部楼层
image.png

dome-code.zip

1.05 KB, 下载次数: 8

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-30 14:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

学习学习,做笔记,感谢大佬
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-19 05:39 , Processed in 0.042454 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表