あらかじめ並べ替えられているリストから重複しないリストを作成する

この講座は有料講座です。
講座の購入後ご覧になれます。

ログインアカウントの新規作成

解説

重複して取引先名が出現するリストを元にして、重複しない「取引先リスト」を作成します。基礎編レベルの問題ですが、伝票作成マクロを作るうえでとても重要です。

この教材についての過去の質問・感想

4344 : 山田 将之さんのコメント (2015-05-22 06:01:05)

ここは大丈夫です


2543 : 小川慶一の回答 (2014-09-24 07:16:49)

匿名 さん:

基本のアルゴリズムです。ぜひ、しっかりマスターしてください!


2524 : 受講生さんのコメント (2014-09-22 07:17:22)

重複しないリストの作成方法、理解できました。
まだまだ理解を深めていきます。


1615 : 小川慶一の回答 (2014-07-06 08:09:37)

荏隈 直樹 さん:

OKです。
僕なら、データ投入先が1枚のシートで表示しているのも同じシートなので、変数 WSM は使わないですが。


1603 : 荏隈 直樹さんのコメント (2014-07-05 17:39:09)

Sub mondai7()
    Dim BG As Long
    Dim BEG As Long
    Dim ToG As Long
    Dim WSM As Worksheet
    
    Set WSM = Worksheets("main")
    BEG = WSM.Range("B65536").End(xlUp).Row
    ToG = 2
    
    For BG = 2 To BEG
        If WSM.Range("B" & BG).Value <> WSM.Range("B" & BG - 1).Value Then
            WSM.Range("D" & ToG).Value = ToG - 1
            WSM.Range("E" & ToG).Value = WSM.Range("B" & BG).Value
            ToG = ToG + 1
        End If
    Next
End Sub


解説文とほぼ同じでしたね


932 : 小川慶一の回答 (2014-01-06 10:36:12)

岡崎さん、ありがとうございます。

匿名さん、

>If Range("B" & hida).Value <> Range("B" & hida - 1).Value が成立していたのですね。
>よくみたらわかりました!
>なぜそうなるのか考えることが大切なのですね。

そうそう。そうです。よく見て、考えて。

あと、テストもすること。
例えば、以下のようなプログラムを作って、自分で試すの。

[*]のところにブレークポイントを入れてください。
そして、ブレークポイントで止まったところから、[F8]を一回一回押しながら、変数とかセルに入っている値とかを、指さし確認して読み上げながら実行する。

Sub rensyu()	Dim migi As Long	Dim hida As Long	migi = 2	For hida = 2 To 500		If hida = 317 then			Debug.Print hida '[*]		End If		If Range("B" & hida).Value <> Range("B" & hida - 1).Value Then			Range("D" & migi).Value = migi - 1			Range("e" & migi).Value = Range("B" & hida).Value			migi = migi + 1		End If	NextEnd Sub


理系科目は実験が基本です。
人が用意してくれた実験をそのままやれるようになるのはもちろんですが、最終的には、

・課題に出くわしたら、
・自分で仮説を立てて、
・仮説を検証するための実験を設計して、
・実験して、
・結果を確認して、
・仮説を検証する、

というすべてをできるようになることが目標です。その状態の人が、「マクロを使いこなせる人」です。
(いつも辛口ですいません。。)


931 : 小川慶一の回答 (2014-01-06 10:33:53)

匿名さん:

>migi = migi + 1
>の位置をEnd If の後に持ってきたらどうなるか想像してやってみたところ思ったとおりになりました。

いい感じですね!いろいろテストしてみて!


918 : 受講生さんのコメント (2014-01-05 21:41:06)

岡崎さん
コメントありがとうございます。

If Range("B" & hida).Value <> Range("B" & hida - 1).Value が成立していたのですね。
よくみたらわかりました!

コメントいただいて考えてみたら理解できました。
なぜそうなるのか考えることが大切なのですね。


>hida=318の時、
>Range("B318").Value=”宮崎繊維”
>Range("B318").Value ”  ”
>
>∴ If Range("B" & hida).Value <> Range("B" & hida - 1).Value が成立するので、
>  Range("D22" ).Value = 21となったのではと。
>  
>  なので、Endプロパティで最終行の値を取得する事が肝要になってくるのですね。
>  (駄文失礼しました・・・・。自身の復習の意味も兼ねてコメントさせて頂きました。)
>
>


917 : 岡崎年彦さんのコメント (2014-01-05 20:46:39)

