标题:EXCEL中如何求得单元格所在列的标题字母
只看楼主
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:108
帖 子:2175
专家分:3785
注 册:2007-4-27
结帖率:95.71%
已结贴  问题点数:20 回复次数:21 
EXCEL中如何求得单元格所在列的标题字母
用上OFFICE2007后,从第703列开始,EXCEL的列标题有3个字母组成(从 AAA 到 XFD 止,相应的单元格表示为:AAA1,AAA2,……)。

在VFP对EXCEL的操作中,如:测得最后一个数据所在列为 1378,对应的列标号是 AZZ。  对应单元格就为:AZZ1,AZZ,……,AZZn,……

请问 VF 如何用 1378 转换出 AZZ 来?
搜索更多相关主题的帖子: 单元格 对应 EXCEL 标题 字母 
2020-08-27 11:31
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:10 

程序代码:
Private Sub CommandButton1_Click()
    Dim nCol As Integer
    nCol = InputBox("输入列号")
    cCol = Replace(Cells(1, nCol).Address(False, False), "1", "")
    MsgBox ("列号" & nCol & "转为对应的字母: " & cCol)
End Sub
2020-08-27 12:01
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:10 
VFP表最多可用列也就254列,不管什么版本的EXCEL,VFP也只能转换254列,知道254列的转换方法就可以了。
EXCEL2007可用行1048576,可用列16384

[此贴子已经被作者于2020-8-27 12:30编辑过]


坚守VFP最后的阵地
2020-08-27 12:28
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:108
帖 子:2175
专家分:3785
注 册:2007-4-27
得分:0 
@吹水佬
VFP的代码如何写?

只求每天有一丁点儿的进步就可以了
2020-08-27 13:09
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:108
帖 子:2175
专家分:3785
注 册:2007-4-27
得分:0 
以下是引用sdta在2020-8-27 12:28:54的发言:

VFP表最多可用列也就254列,不管什么版本的EXCEL,VFP也只能转换254列,知道254列的转换方法就可以了。
EXCEL2007可用行1048576,可用列16384


您说得非常正确。 只是作为技术,还是值得钻研的

只求每天有一丁点儿的进步就可以了
2020-08-27 13:15
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:108
帖 子:2175
专家分:3785
注 册:2007-4-27
得分:0 
以下是引用吹水佬在2020-8-27 12:01:26的发言:


Private Sub CommandButton1_Click()
    Dim nCol As Integer
    nCol = InputBox("输入列号")
    cCol = Replace(Cells(1, nCol).Address(False, False), "1", "")
    MsgBox ("列号" & nCol & "转为对应的字母: " & cCol)
End Sub

你是VFP高手,EXCEL也是个高手

只求每天有一丁点儿的进步就可以了
2020-08-27 13:34
厨师王德榜
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:183
帖 子:942
专家分:4724
注 册:2013-2-16
得分:0 
有两种方式,
一、是利用excel自身的单元格对象,返回其address属性即可,这种方法必须要求用户电脑上安装有excel
二、纯数学方法,也就是你所说的“做为技术来钻研”。以前用VBA写过一个函数,供你参考:
程序代码:
Function GetColumName(lie0 As Integer) As String
'根据列序号,返回列字母名,本模块是数学方式计算。
'WDB  [2014.10.11]
Dim str1 As String, lie1, lie2, liew As Integer, iMsg As Integer
Const STR0 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
If lie0 > 0 And lie0 <= 16384 And lie0 - Int(lie0) = 0 Then
    lie0 = Int(lie0)
    '最大支持:XFD=16384
    Select Case lie0
        Case Is <= 26
            '1位字母
            str1 = Mid(STR0, lie0, 1)
        Case 27 To 702
            '2位字母
            lie2 = (lie0 - 1) \ 26
            liew = IIf(lie0 Mod 26 = 0, 26, lie0 Mod 26)
            str1 = Mid(STR0, lie2, 1) & Mid(STR0, liew, 1)
        Case Is > 702
            '3位字母
            lie1 = Int((Int((lie0 - 1) / 26) - 1) / 26) Mod 26
            lie2 = IIf(Int((lie0 - 1) / 26) Mod 26 = 0, 26, Int((lie0 - 1) / 26) Mod 26)
            liew = IIf(lie0 Mod 26 = 0, 26, lie0 Mod 26)
            str1 = Mid(STR0, lie1, 1) & Mid(STR0, lie2, 1) & Mid(STR0, liew, 1)
    End Select
