首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据excel工作表中的值检索列标题

根据excel工作表中的值检索列标题
EN

Stack Overflow用户
提问于 2013-07-24 00:36:47
回答 2查看 129关注 0票数 0

我有两个工作表(工作表1和工作表2)。图纸1有500X500表格。我想-循环遍历每一行(每个单元格)-识别其中包含值‘X’的单元格-选择相应的列标题值并将其存储在工作表2的一个单元格中

例如

代码语言:javascript
运行
复制
AA  BB  CC  DD  EE  FF  GG  HH
GHS                     X   
FSJ         X               
FSA X                       
MSD                         
SKD                         
SFJ X                       X
SFJ                         
SFM             X           
MSF                     X   

有没有一种方法可以写一个宏来提取以下形式的值

代码语言:javascript
运行
复制
GHS -> GG
FSJ->DD
.
.
SFJ->BB HH

我尝试过循环算法,但似乎不起作用。有人能帮帮我吗,因为我对宏很陌生。

EN

回答 2

Stack Overflow用户

发布于 2013-07-24 01:26:24

试试这个..。假设GHS FSJ ..。在A栏

代码语言:javascript
运行
复制
Sub ColnItem()
Dim x, y, z As Integer
Dim sItem, sCol As String
Dim r As Range

z = 1
For y = 1 To 500
  sItem = Cells(y, 1)
  sCol = ""
  For x = 2 To 500
    If UCase(Cells(y, x)) = "X" Then
      If Len(sCol) > 0 Then sCol = sCol & " "
      sCol = sCol & ColumnName(x)
    End If
  Next
  If Len(sCol) > 0 Then
    Sheets("Sheet2").Cells(z, 1) = sItem & " -> " & sCol
    z = z + 1
  End If
Next
End Sub

Function ColumnName(ByVal nCol As Single) As String
Dim sC As String
Dim nC, nRest, nDivRes As Integer

sC = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
nC = Len(sC)

nRest = nCol Mod nC
nDivRes = (nCol - nRest) / nC

If nDivRes > 0 Then ColumnName = Mid(sC, nDivRes, 1)
ColumnName = ColumnName & Mid(sC, nRest, 1)
End Function
票数 0
EN

Stack Overflow用户

发布于 2013-07-24 03:38:51

我已经将值GG等放在Sheet2的单独列中,但是可以修改代码以将所有信息(一行)放入单个单元格中。

代码语言:javascript
运行
复制
Sub GetColumnHeadings()
    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim rng1 As Range, rng2 As Range, rng As Range
    Dim off As Integer

    Set ws1 = Worksheets("Sheet1")
    Set ws2 = Worksheets("Sheet2")

    Set rng1 = ws1.Range("A1").CurrentRegion
    'CurrentRegion is the Range highlighted when we press Ctrl-A from A1
    Set rng2 = ws2.Range("A1")
    Application.ScreenUpdating = False
    For Each rng In rng1
        If rng.Column = 1 Then off = 0
        If rng.Value = "X" Then
            rng2.Value = rng.EntireRow.Cells(1, 1).Value
            off = off + 1
            rng2.Offset(0, off).Value = rng.EntireColumn.Cells(1, 1).Value
        End If
        'if we are looking at the last column of the Sheet1 data, and
        'we have put something into the current row of Sheet2, move to 
        'the next row down (in Sheet2)
        If rng.Column = rng1.Column And rng2.Value <> "" Then
            Set rng2 = rng2.Offset(1, 0)
        End If
    Next rng

    Application.ScreenUpdating = True
    Set rng = Nothing
    Set rng2 = Nothing
    Set rng1 = Nothing
    Set ws2 = Nothing
    Set ws1 = Nothing
End Sub

我还基于原始帖子中的电子表格示例,其中AA似乎位于单元格A1中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17816003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档