Range("B318").Value ”  ”
Range("B317").Value=”宮崎繊維” ←ここを訂正します・・・・。


916 : 岡崎年彦さんのコメント (2014-01-05 20:44:25)

hida=318の時、
Range("B318").Value=”宮崎繊維”
Range("B318").Value ”  ”

∴ If Range("B" & hida).Value <> Range("B" & hida - 1).Value が成立するので、
  Range("D22" ).Value = 21となったのではと。
  
  なので、Endプロパティで最終行の値を取得する事が肝要になってくるのですね。
  (駄文失礼しました・・・・。自身の復習の意味も兼ねてコメントさせて頂きました。)


914 : 受講生さんのコメント (2014-01-05 18:54:33)

migi = migi + 1
の位置をEnd If の後に持ってきたらどうなるか想像してやってみたところ思ったとおりになりました。

もう一つ

For hida = 2 To 500 
と317よりも長めにおいてみたところD22のセルに21が入ってしまいました。
なぜD22にだけ入ってしまうのかが理解ません。
自分でマクロを動かしたときにも一番下の行だけほかの行と
違っていたりするのと関係がある気がするのですが・・


Sub rensyu()
Dim migi As Long
Dim hida As Long
migi = 2
For hida = 2 To 500
If Range("B" & hida).Value <> Range("B" & hida - 1).Value Then
Range("D" & migi).Value = migi - 1
Range("e" & migi).Value = Range("B" & hida).Value
migi = migi + 1
End If
Next
End Sub



3日がかりのその仕事、3分で終わらせる方法教えます。ガラパゴスタディーオンライン講座 ユーザー登録

本講座の動画一覧

  1. 【動画1】 すべてのシートを順に処理する
    【動画1】 すべてのシートを順に処理する 未習得
  2. 【動画2】 所定のシート以外すべてを削除する
    【動画2】 所定のシート以外すべてを削除する 未習得
  3. 【動画3】 所定の条件に一致しないシートすべてを削除する
    【動画3】 所定の条件に一致しないシートすべてを削除する 未習得
  4. 【動画4】 警告ダイアログを出さずにシートを削除する
    【動画4】 警告ダイアログを出さずにシートを削除する 未習得
  5. 【動画5】 複数シートを作成し、取引先名リストにあるのと同じ名前を順に割り当てる
    【動画5】 複数シートを作成し、取引先名リストにあるのと同じ名前を順に割り当てる 未習得
  6. 【動画6】 テンプレートシートを複数コピーし、取引先名リストにあるのと同じ名前を順に割り当てる
    【動画6】 テンプレートシートを複数コピーし、取引先名リストにあるのと同じ名前を順に割り当てる 未習得
  7. 【動画7】 あらかじめ並べ替えられているリストから重複しないリストを作成する
    【動画7】 あらかじめ並べ替えられているリストから重複しないリストを作成する 未習得
  8. 【動画8】 重複しないリストを作成し、新規シート作成時にリストからシート名を生成する
    【動画8】 重複しないリストを作成し、新規シート作成時にリストからシート名を生成する 未習得
  9. 【動画9】 重複しないリストを作成する(並べ替えから行う)
    【動画9】 重複しないリストを作成する(並べ替えから行う) 未習得
  10. 【動画10】 重複しないリストを作成する(並べ替えを行い、最後に元に戻す)
    【動画10】 重複しないリストを作成する(並べ替えを行い、最後に元に戻す) 未習得
  11. 【動画11】 取引記録に登場するすべての取引先名のシートを作成する
    【動画11】 取引記録に登場するすべての取引先名のシートを作成する 未習得
  12. 【動画12】 取引記録に登場するすべての取引先名のシートを作成する(IDの割り振りも行う)
    【動画12】 取引記録に登場するすべての取引先名のシートを作成する(IDの割り振りも行う) 未習得
  13. 【動画13】 取引先ごとに作成したシートにデータ転記を行う
    【動画13】 取引先ごとに作成したシートにデータ転記を行う 未習得
  14. 【動画14】 取引先ごとに作成したシートにデータ転記を行う2
    【動画14】 取引先ごとに作成したシートにデータ転記を行う2 未習得
  15. 【動画15】 データ転記先のシートすべてに対し、罫線を引く等の後処理をする
    【動画15】 データ転記先のシートすべてに対し、罫線を引く等の後処理をする 未習得

塾長 小川慶一

メニュー

コメント紹介

もっと見る

ページの先頭へ