見出し画像

16-マクロで記憶したリストを全て書出す(エクセルマクロ)


前回(15-重複を除いたリストを作る)重複を除いたリストを作ったので、今回はそのリストを全てシートに書き出していきます。

動画で覚える:【マクロルーティン22】重複を除いたリストをつくる!

◆イメージ

画像2


◆書くコード

画像2

前回(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の中のキーの値を取り出す書き方は

画像4

と書きます。

★インデックスは配列に自動的に降られる数値です。
★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メソッドというのがあります。
書き方は

画像4

と書き、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

◆動画で覚える


この記事が気に入ったらサポートをしてみませんか?