Excel 通过匹配将列中的值排序为由不同值分隔的行

Excel 通过匹配将列中的值排序为由不同值分隔的行,excel,vba,sorting,Excel,Vba,Sorting,我有一个数据集,其中每个单元格包含一个名称和一个网站,名称的长度当然是可变的,但前12个字母应该总是不同的,子网站也总是不同的。我需要将这些信息保存在同一个单元格中,但有数百个子网站。基本上,我需要给每个人发一次他们拥有的所有网站的电子邮件,并且需要能够复制网站信息,所以我想让每个人的名字和网站一起进入一个单独的列开始。每个单元格都是一个唯一的站点,但也包含所有者名称,其中一些名称相同(如下所示,假设每一行都是新行,所有行都在a列中) 我已经开始编写VBA来完成并为自己完成这项工作,但我已经陷入

我有一个数据集,其中每个单元格包含一个名称和一个网站,名称的长度当然是可变的,但前12个字母应该总是不同的,子网站也总是不同的。我需要将这些信息保存在同一个单元格中,但有数百个子网站。基本上,我需要给每个人发一次他们拥有的所有网站的电子邮件,并且需要能够复制网站信息,所以我想让每个人的名字和网站一起进入一个单独的列开始。每个单元格都是一个唯一的站点,但也包含所有者名称,其中一些名称相同(如下所示,假设每一行都是新行,所有行都在a列中)

我已经开始编写VBA来完成并为自己完成这项工作,但我已经陷入了僵局。我写下了我认为每一行/每一步应该是什么,但需要帮助才能做到。任何正确方向的帮助或指点都将不胜感激!如果您需要更多详细信息,请询问。以下是我的想法:

  Sub SortingTest()

  Dim x As Integer
  Application.ScreenUpdating = False
  NumRows = Range("A1", Range("A1").End(xlDown)).Rows.Count
  Range("A1").Select
  'GCV = Get Cell Value
  Dim GCV As String
  'NW = Name and Website
  Dim NW As String
  'CL = Cell Location
  Dim CL As Range
  'NC = New Column
  Dim NC As Long
  Dim xCell As Range

  NC = 1

  For x = 1 To NumRows


  'get data for comparison
  GCV = Left(ActiveCell, 12)
  'get data for pasting
  NW = ActiveCell.Value
  'save location of ActiveCell as CL
  Set CL = ActiveCell




'go back to CL and then offset (1,0)



'go to the row over, IF value in NC row 1 match value of GCV, set the next blank cell to NW
ActiveCell.Offset(0, 1).Select

If Row(1).Column(NC).Value = GCV Then
     On Error Resume Next

    For Each xCell In ActiveSheet.Columns(1).Cells
     If Len(xCell) = 0 Then
            xCell.Select
         Exit For
     End If
  Next
'IF no match, go to next row and reiterate and NC = NC + 1 Column(NC).Select
'ElseIf Row(1).Column(NC).Value <> GCV AND <> blank then Next

'IF NC row 1 is BLANK, set it to NW.
'ElseIf Row(1).Column(NC).Value = blank Then Row(1).Column(NC).Select and ActiveCell.Value = NW
ActiveCell.Value = NW

  Next
  Application.ScreenUpdating = True

End Sub
子分类测试()
作为整数的Dim x
Application.ScreenUpdating=False
NumRows=Range(“A1”,Range(“A1”).End(xlDown)).Rows.Count
范围(“A1”)。选择
'GCV=获取单元格值
作为字符串的Dim GCV
'NW=名称和网站
像线一样暗
'CL=单元位置
Dim CL As范围
'NC=新列
如长
Dim xCell As范围
NC=1
对于x=1到NumRows
'获取用于比较的数据
GCV=左侧(活动单元格,12)
'获取用于粘贴的数据
NW=ActiveCell.Value
'将ActiveCell的位置另存为CL
设置CL=ActiveCell
'返回CL,然后偏移(1,0)
'转到上面的行,如果NC行1中的值与GCV的值匹配,则将下一个空白单元格设置为NW
ActiveCell.Offset(0,1)。选择
如果行(1).列(NC).值=GCV,则
出错时继续下一步
对于ActiveSheet.Columns(1.Cells)中的每个xCell
如果Len(xCell)=0,则
选择
退出
如果结束
下一个
'如果不匹配,转到下一行并重复,NC=NC+1列(NC)。选择
'ElseIf行(1).列(NC).值为GCV并为空,然后单击“下一步”
'如果NC行1为空,则将其设置为NW。
'ElseIf Row(1).Column(NC).Value=空白,然后是Row(1).Column(NC).选择并激活cell.Value=NW
ActiveCell.Value=NW
下一个
Application.ScreenUpdating=True
端接头

一个屏幕截图,说明您需要如何展示结果可能会有所帮助。您是否尝试过以文本列为起点?
  Sub SortingTest()

  Dim x As Integer
  Application.ScreenUpdating = False
  NumRows = Range("A1", Range("A1").End(xlDown)).Rows.Count
  Range("A1").Select
  'GCV = Get Cell Value
  Dim GCV As String
  'NW = Name and Website
  Dim NW As String
  'CL = Cell Location
  Dim CL As Range
  'NC = New Column
  Dim NC As Long
  Dim xCell As Range

  NC = 1

  For x = 1 To NumRows


  'get data for comparison
  GCV = Left(ActiveCell, 12)
  'get data for pasting
  NW = ActiveCell.Value
  'save location of ActiveCell as CL
  Set CL = ActiveCell




'go back to CL and then offset (1,0)



'go to the row over, IF value in NC row 1 match value of GCV, set the next blank cell to NW
ActiveCell.Offset(0, 1).Select

If Row(1).Column(NC).Value = GCV Then
     On Error Resume Next

    For Each xCell In ActiveSheet.Columns(1).Cells
     If Len(xCell) = 0 Then
            xCell.Select
         Exit For
     End If
  Next
'IF no match, go to next row and reiterate and NC = NC + 1 Column(NC).Select
'ElseIf Row(1).Column(NC).Value <> GCV AND <> blank then Next

'IF NC row 1 is BLANK, set it to NW.
'ElseIf Row(1).Column(NC).Value = blank Then Row(1).Column(NC).Select and ActiveCell.Value = NW
ActiveCell.Value = NW

  Next
  Application.ScreenUpdating = True

End Sub