-
2021-01-19 23:44:13
不,不行表之间的循环引用是凌乱的。看到这个(十岁)的文章:
SQL By Design: The Circular Reference
有些DBMS可以处理这些,特别注意的是,但是MySQL会有问题。
第一个选择是,作为您的设计,使两个FK之一成为无效。这样可以解决鸡蛋问题(我应该先插入哪个表格?)。
尽管你的代码有一个问题。它将允许产品具有默认图片,该图片将引用另一个产品!
要禁止这样的错误,您的FK约束应该是:
CONSTRAINT FK_products_1
FOREIGN KEY (id, default_picture_id)
REFERENCES products_pictures (product_id, id)
ON DELETE RESTRICT --- the SET NULL options would
ON UPDATE RESTRICT --- lead to other issues
这将需要在上表FK的(product_id,id)的表products_pictures中定义UNIQUE约束/索引并正常工作。
另一种方法是从产品表中删除Default_Picture_ID列,并在图表中添加IsDefault BIT列。该解决方案的问题是如何让每个产品只有一张照片才能让所有其他照片都有效。在SQL Server中(我认为在Postgres中)可以使用部分索引:
CREATE UNIQUE INDEX is_DefaultPicture
ON products_pictures (Product_ID)
WHERE IsDefault = 1 ;
但MySQL没有这样的功能。
第三种方法允许您将两个FK列定义为NOT NULL都是使用可延迟的约束。这在PostgreSQL中有用,我认为在Oracle中。检查这个问题和@Erwin的答案:Complex foreign key constraint in SQLAlchemy(所有关键列NOT NULL部分)。
MySQL中的限制不能延迟。
第四种方法(我发现最干净)是删除Default_Picture_ID列并添加另一个表。 FK约束中没有循循环径,并且所有FK列将不会为此解决方案为NULL:
product_default_picture
----------------------
product_id NOT NULL
default_picture_id NOT NULL
PRIMARY KEY (product_id)
FOREIGN KEY (product_id, default_picture_id)
REFERENCES products_pictures (product_id, id)
这也将需要在解决方案1中的product_id图中的product_id中的UNIQUE约束/索引。
总而言之,使用MySQL有两个选项:
>选项1(可空的FK列)与上面的更正来强制完整性的完整性>选项4(无可空FK列)
更多相关内容 -
如何使用VLOOKUP函数查找引用其他工作表数据和自动填充数据
2012-05-16 11:46:49如何使用VLOOKUP函数查找引用其他工作表数据和自动填充数据 -
在Excel中如何引用其他的工作表或者工作簿
2019-01-13 18:46:37在Excel中如何引用其他的工作表或者工作簿http://www.office68.com/excel/426.html
公式中对单元格和单元格区域的引用不必非得针对同一个工作表中的单元格和单元格区域。如果要引用另外的工作表中的单元格,那么就在单元格引用的前面加上工作表的名称以及一个感叹号。下面举例说明使用了另一个工作表中的单元格引用的公式:
=Sheet2!A1+1
还可以创建引用另一个工作簿中的单元格的链接公式。为此,在单元格引用前加上工作簿的名称(放在方括号中)、工作表名称和一个感叹号。举例如下:
=[Budget.xls]Sheet1!A1+1
如果引用中的工作簿名称包括一个或者多个空格,那么就必须把它用单引号引起来(包括工作表的名称)。例如,
=’[Budget For 2003.xls]Sheet1′!A1+A1
如果链接的工作簿被关闭,那么就必须在工作簿引用中添加完整的路径。举例如下:
=’C:\MSOffice\Excel\[Budget For 2003.xls]Sheet1′!A1+A1
虽然可以直接输入链接公式,但是也可以通过使用普通的指示法来创建引用。为此,必须打开源文件。如果这么做了,excel就可以创建绝对单元格引用(如果打算将公式复制到其他的单元格,就要使得引用为相对的)。{
在那excel文件中按一個"="號然后把鼠標移到另一個excel文件中的數據那里點一下就可以了
注意當的你按下"="后鼠標不要按到別的地方}
使用链接有一些技巧。例如,假如选择“文件”——“另存为”命令备份一个源工作表的副本,就会自动将链接公式更改为引用新的文件(通常这不是所想要做的)。另一个错误的做法是,在相关的工作簿没有打开时,重新命名源工作簿。http://www.cnblogs.com/xinzaitian/archive/2008/11/12/1332357.html
在excel中我们经常会碰到跨表和跨页引用数据,现总结如下:
1.跨工作薄问题:同一文件中[Sheet1 B5]的数据怎么才能被[Sheet2 D8]引用?解:假如[sheet2 d8]是[Sheet1 B5]的二倍,那么 d8 输入公式:= Sheet1!B5*2
假如[sheet2 d8]是[Sheet1 B5]与[Sheet1 C5]的和,那么 d8 输入公式:= Sheet1!B5+Sheet1!C52.跨文件问题:假设有两个excel文件,分别绝对路径如下:c:\a.xls d:\b.xls , a.xls有 sheet1、sheet2、sheet3;b.xls也有sheet1、sheet2 ,如果要在c.xls引用a.xls中sheet2里单元格c6,怎么做?解:可以输入如下公式: = 'C:\[a.xls]sheet2'!C6;如果要多列引用:= sum('C:\[a.xls]sheet2'!C6:C12)+sum('C:\[b.xls]sheet1'!C6:C12)总结下:1、文件名用[]引用;2、表单跟单元格之间用!隔开;3、路径可以是绝对路径也可以是相对路径(同一目录下),且带上扩展名;4、引用还有个好处就是能自动更新例如修改a.xls中sheet2中c6的值,下次打开c.xls,会提示是否自动更新,如果选是,则可以自动同步;http://www.dzwebs.net/471.html
在Excel 中输入公式时,只要正确使用F4键,就能简单地对单元格的相对引用和绝对引用进行切换。现举例说明。
对于某单元格所输入的公式为“=SUM(B4:B8)”。
选中整个公式:
第一次按下F4键,该公式内容变为“=SUM($B$4:$B$8)”,表示对横、纵行单元格均进行绝对引用。
第二次按下F4键,公式内容又变为“=SUM(B$4:B$8)”,表示对横行进行绝对引用,纵行相对引用。
第三次按下F4键,公式则变为“=SUM($B4:$B8)”,表示对横行进行相对引用,对纵行进行绝对引用。
第四次按下F4键时,公式变回到初始状态“=SUM(B4:B8)”,即对横行纵行的单元格均进行相对引用。
需要说明的一点是,F4键的切换功能只对所选中的公式段有作用。
知识扩展:Excel中单元格引用的知识①相对引用
公式中的相对单元格引用(例如 A1)是基于包含公式和单元格引用的单元格的相对位置。如果公式所在单元格的位置改变,引用也随之改变。如果多行或多列地复制公式,引用会自动调整。默认情况下,新公式使用相对引用。例如,如果将单元格 B2 中的相对引用复制到单元格 B3,将自动从 =A1 调整到 =A2。
②绝对引用
单元格中的绝对单元格引用(例如 $A$1)总是在指定位置引用单元格。如果公式所在单元格的位置改变,绝对引用保持不变。如果多行或多列地复制公式,绝对引用将不作调整。默认情况下,新公式使用相对引用,需要将它们转换为绝对引用。例如,如果将单元格 B2 中的绝对引用复制到单元格 B3,则在两个单元格中一样,都是 $A$1。
③混合引用
混合引用具有绝对列和相对行,或是绝对行和相对列。绝对引用列采用 $A1、$B1 等形式。绝对引用行采用 A$1、B$1 等形式。如果公式所在单元格的位置改变,则相对引用改变,而绝对引用不变。如果多行或多列地复制公式,相对引用自动调整,而绝对引用不作调整。例如,如果将一个混合引用从 A2 复制到 B3,它将从 =A$1 调整到 =B$1。
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow
-
Excel引用其他工作表数据的几种方法
2015-06-01 09:10:48假如要让Sheet2表中的A1单元格与Sheet1表中的A3单元格中的数据保持一致,只要在Sheet2中的A1单元格中输入公式: =Sheet1!A3 另外,还可以在Sheet2表的A1单元格中先输入“=”,再切换到Sheet1表中,选择...法一:直接使用公式
假如要让Sheet2表中的A1单元格与Sheet1表中的A3单元格中的数据保持一致,只要在Sheet2中的A1单元格中输入公式: =Sheet1!A3 另外,还可以在Sheet2表的A1单元格中先输入“=”,再切换到Sheet1表中,选择A3单元格,然后按回车键。 方法二:使用粘贴选项
复制要链接的单元格,然后选择其他单元格进行“粘贴”,在单元格的右下角单击“粘贴选项”按钮,选择“链接单元格”。 方法三:使用选择性粘贴
复制要链接的单元格,然后右击其他单元格,在弹出的快捷菜单中选择“选择性粘贴”,单击“粘贴链接”按钮即可。 -
在VBA代码中引用Excel工作表中单元格区域的方式小结
2018-08-27 19:06:56问题一:在VBA代码中,如何引用当前工作表中的单个单元格(例如引用单元格C3)? 回答:可以使用下面列举的任一方式对当前工作表中的单元格(C3)进行引用。 (1) Range("C3") (2) [C3] (3) Cells(3, 3) ...问题一:在VBA代码中,如何引用当前工作表中的单个单元格(例如引用单元格C3)?
回答:可以使用下面列举的任一方式对当前工作表中的单元格(C3)进行引用。
(1) Range("C3")
(2) [C3]
(3) Cells(3, 3)
(4) Cells(3, "C")
(5) Range("C4").Offset(-1)
Range("D3").Offset(, -1)
Range("A1").Offset(2, 2)
(6) 若C3为当前单元格,则可使用:ActiveCell
(7) 若将C3单元格命名为“Range1”,则可使用:Range("Range1")或[Range1]
(8) Cells(4, 3).Offset(-1)
(9) Range("A1").Range("C3")
问题二:在VBA代码中,我要引用当前工作表中的B2:D6单元格区域,有哪些方式?
回答:可以使用下面列举的任一方式对当前工作表中单元格区域B2:D6进行引用。
(1) Range(“B2:D6”)
(2) Range("B2", "D6")
(3) [B2:D6]
(4) Range(Range("B2"), Range("D6"))
(5) Range(Cells(2, 2), Cells(6, 4))
(6) 若将B2:D6区域命名为“MyRange”,则又可以使用下面的语句引用该区域:
① Range("MyRange")
② [MyRange]
(7) Range("B2").Resize(5, 3)
(8) Range("A1:C5").Offset(1, 1)
(9) 若单元格B2为当前单元格,则可使用语句:Range(ActiveCell, ActiveCell.Offset(4, 2))
(10) 若单元格D6为当前单元格,则可使用语句:Range("B2", ActiveCell)
问题三:在VBA代码中,如何使用变量实现对当前工作表中不确定单元格区域的引用?
回答:有时,我们需要在代码中依次获取工作表中特定区域内的单元格,这通常可以采取下面的几种方式:
(1) Range(“A” & i)
(2) Range(“A” & i & “:C” & i)
(3) Cells(i,1)
(4) Cells(i,j)
其中,i、j为变量,在循环语句中指定i和j的范围后,依次获取相应单元格。
问题四:在VBA代码中,如何扩展引用当前工作表中的单元格区域?
回答:可以使用Resize属性,例如:
(1) ActiveCell.Resize(4, 4),表示自当前单元格开始创建一个4行4列的区域。
(2) Range("B2").Resize(2, 2),表示创建B2:C3单元格区域。
(3) Range("B2").Resize(2),表示创建B2:B3单元格区域。
(4) Range("B2").Resize(, 2),表示创建B2:C2单元格区域。
如果是在一个单元格区域(如B3:E6),或一个命名区域中(如将单元格区域B3:E6命名为“MyRange”)使用Resize属性,则只是相对于单元格区域左上角单元格扩展区域,例如:
代码Range("C3:E6").Resize(, 2),表示单元格区域C3:D6,并且扩展的单元格区域可不在原单元格区域内。
因此,可以知道Resize属性是相对于当前活动单元格或某单元格区域中左上角单元格按指定的行数或列数扩展单元格区域。
问题五:在VBA代码中,如何在当前工作表中基于当前单元格区域或指定单元格区域处理其它单元格区域?
回答:可以使用Offset属性,例如:
(1) Range("A1").Offset(2, 2),表示单元格C3。
(2) ActiveCell.Offset(, 1),表示当前单元格下一列的单元格。
(3) ActiveCell.Offset(1),表示当前单元格下一行的单元格。
(4) Range("C3:D5").Offset(, 1),表示单元格区域D3:E5,即将整个区域偏移一列。
从上面的代码示例可知,Offset属性从所指定的单元格开始按指定的行数和列数偏移,从而到达目的单元格,但偏移的行数和列数不包括指定单元格本身。
问题六:在VBA代码中,如何在当前工作表中引用交叉区域?
回答:可以使用Intersect方法,例如:
Intersect(Range("C3:E6"), Range("D5:F8")),表示单元格区域D5:E6,即单元格区域C3:E6与D5:F8相重迭的区域。
问题七:在VBA代码中,如何在当前工作表中引用多个区域?
回答:
(1) 可以使用Union方法,例如:
Union(Range("C3:D4"), Range("E5:F6")),表示单元格区域C3:D4和E5:F6所组成的区域。
Union方法可以将多个非连续区域连接起来成为一个区域,从而可以实现对多个非连续区域一起进行操作。
(2) 也可以使用下面的代码:
Range("C3:D4, E5:F6")或[C3:D4, E5:F6]
注意:Range("C3:D4","F5:G6"),表示单元格区域C3:G6,即将两个区域以第一个区域左上角单元格为起点,以第二个区域右下角单元格为终点连接成一个新区域。
同时,在引用区域后使用Rows属性和Columns属性时,注意下面代码的区别:
①Range("C3:D4", "F8:G10").Rows.Count,返回的值为8;
②Range("C3:D4,F8:G10").Rows.Count,返回的值为2,即只计算第一个单元格区域。
问题八:在VBA代码中,如何引用当前工作表中活动单元格或指定单元格所在的区域(当前区域)?
回答:可以使用CurrentRegion属性,例如:
(1) ActiveCell.CurrentRegion,表示活动单元格所在的当前区域。
(2) Range("D5").CurrentRegion,表示单元格D5所在的当前区域。
当前区域是指周围由空行或空列所围成的区域。该属性的详细使用参见《CurrentRegion属性示例》一文。
问题九:在VBA代码中,如何引用当前工作表中已使用的区域?
回答:可以使用UsedRange属性,例如:
(1) Activesheet.UsedRange,表示当前工作表中已使用的区域。
(2) Worksheets("sheet1").UsedRange,表示工作表sheet1中已使用的区域。
与CurrentRegion属性不同的是,该属性代表工作表中已使用的单元格区域,包括显示为空行,但已进行过格式的单元格区域。该属性的详细使用参见《解析UsedRange属性》一文。
问题十:如何在单元格区域内指定特定的单元格?
回答:可以使用Item属性,例如:
(1)Range("A1:B10").Item(5,3)指定单元格C5,这个单元格处于以区域中左上角单元格A1(即区域中第1行第1列的单元格)为起点的第5行第3列。因为Item属性为默认属性,因此也可以简写为:Range("A1:B10")(5,3)。
如果将A1:B10区域命名为”MyRange”,那么Range("MyRange")(5,3)也指定单元格C5。
(2) Range("A1:B10")(12,13)指定单元格M12,即用这种方式引用单元格,该单元格不必一定要包含在区域内。
同时,也不需要索引数值是正值,例如:
① Range("D4:F6")(0,0)代表单元格C3;
② Range("D4:F6")(-1,-2)代表单元格A2。
而Range("D4:F6")(1,1)代表单元格D4。
(3) 也可以在单元格区域中循环,例如:
Range("D4:F6")(2,2)(3,4)代表单元格H7,即该单元格位于作为左上角单元格E5的第3行第4列(因为E5是开始于区域中左上角单元格D4起的第2行第2列)。
(4) 也能使用一个单个的索引数值进行引用。计数方式为从左向右,即在区域中的第一行开始从左向右计数,第一行结束后,然后从第二行开始从左到右接着计数,依次
类推。(注:从区域中第一行第一个单元格开始计数,当第一行结束时,转入第二行最左边的单元格,这样按一行一行从左向右依次计数。以单元格区域中第1个单
元格开始,按上述规则依次为第2个单元格、第3个单元格….等等),例如:
Range("A1:B2")(1) 代表单元格A1;
Range("A1:B2")(2) 代表单元格B1;
Range("A1:B2")(3) 代表单元格A2;
Range("A1:B2")(4) 代表单元格B2。
这种方法可在工作表中连续向下引用单元格(即不一定是在单元格区域内,但在遵循相同的规律),例如:
Range("A1:B2")(5)代表单元格A3;
Range("A1:B2")(14)代表单元格B7,等等。
也可以使用单个的负数索引值。
这种使用单个索引值的方法对遍历列是有用的,例如,Range("D4")(1)代表单元格D4,Range("D4")(2)代表单元格D5,Range
("D4")(11)代表单元格D14,等等。
同理,稍作调整后也可遍历行,例如:
Range("D4").Columns(2)代表单元格E4,Range("D4").Columns(5)指定单元格H4,等等。
(5)当与对象变量配合使用时,Item属性能提供简洁并有效的代码,例如:
Set rng = Worksheets(1).[a1]
定义了对象变量后,像单元格方法一样,Item属性允许使用两个索引数值引用工作表中的任一单元格,例如,rng(3,4)指定单元格D3。(By ChipPearson)
问题十一:在VBA代码中,如何引用当前工作表中的整行或整列?
回答:见下面的示例代码:
(1) Range("C:C").Select,表示选择C列。
Range("C:E").Select,表示选择C列至E列。
(2) Range("1:1").Select,表示选择第一行。
Range("1:3").Select,表示选择第1行至第3行。
(3) Range("C:C").EntireColumn,表示C列;
Range("D1").EntireColumn,表示D列。
同样的方式,也可以选择整行,然后可以使用如AutoFit方法对整列或整行进行调整。
问题十二:在VBA代码中,如何引用当前工作表中的所有单元格?
回答:可以使用下面的代码:
(1) Cells,表示当前工作表中的所有单元格。
(2) Range(Cells(1, 1), Cells(Cells.Rows.Count, Cells.Columns.Count)),其中Cells.Rows表示工作表所有行,Cells. Columns表示工作表所有列。
问题十三:在VBA代码中,如何引用工作表中的特定单元格区域?
回答:在工作表中,您可能使用过“定位条件”对话框。可以通过选择菜单“编辑——定位”,单击“定位”对话框中的“定位条件”按钮显示该对话框。这个对话框可以允许用户选择特定的单元格。例如:
(1)Worksheets("sheet1").Cells.SpecialCells(xlCellTypeAllFormatConditions),表示工作表sheet1中由带有条件格式的单元格所组成的区域。
(2)ActiveCell.CurrentRegion.SpecialCells(xlCellTypeBlanks),表示当前工作表中活动单元格所在区域中所有空白单元格所组成的区域。
问题十四:在VBA代码中,如何引用其它工作表或其它工作簿中的单元格区域?
回答:要引用其它工作表或其它工作簿中的单元格区域,只需在单元格对象前加上相应的引用对象即可,例如:
(1) Worksheets(“Sheet3”).Range(“C3:D5”),表示引用工作表sheet3中的单元格区域C3:D5。
(2)Workbooks(“MyBook.xls”).Worksheets(“sheet1”).Range(“B2”),表示引用MyBook工作簿中工作表Sheet1上的单元格B2。
问题十五:还有其它的一些情形吗?
回答:列举如下:
(1)Cells(15),表示单元格O1,即可在Cells属性中指定单元格数字来选择单元格,其计数顺序为自左至右、从上到下,又如Cells(257),表示单元格B1。
(2) Cells(, 256),表示单元格IV1,但是如果Cells(, 257),则会返回错误。
结语
我们用VBA对Excel进行处理,一般是对其工作表中的数据进行处理,因此,引用单元格区域是ExcelVBA编程中最基本的操作之一,只有确定了所处理的单元格区域,才能使用相应的属性和方法进行下一步的操作。
上面列举了一些引用单元格区域的情形和方式,可以看出,引用单元格区域有很多方式,有一些可能不常用,可以根据工作表的所处的环境和个人编程习惯进行选择使用。
当然,在编写程序时,也可能会将上面的一些属性联合使用,以达到选取特定操作对象的目的,例如Offset属性、Resize属性、CurrentRegion属性、UsedRange属性等的组合。
如何选择当前工作表中的单元格?
例如,可以使用下面的代码选择当前工作表中的单元格D5:
ActiveSheet.Cells(5, 4).Select
或:ActiveSheet.Range("D5").Select
如何选择同一工作簿中其它工作表上的单元格?
例如,要选择同一工作簿中另一工作表上的单元格E6,可以使用下面的代码:
Application.Goto ActiveWorkbook.Sheets("Sheet2").Cells(6, 5)
或:Application.Goto (ActiveWorkbook.Sheets("Sheet2").Range("E6"))
也可以先激活该工作表,然后再选择:
Sheets("Sheet2").Activate
ActiveSheet.Cells(6, 5).Select
如何选择不同工作簿中的单元格?
例如,要选择另一工作簿中的一个工作表上的单元格F7,可以使用下面的代码:
Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Cells(7, 6)
或:Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("F7")
也可以先激活该工作簿中的工作表,然后再选择:
Workbooks("BOOK2.XLS").Sheets("Sheet1").Activate
ActiveSheet.Cells(7, 6).Select
如何选择当前工作表中的单元格区域?
例如,要选择当前工作表中的单元格区域C2:D10,可以使用下面的代码:
ActiveSheet.Range(Cells(2, 3), Cells(10, 4)).Select
或:ActiveSheet.Range("C2:D10").Select
或:ActiveSheet.Range("C2", "D10").Select
如何选择同一工作簿中另一工作表上的单元格区域?
例如,要选择同一工作簿中另一工作表上的单元格区域D3:E11,可以使用下面的代码:
Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("D3:E11")
或:Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("D3", "E11")
也可以先激活该工作表,然后再选择:
Sheets("Sheet3").Activate
ActiveSheet.Range(Cells(3, 4), Cells(11, 5)).Select
如何选择不同工作簿中工作表上的单元格区域?
例如,要选择另一工作簿中某工作表上的单元格区域E4:F12,可以使用下面的代码:
Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("E4:F12")
或:Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("E4", "F12")
也可以先激活该工作表,然后再选择:
Workbooks("BOOK2.XLS").Sheets("Sheet1").Activate
ActiveSheet.Range(Cells(4, 5), Cells(12, 6)).Select
如何在当前工作表中选择命名区域?
例如,要选择当前工作表中名为“Test”的区域,可以使用下面的代码:
Range("Test").Select
或:Application.Goto "Test"
如何选择同一工作簿中另一工作表上的命名区域?
例如,选择同一工作簿中另一工作表上名为“Test”的区域,可使用下面的代码:
Application.Goto Sheets("Sheet1").Range("Test")
也可以先激活工作表,再选择:
Sheets("Sheet1").Activate
Range("Test").Select
如何选择不同工作簿中工作表上的命名区域?
例如,要选择不同工作簿中工作表上名为“Test”的区域,可使用下面的代码:
Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet2").Range("Test")
也可以先激活工作表,再选择:
Workbooks("BOOK2.XLS").Sheets("Sheet2").Activate
Range("Test").Select
如何选择与当前单元格相关的单元格?
例如,要选择距当前单元格下面5行左侧4列的单元格,可以使用下面的代码:
ActiveCell.Offset(5, -4).Select
要选择距当前单元格上方2行右侧3列的单元格,可以使用下面的代码:
ActiveCell.Offset(-2, 3).Select
注意:一定要保证当前单元格与所选单元格之间的距离在工作表范围内,否则会出错。
如何选择与另一单元格(不是当前单元格)相关的单元格?
例如,要选择距单元格C7下方5行右侧4列的单元格,可以使用下面的代码:
ActiveSheet.Cells(7, 3).Offset(5, 4).Select
或:ActiveSheet.Range("C7").Offset(5, 4).Select
如何选择偏离指定区域的一个单元格区域?
例如,要选择与名为“Test”的区域大小相同但在该区域下方4行右侧3列的一个区域,可以使用下面的代码:
ActiveSheet.Range("Test").Offset(4, 3).Select
如果该命名区域不在当前工作表中,可以先激活该工作表,然后再选择,如下面的代码:
Sheets("Sheet3").Activate
ActiveSheet.Range("Test").Offset(4, 3).Select
如何选择一个指定的区域并扩展区域的大小?
例如,要选择当前工作表中名为“Database”区域,然后将该区域向下扩展5行,可以使用下面的代码:
Range("Database").Select
Selection.Resize(Selection.Rows.Count + 5, Selection.Columns.Count).Select
如何选择一个指定的区域,再偏离,然后扩展区域的大小?
例如,选择名为“Database”区域下方4行右侧3列的一个区域,然后扩展2行和1列,可以使用下面的代码:
Range("Database").Select
Selection.Offset(4, 3).Resize(Selection.Rows.Count + 2, Selection.Columns.Count + 1).Select
如何选择两个或多个指定区域?
例如,为了同时选择名为“Test”和“Sample”的两个区域,可以使用下面的代码:
Application.Union(Range("Test"), Range("Sample")).Select
注意,这两个区域须在同一工作表中,如下面的代码:
Set y = Application.Union(Range("Sheet1!A1:B2"), Range("Sheet1!C3:D4"))
但Union方法不能处理不同工作表中的区域,可下面的代码:
Set y = Application.Union(Range("Sheet1!A1:B2"), Range("Sheet2!C3:D4"))
将会出错。
如何选择两个或多个指定区域的交叉区域?
例如,要选择名为“Test”和“Sample”的两个区域的交叉区域,可以使用下面的代码:
Application.Intersect(Range("Test"), Range("Sample")).Select
注意,两个区域必须在同一工作表中。
= = = = = = = = = = = = = = = = = = = = = = = = =
下面的示例使用了如下图所示的工作表。
如何选择连续数据列中的最后一个单元格?
例如,要选择一个连续列中的最后一个单元格,可以使用下面的代码:
ActiveSheet.Range("a1").End(xlDown).Select
该代码使用在上面的工作表中,单元格A4被选择。
如何选择连续数据列底部的空单元格?
例如,要选择连续单元格区域下面的单元格,可以使用下面的代码:
ActiveSheet.Range("a1").End(xlDown).Offset(1, 0).Select
该代码使用在上面的工作表中,单元格A5被选择。
如何选择某列中连续数据单元格区域?
例如,要选择一列中的连续数据单元格区域,可以使用下面的代码:
ActiveSheet.Range("a1", ActiveSheet.Range("a1").End(xlDown)).Select
或:ActiveSheet.Range("a1:" & ActiveSheet.Range("a1").End(xlDown).Address).Select
该代码使用在上面的工作表中,单元格区域A1:A4将被选择。
如何选择某列中非连续数据单元格区域?
例如,要选择某列中非连续数据单元格区域,可以使用下面的代码:
ActiveSheet.Range("a1", ActiveSheet.Range("a65536").End(xlUp)).Select
或:ActiveSheet.Range("a1:" & ActiveSheet.Range("a65536").End(xlUp).Address).Select
该代码使用在上面的工作表中,单元格区域A1:A6将被选择。
如何选择一个矩形(规则的)单元格区域?
要选择围绕某单元格的一个矩形区域,可以使用CurrentRegion方法。CurrentRegion方法将选择四周被空行和空列围绕的区域,如下面的代码:
ActiveSheet.Range("a1").CurrentRegion.Select
该代码使用在上面的工作表中,将选择单元格区域A1:C4。也可以使用下面的代码:
ActiveSheet.Range("a1", ActiveSheet.Range("a1").End(xlDown).End(xlToRight)).Select
或:
ActiveSheet.Range("a1:" & ActiveSheet.Range("a1").End(xlDown).End(xlToRight).Address).Select
若想选择单元格区域A1:C6,可使用下面的代码:
lastCol = ActiveSheet.Range("a1").End(xlToRight).Column
lastRow = ActiveSheet.Cells(65536, lastCol).End(xlUp).Row
ActiveSheet.Range("a1", ActiveSheet.Cells(lastRow, lastCol)).Select
或:
lastCol = ActiveSheet.Range("a1").End(xlToRight).Column
lastRow = ActiveSheet.Cells(65536, lastCol).End(xlUp).Row
ActiveSheet.Range("a1:" & ActiveSheet.Cells(lastRow, lastCol).Address).Select
= = = = = = = = = = = = = = = = = = = =
如何选择多个不同长度的非连续列?
例如,有下图所示的工作表:
要同时选择A列和C列中的数据,即单元格区域A1:A3和C1:C6,可使用下面的代码:
StartRange = "A1"
EndRange = "C1"
Set a = Range(StartRange, Range(StartRange).End(xlDown))
Set b = Range(EndRange, Range(EndRange).End(xlDown))
Union(a, b).Select
= = = = = = = = = = = = = = = = = = = =
注:使用Application.Goto方法,如果指定另一工作表(不是当前工作表)中的指定区域,在Range属性中使用两个Cells属性时,则必须包括Sheets对象,如:
Application.Goto Sheets("Sheet1").Range(Sheets("Sheet1").Range(Sheets("Sheet1").Cells(2, 3), Sheets("Sheet1").Cells(4, 5)))
= = = = = = = = = = = = = = = = = = = =
在VBA中,Range 对象既可表示单个单元格,也可表示单元格区域。下面的内容说明了标识和处理Range对象最常用的方法。
引用工作表上的所有单元格
如果对工作表应用 Cells 属性时不指定索引号,该方法将返回代表工作表上所有单元格的 Range 对象。以下 Sub 过程清除活动工作簿中 Sheet1 上的所有单元格的内容。
Sub ClearSheet()
Worksheets("Sheet1").Cells.ClearContents
End Sub
使用 A1 表示法引用单元格和区域
可使用 Range 属性引用 A1 引用样式中的单元格或单元格区域。下述子例程将单元格区域 A1:D5 的字体设置为加粗。
Sub FormatRange()
Workbooks("Book1").Sheets("Sheet1").Range("A1:D5") _
.Font.Bold = True
End Sub
下表演示了使用 Range 属性的一些 A1 样式引用。
引用 含义
Range("A1") 单元格 A1
Range("A1:B5") 从单元格 A1 到单元格 B5 的区域
Range("C5:D9,G9:H16") 多块选定区域
Range("A:A") A 列
Range("1:1") 第一行
Range("A:C") 从 A 列到 C 列的区域
Range("1:5") 从第一行到第五行的区域
Range("1:1,3:3,8:8") 第 1、3 和 8 行
Range("A:A,C:C,F:F") A 、C 和 F 列
引用行和列
可用 Rows 属性或 Columns 属性来处理整行或整列。这两个属性返回代表单元格区域的 Range 对象。在下例中,Rows(1) 返回 Sheet1 上的第一行,然后将区域字体加粗。
Sub RowBold()
Worksheets("Sheet1").Rows(1).Font.Bold = True
End Sub
下表举例说明了使用 Rows 和 Columns 属性的一些行和列的引用。
引用 含义
Rows(1) 第一行
Rows 工作表上所有的行
Columns(1) 第一列
Columns("A") 第一列
Columns 工作表上所有的列
若要同时处理若干行或列,可创建一个对象变量并使用 Union 方法,将对 Rows 属性或 Columns 属性的多个调用组合起来。下例将活动工作簿中第一张工作表上的第一行、第三行和第五行的字体设置为加粗。
Sub SeveralRows()
Worksheets("Sheet1").Activate
Dim myUnion As Range
Set myUnion = Union(Rows(1), Rows(3), Rows(5))
myUnion.Font.Bold = True
End Sub
使用索引号引用单元格
通过使用行列索引号,可用 Cells 属性引用单个单元格。该属性返回代表单个单元格的 Range 对象。在下例中,Cells(6,1) 返回 Sheet1 上的单元格 A6,然后将 Value 属性设置为 10。
Sub EnterValue()
Worksheets("Sheet1").Cells(6, 1).Value = 10
End Sub
因为可用变量替代编号,所以 Cells 属性非常适合于在单元格区域中循环,如下例中所示。
Sub CycleThrough()
Dim Counter As Integer
For Counter = 1 To 20
Worksheets("Sheet1").Cells(Counter, 3).Value = Counter
Next Counter
End Sub
如果要同时更改某个区域中所有单元格的属性(或将方法应用于该区域中的所有单元格),建议使用 Range 属性。
使用快捷表示法引用单元格
可用方括号将 A1 引用样式或命名区域括起来,作为 Range 属性的快捷方式。这样就不必键入单词“Range”或使用引号了,如下例中所示。
Sub ClearRange()
Worksheets("Sheet1").[A1:B5].ClearContents
End Sub
Sub SetValue()
[MyRange].Value = 30
End Sub
使用 Range 对象引用单元格
如果将对象变量设置为 Range 对象,即可用变量名轻松地操作单元格区域。
以下过程将创建对象变量 myRange,然后将活动工作簿中 Sheet1 上的区域 A1:D5 赋予该变量。随后的语句用该变量名称代替 Range 对象,以修改该区域的属性。
Sub Random()
Dim myRange As Range
Set myRange = Worksheets("Sheet1").Range("A1:D5")
myRange.Formula = "=RAND()"
myRange.Font.Bold = True
End Sub
引用命名区域
用名称比用 A1 样式记号更容易标识单元格区域。若要命名选定的单元格区域,请单击编辑栏左端的名称框,键入名称,再按 Enter。
引用命名区域
以下示例引用名为“MyBook.xls”的工作簿中名为“MyRange”的区域。
Sub FormatRange()
Range("MyBook.xls!MyRange").Font.Italic = True
End Sub
以下示例引用名为“Report.xls”的工作簿中特定于工作表的区域“Sheet1!Sales”。
Sub FormatSales()
Range("[Report.xls]Sheet1!Sales").BorderAround Weight:=xlthin
End Sub
要选定命名区域,可使用 GoTo 方法,该方法将激活工作簿和工作表,然后选定该区域。
Sub ClearRange()
Application.Goto Reference:="MyBook.xls!MyRange"
Selection.ClearContents
End Sub
以下示例显示对于活动工作簿将如何编写与上例相同的过程。
Sub ClearRange()
Application.Goto Reference:="MyRange"
Selection.ClearContents
End Sub
在命名区域中的单元格上循环
下例用 For Each...Next 循环语句在命名区域中的每一个单元格上循环。如果该区域中的任一单元格的值超过 limit 的值,就将该单元格的颜色更改为黄色。
Sub ApplyColor()
Const Limit As Integer = 25
For Each c In Range("MyRange")
If c.Value > Limit Then
c.Interior.ColorIndex = 27
End If
Next c
End Sub
引用多个区域
使用适当的方法可以很容易地同时引用多个单元格区域。可用 Range 和 Union 方法引用任意组合的单元格区域;用 Areas 属性可引用工作表上选定的一组单元格区域。
使用 Range 属性
通过在两个或多个引用之间插入逗号,可使用 Range 属性引用多个区域。以下示例清除了 Sheet1 上三个区域的内容。
Sub ClearRanges()
Worksheets("Sheet1").Range("C5:D9,G9:H16,B14:D18"). _
ClearContents
End Sub
命名区域使得用 Range 属性处理多个区域更加容易。以下示例可在所有这三个命名区域处于同一工作表时运行。
Sub ClearNamed()
Range("MyRange, YourRange, HisRange").ClearContents
End Sub
使用 Union 方法
使用 Union 方法可将多个区域组合到一个 Range 对象中。以下示例创建了名为 myMultipleRange 的 Range 对象,并将其定义为区域 A1:B2 和 C3:D4 的组合,然后将该组合区域的字体设置为加粗。
Sub MultipleRange()
Dim r1, r2, myMultipleRange As Range
Set r1 = Sheets("Sheet1").Range("A1:B2")
Set r2 = Sheets("Sheet1").Range("C3:D4")
Set myMultipleRange = Union(r1, r2)
myMultipleRange.Font.Bold = True
End Sub
使用 Areas 属性
可用 Areas 属性引用选定的单元格区域或多块选定区域中的区域集合。下述过程计算选定区域中的块数目,如果有多个块,就显示一则警告消息。
Sub FindMultiple()
If Selection.Areas.Count > 1 Then
MsgBox "不能对多个选区进行操作."
End If
End Sub
处理三维区域
如果要处理若干工作表上相同位置的单元格区域,可用 Array 函数选定两张或多张工作表。下例设置三维单元格区域的边框格式。
Sub FormatSheets()
Sheets(Array("Sheet2", "Sheet3", "Sheet5")).Select
Range("A1:H1").Select
Selection.Borders(xlBottom).LineStyle = xlDouble
End Sub
下例应用 FillAcrossSheets 方法,将 Sheet2 上的区域中的格式和所有数据传送到活动工作簿中所有工作表上的相应区域。
Sub FillAll()
Worksheets("Sheet2").Range("A1:H1") _
.Borders(xlBottom).LineStyle = xlDouble
Worksheets.FillAcrossSheets (Worksheets("Sheet2") _
.Range("A1:H1"))
End Sub
-
excel 表间引用实例
2013-09-12 16:14:20excel引用其他工作表,在公式中的具体写法是:工作表名称!单元格地址。 根据OFFICE帮助文档说明:如果其他工作表名称中包含非字母字符,则名称(或路径)必须置于单引号 (') 中。 比如下面截图,要在Sheet2... -
Excel基础知识(10):多工作簿数据的引用与更新
2020-12-25 12:18:08工作中经常遇到多个工作簿数据的互相引用,单元格内容的引用(调用)很简单:输入“=”,再单击选中需要引用工作簿中的单元格,回车,搞定!但是,最重要的是要确保被调用的工作簿内容更新时,调用的工作簿数据也要... -
WPS怎么把几个工作表合并到一个工作表 - 卡饭网
2020-12-20 14:19:35excel如何快速把多个工作表合并到一个excel表excel如何快速把多个工作表合并到一个excel表 有这么一种情况,就是我们有很多张excel,而且excel表里面的公式基本一样,我们就想快速的把这些excel合并在一起,意思在... -
excel表格数据同步修改-关于excel不同表格(不同工作簿)之间数据同步修改...
2021-08-08 03:23:42关于excel不同表格(不同工作簿)之间数据同步修改... 这个很简单啦,将表格E盘中的数据复制粘贴在D盘的表格中,注意要粘贴为“链接”的形式哦!这样E盘表格中的数据变化时,D盘里面的数据也会跟着变化。 excel中... -
python实现跨excel的工作表sheet之间的复制方法
2021-04-27 06:25:15EXCEL中两个工作表之间如何实现复制公式有一种人天生是用来疼爱用来宠的,即使他从未把你放入他的生活他的心里,你仍然愿意为了他的笑容答应他所有要分享。 有两个EXCEL工作薄,小编想把A工作薄的内容复制到B工作薄... -
Excel中工作表间的关联链接方法
2016-03-28 14:20:42在excel工作簿中有很多工作表,最前面为所有工作表都添加一个目录表。当点击了目录表中某个工作表的名字,就自动激活相应的工作表。如果想要实现这样的效果,我们该怎么做? 方法1:创建超链接的目录页 ... -
Excel 不同文件、sheet 关联引用(vlookup函数)
2019-09-26 05:00:37有时候在excel办公中会遇到,两个sheet相同的一列数据,作为关联(就像数据库的表的外键),其中一个sheet想要获取另一个sheet的其他列数据,这样就用到了vlookup函数,下面演示一下: 1.这是test.xlsx文件的... -
Excel-利用函数获取工作表标签名称(转)
2019-03-16 00:53:13也可以这样取得工作表名,在任一单元格输入: =RIGHT(CELL("filename"),LEN(CELL("filename"))-FIND("]",CELL("filename"))) 方法二 取工作表名及路径=CELL("... -
Excel跨工作簿引用
2017-07-18 10:03:25跨工作薄引用的要点1、跨工作薄引用的EXCEL文件名用[]括起来;2、表名和单元格之间用!隔开;3、路径可以是绝对路径也可以是相对路径(同一目录下),且需要使用扩展名;4、引用还有个好处就是能自动更新总之,跨工作... -
tableau 基本使用【数据源、工作表、字段操作、函数与计算】(超级详细版本)
2019-04-18 19:40:06Tableau工作表2.1 Tableau工作表2.2 Tableau编辑元数据3. Tableau字段操作3.1 合并字段3.2 字段分层3.3 字段分组3.4 字段拆分3.5 计算字段3.6 集4. Tableau函数与计算4.1 Tableau中的运算符4.2 Tableau函数(1)... -
SQL的理解(对表的引用)
2018-01-05 14:00:18SQL 是一种为数不多的声明性语言,它的运行方式完全不同于我们所熟知的命令行语言、面向对象的程序语言、甚至是函数语言(尽管有些人认为 SQL 语言也是一种函数式语言)。 本文着重介绍 SELECT 句式,其他... -
关于excel表格直接引用和间接引用
2020-04-28 11:35:20excel虽然处理大量数据上不如python的pandas来的痛快,也不高效,但是实际工作中还是避免不了会用到这一块的内容,excel在表格的处理和画图(小数据时)还是有优势的,至少可视化做的操作做的不错,一些快捷操作也很... -
用VBA语言获取其他工作表中的数据
2018-07-31 10:54:16如下表,我们想按照工作表““OA线路衰耗””填写工作表“线路衰耗统计”: 要抽取的数据在另一个表格内,就要结束方法sheets(): Sub For_tongji() Dim str1 As String Dim str2 A... -
EXCEL中如何获得工作表(sheet)的名称
2018-05-11 14:12:23excel 取得工作表名2009-08-11 15:38方法一 常规方法 cell函数 也可以这样取得工作表名,在任一单元格输入:=RIGHT(CELL("filename"),LEN(CELL("filename"))-FIND("]",CELL("... -
如何使用物联网低代码平台进行工作表管理?
2022-03-23 17:59:41AIRIOT工作表管理方便,可根据实际情况自由创建工作表、修改工作表、制作工作表画面、进行数据同步等,工作表的基本功能包括基本信息设置、数据同步、画面设置和表定义。 工作表 1 添加工作表 单击主菜单“工作... -
Excel 2003移动工作表(含公式)到另一个工作薄
2012-06-01 17:08:36Excel 2003移动工作表(含公式)到另一个工作薄时会出现工作表里公式引用的工作薄还是原来的工作薄,当原始工作薄关闭后就会出现引用找不到的难看的#REF。。。 如何解决: 1,将原工作薄和新工作薄复制到同一... -
如何在Microsoft Excel电子表格之间交叉引用单元格
2020-09-16 15:09:56当引用不同Excel文件上的单元格和范围时,默认情况下将引用设为绝对引用。 如果需要,可以将其更改为相对参考。 If you look at the formula when the referenced workbook is closed, it will contain the entire ... -
excel-合并多个Excel文件--VBA合并当前目录下所有Excel工作簿中的所有工作表
2019-05-18 16:46:00Wb.Sheets(i).Range("a1").Resize(1, Sheets(i).UsedRange.Columns.Count).Copy .Cells(1, 1) #将wb工作簿中第i个工作表的A1单元格区域扩充为一行,有应用痕迹列数(x)大小的区域,即A1:x1区域, 扩充后区域... -
C# 复制(带格式)Excel工作表
2018-03-29 16:33:15在同一个工作簿内的不同工作表之间进行复制 在不同工作簿之间的不同工作表间进行复制(这里的复制是包含了复制数据、边框、底纹、公式等原数据表格的所有内容)另外,对于Excel表格数据的复制,除了针对整篇工作表的... -
数据库(三) 表与表建立联系-外键
2021-02-06 11:48:421.理解表与表之间建立关系的必要性比如我们建立了一张个人信息表,把所有人的信息都存在这张表中这张表中有老师和他们所属的部门,并且不同的部门工作也是不同的所有数据存放在一张表中的弊端1.组织结构不清晰2.浪费... -
Excel-引用其它位置的数据和自动更新
2020-10-27 15:55:26第三种:引用不同文件夹下其它工作薄中的数据。 第一种情况:引用同一工作薄中其它工作表中的数据。 =Sheet1!C4 sheet名字+!。 第二种情况:引用同一文件夹下不同工作薄中的数据。 =’[原数据1.xls]Sheet1... -
EXCEL使用技巧-数据透视表
2010-06-16 21:15:06EXCEL使用技巧-数据透视表,数据透视表为何如此重要? -
Excel函数大全-10查找和引用函数
2020-06-30 15:46:2010查找和引用函数10x01 ADDRESS 函数语法10x02 ...你可以使用 ADDRESS 函数,根据指定行号和列号获得工作表中的某个单元格的地址。 例如,ADDRESS(2,3) 返回 $C$2。 再例如,ADDRESS(77,300) 返回 $KN$77。 可以使用其