2018年2月10日土曜日

アクティブなシートから「リスト」シートへまとめる

こんにちはShigeです。
このマクロは弥生会計等のコードが出ないソフトからコードで取込をする時に、勘定科目のリストを作成するものになります。
  1. Sub M_Make_List()
  2. Dim Dic, i As Long, buf As String, Keys
  3. Dim MaxRow As Long
  4. Dim shList As Worksheet
  5.     Set Dic = CreateObject("Scripting.Dictionary")
  6.     Set shList = Worksheets("List") 'Listシートをまとめるシートに指定
  7.     MaxRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row  'アクティブなシートの最終行を取得
  8.     For i = 1 To MaxRow 
  9.         buf = Cells(i, 3).Value 'リストを作成したい列の選択
  10.         If Not Dic.Exists(buf) Then
  11.             Dic.Add buf, buf
  12.         End If
  13.         Cells(i, 2).FormulaR1C1 = "=VLOOKUP(RC[1],List!C[-1]:C,2,FALSE)"
  14.     Next i
  15.     ''出力
  16.     Keys = Dic.Keys
  17.     For i = 0 To Dic.Count - 1
  18.         shList.Cells(i + 2, 1) = Keys(i)
  19.     Next i
  20.     Set Dic = Nothing
  21. End Sub

ではこれだけは必須というものをあげていきます。
6行目に変数「shList」に「List」シートをセットしているので、この名前のワークシートを用意してください。
これだけ(*'▽')
基本、このワークシートとまとめたいワークシートが用意してあればこのマクロは動きます。
といってももちろんこれだけでは、希望の部分を抽出できないと思われるので、条件に合わせる部分も注釈していきます。
7行目 MaxRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row 最終行取得
「1」の部分を変えてください。どうかえるのかは先輩諸氏の解説サイトを見ていただくか、その内当サイトでも基本の部分は書くことなくなったら書くことになるかも(おい)
9行目 buf = Cells(i, 3).Value リストを作成したい列
「3」の部分を変えてください。どう変え・・(/・ω・)/

13行目 Cells(i, 2).FormulaR1C1 = "=VLOOKUP(RC[1],List!C[-1]:C,2,FALSE)"
B列にC列の文字列をListシートのA列から見つけ、ListシートのB列のコードを表示しています。ややこしいのでまとめた後、数式で確認してみてください。

かなりざっくりで、しかも元のエクセルの形式を説明していないという投げっぱなし状態なので、自分が使っているエクセルの標準的な形式は別ページに掲載します。
では、また。

0 件のコメント:

コメントを投稿

ブックの全シートをまとめるコード

こんにちは、Shigeです。 今回は、ブックに複数あるシートのデータを「まとめ」のシートにコピペするコードです。 Sub Matome()   Dim i As Integer   Dim lRow As Long, lCol As Long, lRow2 As Lo...