Else
    str1 = "数值不是合理值(负数、小数或>16384)!"
End If
GetColumName = str1
End Function


注意,代码是VBA写的,不过不复杂,转成VFP代码不难。
2020-08-27 13:59
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:108
帖 子:2175
专家分:3785
注 册:2007-4-27
得分:0 
以下是引用厨师王德榜在2020-8-27 13:59:04的发言:

有两种方式,
一、是利用excel自身的单元格对象,返回其address属性即可,这种方法必须要求用户电脑上安装有excel
二、纯数学方法,也就是你所说的“做为技术来钻研”。以前用VBA写过一个函数,供你参考:
Function GetColumName(lie0 As Integer) As String
'根据列序号,返回列字母名,本模块是数学方式计算。
'WDB  [2014.10.11]
Dim str1 As String, lie1, lie2, liew As Integer, iMsg As Integer
Const STR0 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
If lie0 > 0 And lie0 <= 16384 And lie0 - Int(lie0) = 0 Then
    lie0 = Int(lie0)
    '最大支持:XFD=16384
    Select Case lie0
        Case Is <= 26
            '1位字母
            str1 = Mid(STR0, lie0, 1)
        Case 27 To 702
            '2位字母
            lie2 = (lie0 - 1) \ 26
            liew = IIf(lie0 Mod 26 = 0, 26, lie0 Mod 26)
            str1 = Mid(STR0, lie2, 1) & Mid(STR0, liew, 1)
        Case Is > 702
            '3位字母
            lie1 = Int((Int((lie0 - 1) / 26) - 1) / 26) Mod 26
            lie2 = IIf(Int((lie0 - 1) / 26) Mod 26 = 0, 26, Int((lie0 - 1) / 26) Mod 26)
            liew = IIf(lie0 Mod 26 = 0, 26, lie0 Mod 26)
            str1 = Mid(STR0, lie1, 1) & Mid(STR0, lie2, 1) & Mid(STR0, liew, 1)
    End Select
Else
    str1 = "数值不是合理值(负数、小数或>16384)!"
End If
GetColumName = str1
End Function

注意,代码是VBA写的,不过不复杂,转成VFP代码不难。

谢谢!

只求每天有一丁点儿的进步就可以了
2020-08-27 14:04
schtg
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:https://t.me/pump_upp
等 级:贵宾
威 望:67
帖 子:1355
专家分:2534
注 册:2012-2-29
得分:0 
回复 7楼 厨师王德榜
好用,谢谢分享!
2020-08-27 17:00
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
* EXCEL2007 列号转列标(请大家测试)
程序代码:
CREATE CURSOR T1 (xh n(5), zm c(3))
FOR lnj = 1 TO 16384
    INSERT INTO t1 VALUES (lnj, SZTOZM(lnj))
ENDFOR
BROWSE 
FUNCTION SZTOZM
    PARAMETERS ln
    IF NOT BETWEEN(ln, 1, 16384)
        RETURN ""
    ENDIF
    LOCAL ln0, ln1, ln2, ln3
    STORE 0 TO ln0, ln1, ln2, ln3
    ln0 = CEILING(ln / 26) - 1
    ln1 = IIF(ln0 > 26, CEILING(ln0 / 26) - 1, 0)
    ln2 = IIF(ln0 > 26, ICASE(MOD(ln0, 26) = 0, 26, MOD(ln0, 26)), ln0)
    ln3 = IIF(MOD(ln, 26) = 0, 26, MOD(ln, 26))
    RETURN IIF(ln1 = 0, "", CHR(ln1 + 64)) + IIF(ln2 = 0, "", CHR(ln2 + 64)) + CHR(ln3 + 64)
ENDFUNC 
RETURN 

坚守VFP最后的阵地
2020-08-28 06:17



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-502968-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.063068 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved