-2

私は多くの手作業を行っており、関連するマクロを見つけようとしましたが、残念ながら何も見つかりませんでした。

基本的に、私のExcelシートには4つの列(A、B、C、D)があります。今月の会社のファイリングで多くのスクリーニングを行った後、列AとBにデータが残っています(範囲の上下にある特定のマーキャップを削除したり、セクター以外に関係のないデータを削除したりします)。

  • 列Aには会社名があります(大文字、小文字、場合によっては組み合わせ)

  • 列Bには日付があります(私は今月ごとにやっています)

これらの2つの列の準備ができたら、WebサイトからWebクエリを実行します。このクエリは、ハイパーリンクを使用してSECで1か月分のファイリングをダウンロードします。

  • 列Cには、HYPERLINKSを含む会社名があります(必ずしも列Aと同じ大文字と小文字の形式である必要はありません)。

  • 列Dには日付があります(私は毎月ダウンロードしているので、同じ月になります)

列Cには、列Aよりもはるかに多いデータがあります。不要な企業のハイパーリンクもすべて含まれており、そのWebサイトでの検索を現在の範囲よりもカスタマイズできる方法はありません。

ファイリングが多いため、列Dは列Bよりもはるかに長くなります

例えば:

Col A   Col B        Col C          Col D
                     (Hyperlinks)
Abc     3/1/2008     AAA            3/1/2008
BCD     3/1/2008     AAB            3/1/2008
BCD     3/2/2008     AAC            3/1/2008 
cDE     3/2/2008     ABC            3/1/2008
DeF     3/3/2008     ABE            3/1/2008
                     BCD            3/1/2008
                     ABC            3/2/2008
                     BCD            3/2/2008
                     CDE            3/2/2008
                     AAA            3/3/2008
                     AAF            3/3/2008
                     DEF            3/3/2008

大文字と小文字を区別せずに同じ日付(列B =列D)であれば、列Aをハイパーリンクに置き換えるために列Cの会社が必要です(会社名は一意です)。

列Cの不要な会社のデータのため、これらの列に「AZ」を並べ替えても、列Aと列Cの会社の順序は同じではありません。CはAよりもはるかに長い列です。

毎月1200から1500のファイリングがあり、私は手動でチェックし、日付ごとに手動で交換しています。私はこれを3年間しなければなりません、私は過去10日間まだ同じ月にいます。まだまだあります。各ファイリングを開いて、備考欄を読み通して更新する必要があります。

4

1 に答える 1

1

以下のコードはあなたが求めていることを実行すると思います。

私はあなたのイメージに一致するようにこのワークシートを作成しました:

画像の前

以下のマクロは、ワークシートを次のように変更します。

ここに画像の説明を入力してください

列CとDは、これらの列のすべての値が列FとGに移動されたため、冗長になりました。

お役に立てれば。

編集

Meenaは自分のデータに対してマクロを実行しましたが、一致するはずのすべての値と一致しませんでした。彼女は自分のデータのコピーを私にメールで送ってくれました。彼女のデータを調べた後、以下のマクロに3つの変更を加えました。

  • Meenaのワークシートには見出し行がありません。定数を使用して最初のデータ行を指定します。値を2から1に変更しました。
  • 参照値の多くには末尾にスペースがあります。比較の前に、TRIM()を使用してこれらの末尾のスペースを削除しました。
  • マクロは、2つの新しいデータ列を作成します。これらはデフォルトの幅のままであるため、値が長い場合、折り返され、数行が必要になります。これで、ソース列から宛先列に列幅をコピーするコードを追加しました。

 Option Explicit
  ' If the columns have to be moved, update these constants
  ' and the code will change to match.
  Const ColRefCompany As Long = 1
  Const ColRefDate As Long = 2
  Const ColWebCompany As Long = 3
  Const ColWebDate As Long = 4
  Const ColSaveCompany As Long = 6
  Const ColSaveDate As Long = 7
  Const ColLastLoad As Long = 4
  Const RowDataFirst As Long = 1        ' No header row
