精华内容
下载资源
问答
  • Excel标与列号转换

    千次阅读 2019-08-01 11:02:11
    熟悉Excel操作的用户都只有工作表中标题可以有标(字母形式)和列号(数字形式)两种,同样在VBA代码中也会用到这两种不同的表示方式。 例如应用C6单元格可以如下几种方式,对于Cells的第二个参数,即可以使用...

    熟悉Excel操作的用户都知道在工作表中列标题有列标(字母形式)和列号(数字形式)两种,如下图所示。

    同样在VBA代码中也会用到这两种不同的表示方式。例如应用C6单元格可以使用如下几种方式来引用对象,对于Cells的第二个参数,即可以使用数字列号,也可以使用列标字母,然而对于Range来说参数为字符串,也就是使用列标形式。

    Cells(6,3)
    Cells(6,"C")
    Range("C6")
    

    在代码中使用变量的示例。

    strCol = "C"
    intCol = 3
    Cells(6, intCol)
    Cells(6, strCol)
    Range(strCol & "6")
    

    在VBA代码灵活选择单元格的引用形式,将使得代码简洁高效。某些场景中,可能还是需要实现列标和列号的转换,此时可以使用自定义函数。


    列标字母编号由单个字母开始A,B,C,…,Z,之后为AA,AB,…,ZZ,接下来为AAA,AAB,…,XFD,可以看作是26进制编码的表示形式,和其他的进制转换类似,也是采用除以26取余数的方式进行计算,此处需要额外多一步的处理是,对于余数要转换为字母形式。
    列号转列标的自定义函数代码如下。

    Function Num2Name1(ByVal ColNum As Long) As String
        Dim i As Long
        Dim intMod As Integer
        Num2Name1 = ""
        i = ColNum
        Do While i > 0
            intMod = IIf(i \ 26 = i / 26, 26, i Mod 26)
            Num2Name1 = Chr$(intMod + 64) + Num2Name1
            i = (i - intMod) / 26
        Loop
    End Function
    
    

    【代码解析】
    第7行代码判断循环变量i是否可以被26整除,如果可以,那么intMod赋值为26,否者赋值为余数。
    第8行代码使用Chr函数将1~26的数字转换为大小字母,并和前面步骤已经得到的结果组合为新的字符串。
    第9行代码获得下一次循环需要处理的数字,如果i<=0,则终止循环。


    列标转列号的方法是上述的逆运算,自定义函数代码如下。

    Function Name2Num1(ByVal ColName As String) As Long
        Dim i As Integer
        Dim intLen As Integer
        Name2Num1 = 0
        intLen = Len(ColName)
        If intLen > 0 Then
            ColName = UCase$(ColName)
            For i = 1 To intLen
                Name2Num1 = Name2Num1 + (Asc(Mid(ColName, i, 1)) - 64) * 26 ^ (intLen - i)
            Next i
        End If
    End Function
    
    

    【代码解析】
    第5行代码获取列标字符串的长度。
    第7行代码将列标转换为大写字母。
    第9行代码中使用Mid函数逐位读取列标字符,使用Asc函数转换为ASCII码,减去64实现了将字母变换为1~26的数组序列,根据所在位置不同,乘以26 ^ (intLen - i)转换为相应的数值进行累加。


    使用如下代码可以测试两个自定义函数的结果。

    Sub Demo()
        Debug.Print Name2Num1("XFD")
        Debug.Print Num2Name1(16384)
    End Sub
    
    

    上述两个自定义过程利用进制原理转换实现了列标和列号的转换,但是在VBA中灵活利用对象的属性可以更简洁的实现这个功能。

    Function Num2Name(ByVal ColNum As Long) As String
        Num2Name = ""
        On Error Resume Next
        Num2Name = Split(Cells(1, ColNum).Address, "$")(1)
    End Function
    

    【代码解析】
    第4行代码使用Cells(1, ColNum).Address获取列号为ColNum的列中第一个单元格的绝对引用地址(例如:$ABC$1),Split函数使用$作为分隔符将绝对引用地址拆分具有3个元素的数组(下标从零开始),第2个元素为列标。


     
    Function Name2Num(ByVal ColName As String) As Long
        Name2Num = 0
        On Error Resume Next
        Name2Num = Cells(1, ColName).Column
    End Function
    
    

    【代码解析】
    第4行代码使用使用单元格的Column返回列号。


    这两个自定义函数避繁就简,核心代码就只有一行,代码非常简洁,有些“高手”可能会质疑这样的实现方式,他们认为调用Excel对象就会增加耗时,但是普通实现方式循环过程次数多,最终的整体效果哪个更好,我个人更欣赏简洁的代码。大家有兴趣的话,可以进行耗时对比测试,并在评论区发布测试结果。

    展开全文
  • php的excel的列号输出

    2019-04-18 17:03:33
    可以看成是个27进制的数字序列,A对应十进制1,Z对应十进制数字26,A@对应十进制27,AA对应28,这里补上@(ascii码为64)起到0的作用,也就把列号变成:@ A B ... Z A@ AA AB ... // 求$col 的下列号 function...

    excel的列号:A B C D E ... X Y Z AA AB AC ...

    可以看成是一个27进制的数字序列,A对应十进制1,Z对应十进制数字26,A@对应十进制27,AA对应28,这里补上@(ascii码为64)起到0的作用,也就把列号变成:@ A B ... Z A@ AA AB ...

    // 求$col 的下一个列号
    function excelColPlus($col)
    {
    	//先转化成27进制数字
        $col_chars = str_split($col);
        $col_num = 0;
        foreach ($col_chars as $col_char) {
            $col_num = (ord($col_char) - 64) + 27 * ($col_num);
        }
        $col_num++;
        //数字转化为答案
        $ans = '';
        while ($col_num) {
            $ans .= chr(floor($col_num % 27) + 64);
            $col_num = floor($col_num / 27);
        }
        // '@' 都变成A
        $ans = str_replace('@','A',$ans);
    	// 反转
        $ans = strrev($ans);
        return $ans;
    }
    

    测试一下

    $col = 'A';
    for ($i = 0; $i < 100; $i++) {
        echo $col . " ";
        $col= excelColPlus($col);
    }
    

    输出结果
    结果

    展开全文
  • 利用字段间的关系对数据进行整理后,数据只能展示为竖的形式。在制作联动时,需要用到横行的数据排列方式,故研究该公式。具体如下图: 源数据是竖型分组排序好的数据: 需要用到的数据是这样,级菜单在...

       工作中因为要做Excel的三级联动,但是数据是从数据库中导出的,混杂在一起。利用字段间的关系对数据进行整理后,数据只能展示为竖列的形式。在制作联动时,需要用到横行的数据排列方式,故研究该公式。具体如下图:

    源数据是竖型分组排序好的数据:

    需要用到的数据是这样,一级菜单在首行,下面跟着二级菜单的形式。

    公式如下:

    =OFFSET(Sheet2!$A$1,SMALL(IF(INDEX(Sheet2!$A$1:$A$2826,MATCH(A$1,Sheet2!$A$1:$A$2826,0)+ROW(1:30)-1,1)=$A$1,MATCH(A$1,Sheet2!$A$1:$A$2826,0)+ROW(1:30),65536),1)-2,1)

    分布解析如下:

    用到的公式有:

    =OFFSET(基准位置,向下或上偏移几行,向右或左偏移几列,引用区域的高度--不必要,引用区域的宽度--不必要)

    =SMALL(array, k)  在一列数值范围array中,按从小到大的顺序取第K个值

    =IF(判断条件 , TRUE返回值 , FALSE返回值)

    =INDEX(单元格区域,指定行号,指定列号)

    =MATCH(查找值, 查找范围,匹配方式) 1:小于  0:精确匹配   -1:大于

    =ROW()返回所选行号,如果是一个区域范围“A2:A20”或者“3:40”,会跟随下拉动作进行序号顺序排列。

    具体思路:

    1、将一级菜单删除重复项后,横向排列在“研究方向二级字典”sheet页中

    2、通过 “ MATCH(A$1,Sheet2!$A$1:$A$2826,0) ”函数获取到该列一级菜单在 sheet2 里范围是 A1:A2826 的第一次出现的位置,参数 0 进行精确匹配

    3、用 INDEX 函数 INDEX(Sheet2!$A$1:$A$2826,MATCH(A$1,Sheet2!$A$1:$A$2826,0)+ROW(1:30)-1,1)=$A$1  在sheet2中A1:A2826 区域内,通过 MATCH  查到的行号,因为是A列所以列值是1 ,行列交叉得到该出单元格的value值 ,与当前列第一行的一级菜单的value值进行判断。注意,因为MATCH 函数得到的是首行的值,不会随着下拉动作而进行变化,故 ROW(1:30) 是为了随着公式的下拉将匹配的行数进行变化。

    4、利用 IF 函数进行控制,当区域内所有一级菜单值都取值完成后结束。没有判断的话,则不会终结,数据将会在一列中进行展示。IF(INDEX(Sheet2!$A$1:$A$2826,MATCH(A$1,Sheet2!$A$1:$A$2826,0)+ROW(1:30)-1,1)=$A$1,MATCH(A$1,Sheet2!$A$1:$A$2826,0)+ROW(1:30),65536)  

    5、接着利用 SAMLL函数,获取到数据偏移行数。SMALL(IF(INDEX(Sheet2!$A$1:$A$2826,MATCH(A$1,Sheet2!$A$1:$A$2826,0)+ROW(1:30)-1,1)=$A$1,MATCH(A$1,Sheet2!$A$1:$A$2826,0)+ROW(1:30),65536),1)-2

    6、最终,通过步骤 5 得到了偏移行数,偏移列数因为就两列,所以偏移列数为1 。故用 OFFSET 函数,在起始点 Sheet2!$A$1处向下偏移 步骤5 中的行数,在向后偏移 1 得到。对应位置的二级菜单的value值。

     

    展开全文
  • 一列数据按照内容不同,分为多列。 【案例】将不同【分支机构】的【时长】单独统计出来。 数据源如下: 期望得到如下表格: 【步骤一】 1.1在【F2】单元格中输入公式 =INDEX($ B:$ B,SMALL(IF(A:A=$ D$ 2,ROW(A:...

    目标:
    将一列数据按照内容不同,分为多列。
    【案例】将不同【分支机构】的【时长】单独统计出来。
    数据源如下:
    在这里插入图片描述
    期望得到如下表格:
    在这里插入图片描述
    【步骤一】
    1.1在【F2】单元格中输入公式
    =INDEX($ B:$ B,SMALL(IF(A:A=$ D$ 2,ROW(A:A),4^8),ROW(A1)))&""
    1.2语法解释:INDEX(单元格区域,行号,列号)
    ①目标单元格区域:B列;
    ②行号:SMALL(IF(A:A=$D 2 , R O W ( A : A ) , 4 8 ) , R O W ( A 1 ) ) 其 中 , I F ( A : A = 2,ROW(A:A),4^8),ROW(A1)) 其中,IF(A:A= 2,ROW(A:A),48),ROW(A1))IF(A:A=D 2 , R O W ( A : A ) , 4 8 ) 返 回 的 是 一 个 数 组 , 解 释 如 下 : 1 ) 将 A 列 中 存 储 的 所 有 数 值 与 【 D 2 】 单 元 格 逐 一 匹 配 , 若 相 等 , 则 返 回 当 前 可 匹 配 数 值 的 行 号 ; 若 不 等 , 则 返 回 一 个 超 大 的 数 值 , 这 里 选 定 为 4 8 ( 原 因 : 4 的 8 次 方 65536 是 03 版 本 E X C E L 的 最 大 行 数 。 03 版 本 时 候 , 一 般 认 为 该 行 的 数 据 是 空 白 的 , 在 老 版 的 查 询 公 式 写 法 中 , 会 用 这 个 数 返 回 该 行 的 数 据 , 用 于 屏 蔽 零 值 ) 因 为 公 式 中 用 到 了 s m a l l 函 数 , 所 以 使 用 一 个 超 大 数 值 替 代 不 符 合 i f 条 件 的 数 值 , 使 其 在 s m a l l 函 数 中 不 被 返 回 , 即 超 出 我 们 原 数 据 有 效 范 围 即 可 ( 如 本 例 中 有 17 个 行 号 , 这 个 数 值 > = 18 就 可 以 了 ) 。 2 ) 那 么 具 体 I F ( A : A = 2,ROW(A:A),4^8)返回的是一个数组,解释如下: 1)将A列中存储的所有数值与【D2】单元格逐一匹配,若相等,则返回当前可匹配数值的行号;若不等,则返回一个超大的数值,这里选定为4^8(原因:4的8次方65536是03版本EXCEL的最大行数。03版本时候,一般认为该行的数据是空白的,在老版的查询公式写法中,会用这个数返回该行的数据,用于屏蔽零值) 因为公式中用到了small函数,所以使用一个超大数值替代不符合if条件的数值,使其在small函数中不被返回,即超出我们原数据有效范围即可(如本例中有17个行号,这个数值>=18就可以了)。 2)那么具体IF(A:A= 2,ROW(A:A),48)1AD248486553603EXCEL03small使if使small17>=182IF(A:A=D 2 , R O W ( A : A ) , 4 8 ) 返 回 的 数 组 是 什 么 呢 ? 从 数 据 源 表 可 以 看 出 , A 1 的 值 是 “ 分 支 机 构 ” , A 1 ! = D 2 , 那 么 返 回 4 8 , 即 数 组 I F ( A : A = 2,ROW(A:A),4^8)返回的数组是什么呢? 从数据源表可以看出,A1的值是“分支机构”,A1!=D2,那么返回4^8,即数组IF(A:A= 2,ROW(A:A),48)A1A1=D248IF(A:A=D 2 , R O W ( A : A ) , 4 8 ) 的 第 一 个 返 回 值 是 4 8 , 同 理 , A 2 单 元 格 的 值 是 “ 安 徽 分 公 司 ” , 显 然 A 2 ! = D 2 , 那 么 数 组 I F ( A : A = 2,ROW(A:A),4^8)的第一个返回值是4 ^8,同理,A2单元格的值是“安徽分公司”,显然A2!=D2,那么数组IF(A:A= 2,ROW(A:A),4848A2A2=D2IF(A:A=D 2 , R O W ( A : A ) , 4 8 ) 的 第 二 个 元 素 也 是 4 8 ; 同 理 因 为 A 3 ! = D 2 , 所 以 数 组 I F ( A : A = 2,ROW(A:A),4^8)的第二个元素也是4 ^8;同理因为A3!=D2,所以数组IF(A:A= 2,ROW(A:A),4848A3=D2IF(A:A=D 2 , R O W ( A : A ) , 4 8 ) 的 第 三 个 元 素 也 是 4 8 ; 而 A 4 单 元 格 的 值 是 “ 重 庆 分 公 司 ” , A 4 = D 2 , 这 时 数 组 I F ( A : A = 2,ROW(A:A),4^8)的第三个元素也是4 ^8;而A4单元格的值是“重庆分公司”,A4=D2,这时数组IF(A:A= 2,ROW(A:A),4848A4A4=D2IF(A:A=D 2 , R O W ( A : A ) , 4 8 ) 返 回 A 4 所 在 行 号 , 即 4 。 因 为 A 5 = D 2 , 所 以 数 组 I F ( A : A = 2,ROW(A:A),4^8)返回A4所在行号,即4。因为A5=D2,所以数组IF(A:A= 2,ROW(A:A),48A44A5=D2IF(A:A=D$2,ROW(A:A),4^8)返回A5单元格的行号5。
    到时,目前数组中存储的数据为{65536 ,65536,65536,4,5,…},同理,A列的所有数据与D2逐一进行对比,得到if函数的数组为{65536 ,65536,65536,4,5,6,65536 ,65536,65536,…65536}(该数组中共有65536个元素。如果将4^8改为20,则该数组有20个元素)。
    3)在此if函数返回数组的外层,是small函数。
    计算完if函数后,则small变为({65536 ,65536,65536,4,5,6,65536 ,65536,65536,…65536},row(A1)),其中row(A1)返回值为数字1。
    small(单元格区域或数组,K)函数语法含义:在一列数值中,按从小到大的顺序返回第K个值。
    那么在此small函数中,返回值就是if数组中按从小到大排序后的第1个值,即4。
    4)这时外层的index函数即为index(B:B,4),在B列中返回第4行的数值,即B4单元格的【28】。
    5)index函数后面加上了【""】。
    &是文本合并运算符,"“是空文本,公式【&”"】表示将公式的运算结果与空文本合并。它的作用是用空文本替代返回值中的错误值。
    如果没有【&""】则结果如下:
    在这里插入图片描述
    1.3在【F2】中输入数组公式以后,按shift+ctrl+enter。
    在这里插入图片描述
    【步骤二】
    将【F2】的公式向下拖动,将公式填充到下面足够多的单元格中(可以与数据源的个数保持一致,因为返回结果不会超过数据源个数)
    【步骤三】
    利用数据有效性,将【D2】单元格做成下拉框,这样数据就可以变动了。(略)
    在这里插入图片描述
    【注意】公式中,if函数的比较值范围要与返回行号完全对应。
    即下面标红的部分要保持一致。
    在这里插入图片描述
    完成。

    展开全文
  • table如何正确的隐藏一列

    千次阅读 2020-03-03 15:25:30
    * 隐藏某一列 * @param oTable 表格dom对象 * @param iCol 列 */ function hideColByIndex(oTable, iCol) { for (i = 0; i ; i++) { //用jquery的hide()效果更好 //oTable.rows[i].cells[iCol].style....
  • SUMPRODUCT(1/COUNTIF(A3:A302,A3:A302))是什么意思? 统计,之间有多少个重复的项目. COUNTIF(A3:A302,A3:A302)的意思就是统计A3在A3:A302有多少个,统计A4在A3:A302有多少个……统计统计A302在A3:... 比如说这么...
  • SQL 增加或删除一列

    万次阅读 2018-01-02 15:38:18
    alter table tablename drop column columnname;alter table tabelname add columnname varchar2(8... . 常用mysql命令行命令 1 .启动MYSQL服务 net start mysql停止MYSQL服务 net stop mysql 2 . netstat –na | f
  • 实现在查询的结果集前添加一列自然序列
  • oracle怎么用命令向建好的表中插入一列并使它成为第一列?请说详细点,最好举例说明。 &nbsp;分享|&nbsp;2012-05-11 14:53li597600208man&nbsp;|&nbsp;浏览 1686 次 2012-05-11 17:14 提问者采纳...
  • 脚本: #!/usr/bin/python ...@context:按照dataframe某一列的数值排序,并增加一列索引(2)降序排 """ from __future__ import print_function from pyspark.sql import SparkSession im...
  • SQL - 在查询结果中新增一列序号

    千次阅读 2018-06-28 16:43:27
    我们经常会遇到这样一个问题,当从数据库查询出相应的数据后,没有唯一序号列,但有些前端框架会要求返回有唯一序号,无论这一列的序号是有序的还是无序的,只要保证唯一就可以。那我知道的有下面几种办法:1. 使用 ...
  • excel实现一列或者一行数据递增

    千次阅读 2018-09-12 19:55:59
    在某一列或者一行的前两格输入1、2,之后选中1、2数据,待变为+,鼠标连着左击两下。 2、对数据量比较大的情况,采用如下方式进行编号 在某一列或者一行的前一格输入1,之后找到开始-&gt;填充-&gt;序列-...
  • 详细链接: ... /// &lt;summary&gt; /// 在DataTable中添加序号,编号从1依次递增 /// &lt;/summary&gt; /// &lt;...
  • 剑指offer题目一:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。class Solution: ...
  •  * 有个已经排序的数组。现在输入一个数,要求按原来的规律将它插入数组中。  */ public class Demo09 { public static void main(String[] args) { int [] a = new int [] {1,2,6,14,25,36,37,55}; ...
  • 需求现在有个文件格式如图ID 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17001 89.84 8.87 1.29 -0.0 0.0 68.99 0.0 0.0 4.67 1.48 0.0 0.0 14.69 0.0 0.0 0.0 0.01002 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 99.99 0.0 ...
  • dataframe也有按某中按分隔符转成多行的函数,不过dataframe比rdd所需资源更多,所以此处先些rdd的按某拆分转为多行 dataframe的详见...
  • 如何更改DataFrame顺序

    千次阅读 2020-04-12 12:07:25
    本文翻译自:How to change the order of DataFrame columns? I have the following DataFrame ( df ): 我有以下DataFrame ( df ): import numpy as np ...How about: 怎么样: df.insert(0, 'mean', df.mean(1)) ...
  • 最近做比赛,有时候需要造出新的特征,而这次遇到的问题是将一列数据往下顺移一位。同时将开头缺失的那一个数据用其他方式填充。 ----------------------2019-5-20更新-------------- df['feature'].shift(1)向下...
  • GRID 网格的处理属性 ...Grid 控件可视部分的活动列列号 ,由左数的数 。设计时不可用,运行时只读。 Columns[nCol] 属性 对象数组。 nCol 列生时的列号。未移动时 nCol=ActiveColumn ...
  • /* 组名为portfolio*/ var msmvttl; /* 按msmvttl分为10组*/ run; ``` 我想实现的就是这种功能,大神们帮帮忙吧~主要是想速度快点,暴力的解法是想得到的,就是感觉很慢且不简洁……谢谢大佬!
  • 如果一个需求要求查询的结果集有一列自增序列号要怎么实现? name name1 name2 score 张三 理科 数学 50 张三 理科 数学 60 李四 理科 数学 70 张三 理科 物理 70 李四 文科 数学 80 张三 理科 化学 80 张三 文科 ...
  • C-Store:存数据库

    千次阅读 2018-12-28 09:10:25
    每个 projection 是这张表的某些的组合,是实际存储在磁盘上的,每个 projection 可以按不同顺序存储,一张表的每个必须出现在至少个 projection 中。个表绑定的 projection 也可能包括其他表中的(相当于...
  • @rownum的写法不唯一,但一定有@,等于写法一定是:=(冒号等于) 以下写法都可行: SELECT @xxoo := @xxoo +1 AS 序号, t_user.* FROM t_user ,(SELECT @xxoo :=0) r; SELECT @1 := @1 +1 AS ...
  • 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 思路:终止行号...
  • 每位亲都参加过大大小小的各类考试,每次考试的座位、考场、监考员等可能都不尽相同……如果让你去组织本次考试,并负责座位的编排、考场的划分和监考员的分配等工作,你会怎么做?、Excel函数:Rand的功能及...
  • 一 、 前言:在实际数据分析时, 我们常常要对不规范的数据进行规整化,一般规整化的过程比较繁琐。 如果采用pandas 的apply 函数可以快速...1. 从一列序列值批量取元素假设我们拿到下面一份程序员录入的表:其中,...
  • extjs grid 列顺序紊乱问题

    千次阅读 2016-08-19 20:45:52
    这个问题描述类似关于extjs表格展示顺序问题明明在columns定义好了,理应按照里面的顺序输出嘛,但偏不,原本应该在第位的,结果忽而在最后,忽而在中间,忽忽何所似,天地狗屎。在谷歌里寻寻觅觅,找不到。...
  • package aaa; import java.util.*; public class aaa { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc=new Scanner(System.in); int [][]a=new int [4][4... ...
  • Python numpy 转置、逆、去掉一列、按列取出、矩阵拼接、矩阵排序、矩阵相等、np.where,一维转二维

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 336,006
精华内容 134,402
关键字:

怎样输入一列顺序号