Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3581|回复: 4

列名不固定:如何实现小写字母转大写

[复制链接]
发表于 2020-6-1 14:33 | 显示全部楼层 |阅读模式
1学分
请教各位老师,因是ERP导出的数据,现需要对字母大、小写不统一的列统一成大写,如何实现?自己折腾了几次都不行,请帮帮~
变动列实现小写字母转大写.jpg

字母小写转大写.rar (12.1 KB, 下载次数: 3)

发表于 2020-6-1 16:43 | 显示全部楼层
请参考附件
字母小写转大写.zip (12.69 KB, 下载次数: 3)
回复

使用道具 举报

 楼主| 发表于 2020-6-1 17:46 | 显示全部楼层

谢谢@cui26896,我刚测试了一下,可能我附件中没有表述清楚,导致代码实际环境中运行报错(如果“库位”或者“客户代码”二者缺其一,会报错“下标越界”)。


    实际应用场景:    1、我有多个表,表结构不同,有的表同时具有“库位”、“客户名称”这个两个字段,有的表只有这两个的其中之一;
    2、每次转换都在tmpData这个Sheet中处理(即:导入待转换数据—> 转换后导出;清空tmpData—>再导入另一份表—>转换后导出...);

    转换的必要条件是: cells(1,j)="库位" OR cells(1,j)="客户代码" ,您的代码我都看晕了,我改不了

报错.jpg




回复

使用道具 举报

发表于 2020-6-1 18:30 | 显示全部楼层
按照你要求做了修改
Option Explicit
Sub test()
Dim arr, brr, crr, i&, j&, s(1), m(1)
arr = Sheets(2).Range("a1").CurrentRegion
ReDim brr(1 To UBound(arr) - 1, 1 To 1), crr(1 To UBound(arr) - 1, 1 To 1)
For j = 1 To UBound(arr, 2)
  If arr(1, j) = "库位" Then
    s(0) = j
  ElseIf arr(1, j) = "客户代码" Then
    s(1) = j
  End If
Next
For i = 2 To UBound(arr)
  m(0) = Empty: m(1) = Empty
  If Len(s(0)) Then
    If arr(i, s(0)) Like "*[a-z]*" Then
      For j = 1 To Len(arr(i, s(0)))
        If Mid(arr(i, s(0)), j, 1) Like "*[a-z]*" Then
          m(0) = m(0) & UCase(Mid(arr(i, s(0)), j, 1))
          Else
            m(0) = m(0) & Mid(arr(i, s(0)), j, 1)
        End If
      Next
      brr(i - 1, 1) = m(0)
      Else
        brr(i - 1, 1) = arr(i, s(0))
    End If
  End If
    If Len(s(1)) Then
      If arr(i, s(1)) Like "*[a-z]*" Then
        For j = 1 To Len(arr(i, s(1)))
          If Mid(arr(i, s(1)), j, 1) Like "*[a-z]*" Then
            m(1) = m(1) & UCase(Mid(arr(i, s(1)), j, 1))
              Else
                m(1) = m(1) & Mid(arr(i, s(1)), j, 1)
          End If
        Next
        crr(i - 1, 1) = m(1)
        Else
          crr(i - 1, 1) = arr(i, s(1))
      End If
    End If
Next
If Len(s(0)) Then Sheets(2).Cells(2, s(0)).Resize(UBound(brr), 1) = brr
If Len(s(1)) Then Sheets(2).Cells(2, s(1)).Resize(UBound(crr), 1) = crr
End Sub

评分

参与人数 1学分 +3 收起 理由
zglibk + 3 学习

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2020-6-1 21:58 | 显示全部楼层
cui26896 发表于 2020-6-1 18:30
按照你要求做了修改
Option Explicit
Sub test()

感谢感谢!
   加了判断不为空,这下可以了。
就是看着这个算法好复杂,佩服!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-27 01:02 , Processed in 0.216292 second(s), 7 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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