Sub CopyWebValuestoSaveColumns()

  Dim CellValue() As Variant
  Dim ColCrnt As Long
  Dim Rng As Range
  Dim RowRefCrnt As Long
  Dim RowSave() As Long
  Dim RowSaveCrnt As Long
  Dim RowWebCrnt As Long
  Dim RowLast As Long

  ' Find the last cell with a value
  With Worksheets("Sheet1")
    Set Rng = .Cells.Find(What:="*", After:=.Range("A1"), LookIn:=xlFormulas, _
                          LookAt:=xlWhole, SearchOrder:=xlByRows, _
                          SearchDirection:=xlPrevious)

   If Rng Is Nothing Then
     Call MsgBox("Sheet is empty", vbOKOnly)
     Exit Sub
   End If
   RowLast = Rng.Row
   ' Load all reference and web values to CellValue.  Searching an array
   ' is faster than searching the worksheet and hyperlinks are converted
   ' to their display values which gives an easier comparison.
   ' Note for arrays loaded from a worksheet, dimension one is for rows
   ' and dimension two is for columns.
   CellValue = .Range(.Cells(1, 1), .Cells(RowLast, ColLastLoad)).Value

   ' RowSave() will record the position in the save columns of the values
   ' in the web columns.  Allow for one entry per row in web list.
   ReDim RowSave(1 To RowLast)

   RowRefCrnt = RowDataFirst

   ' Set web company names to lower case and remove leading and trailing
   ' spaces ready for matching
   For RowWebCrnt = RowDataFirst To RowLast
     CellValue(RowWebCrnt, ColWebCompany) = _
                               Trim(LCase(CellValue(RowWebCrnt, ColWebCompany)))
   Next

   Do While True
     If CellValue(RowRefCrnt, ColRefCompany) = "" Then
       ' Empty cell in reference company column.  Assume end of list
       Exit Do
     End If
     ' This loop makes no assumptions about the sequence of the
     ' Reference and Web lists.  If you know their sequences match or
     ' if you can sort the two pairs of columns, this loop could be
     ' made faster
     ' Set reference company name to lcase and remove leading and trailing
     ' spaces ready for matching
     CellValue(RowRefCrnt, ColRefCompany) = _
                              Trim(LCase(CellValue(RowRefCrnt, ColRefCompany)))

     For RowWebCrnt = RowDataFirst To RowLast
       If CellValue(RowRefCrnt, ColRefCompany) = _
                                      CellValue(RowWebCrnt, ColWebCompany) And _
          CellValue(RowRefCrnt, ColRefDate) = _
                                          CellValue(RowWebCrnt, ColWebDate) Then
         ' Reference and web values match.
         ' Record that the web values from row RowWebCrnt
         ' are to be copied to row RowRefCrnt
         RowSave(RowWebCrnt) = RowRefCrnt
         Exit For
       End If
     Next
     RowRefCrnt = RowRefCrnt + 1
   Loop
   RowSaveCrnt = RowRefCrnt     ' First row in save column that is available
                                ' for unused web values
   For RowWebCrnt = RowDataFirst To RowLast
     If RowSave(RowWebCrnt) = 0 Then
       ' The web values on this row has not been matched to reference values.
       ' Record these web values are to be moved to the next available row
       ' in the save columns
       RowSave(RowWebCrnt) = RowSaveCrnt
       RowSaveCrnt = RowSaveCrnt + 1
     End If
   Next

   .Columns(ColSaveCompany).ColumnWidth = .Columns(ColWebCompany).ColumnWidth
   .Columns(ColSaveDate).ColumnWidth = .Columns(ColWebDate).ColumnWidth

   ' Copy values from web columns to save columns
   For RowWebCrnt = RowDataFirst To RowLast
     .Range(.Cells(RowWebCrnt, ColWebCompany), _
            .Cells(RowWebCrnt, ColWebDate)).Copy _
                       Destination:=.Cells(RowSave(RowWebCrnt), ColSaveCompany)
   Next

  End With

End Sub
于 2012-05-09T18:20:34.707 に答える