16-マクロで記憶したリストを全て書出す(エクセルマクロ)
前回(15-重複を除いたリストを作る)重複を除いたリストを作ったので、今回はそのリストを全てシートに書き出していきます。
動画で覚える:【マクロルーティン22】重複を除いたリストをつくる!
◆イメージ
◆書くコード
前回(15-重複を除いたリストを作る)は①, ② をやりました。
③から進めていきます。
◆解説
②では、販売リストA列の2行目から21行目までの氏名を重複なしでdic(Dictionary)に追加していくコードを書きました。
③では②で作ったdicを別ファイルのシートに書き出していきます。
❶Workbooks("氏名リスト作成.xlsm").Worksheets("結果").Activate
❸For i = 1 To dic.Count
❷Range("A" & i).Value = dic.Keys(i - 1)
❸Next
+++++++++++++++++++++++++++++++++
❶書出しは「氏名リスト作成」ファイルだけを使いますのでこのファイルをActiveにしておきます。
(❷)書き出すコードを具体的な行番号で書いてみる
ここでdicの中のキーの値を取り出す書き方は
と書きます。
★インデックスは配列に自動的に降られる数値です。
★Dictionaryオブジェクトは中身が配列なのです。
★配列のインデックスは0を先頭に順に振られます。
ということで、
最初にA1セルに書き出される状況をコードで書いてみると
Range("A1").Value = dic.Keys(0)
となりますね。
続けて書いてみると
Range("A1").Value = dic.Keys(0)
Range("A2").Value = dic.Keys(1)
Range("A3").Value = dic.Keys(2)
・
・
・
dicに入っている「キー」が全て書き出されるまで続く。
★よくみるとdic.Keys()のカッコ内のインデックスは「A列の行番号+1」となっていることに気が付きます。
ということは、A列の行番号を「i」とするとdic.Keys()のカッコ内は・・・
↓↓
❷Range("A"& i ).Value = dic.Keys(i - 1)
となりますよね!
ここでいつものとおり、変数「i」を使ったら「i」の範囲を指定して繰返し処理を書きます。
「i」の範囲ですが、ここでは「i」は書出し先A列の行番号になっています。ですので最初の行番号は1で大丈夫ですね。
最終行は?
→dicに追加された氏名の数を全て書き出したいのですからdicの個数が最終行番号になります。
dicの個数を取得するときはcountメソッドというのがあります。
書き方は
と書き、dicの個数を返してくれます。
❸For i = 1 To dic.Count
❷Range("A" & i).Value = dic.Keys(i - 1)
❸Next
できたー!
できました。
これは元とするファイル(販売リスト.xlsx)を開いたまま実行してくださいね。
◆コピー用テキスト
'Option Explicit 変数宣言強制しないで書いていきます。
Sub NameList()
Dim dic As New Scripting.Dictionary
Workbooks("販売リスト.xlsx").Worksheets("リスト詳細").Activate
For i = 2 To 21
shimei = Range("A" & i).Value
If dic.Exists(shimei) = False Then
dic.Add shimei, shimei
End If
Next
Workbooks("氏名リスト作成.xlsm").Worksheets("結果").Activate
For i = 1 To dic.Count
Range("A" & i).Value = dic.Keys(i - 1)
Next
End Sub
◆動画で覚える
この記事が気に入ったらサポートをしてみませんか?