オンライン講座 質問と回答

無料・有料のオンライン講座で寄せられたメッセージの一部を紹介致します。

[9050]重複しないリストを作成する(並べ替えを行い、最後に元に戻す)

2017-10-13 10:04:46 浦山大さんからの投稿です。

Zentaiというプロシージャに処理をまとめました。
確認の意味で一度見て頂けると嬉しいです。
部分部分は問題ないと思います(ちゃんと動きました)。

・インデントの位置は大丈夫でしょうか?
・一つひとつ細切れにしてチェックしながら取り組めました。
 →いつも先生の仰っているパーツごとに細かく…の意味がとてもよ  くわかりました。実務でも使えそうです。
・早速、実務で作成した長いマクロも整理していきたいと思います。

Option Explicit

Dim ws As Worksheet
Dim cCo, cMx, cMigi As Long 'よくコメントで纏めてあるのを見かけるのでやってみました、問題なく動く
Dim namae As String     '別解、理解できました、使えてます。

Sub Zentai()
    Set ws = Worksheets("main")     '見本と"main"2枚なので明示
    cMx = Range("B" & ws.Rows.Count).End(xlUp).Row
    cCo = 2
    cMigi = 2
        Tooshibanngou   '通番を振る
    cCo = 2     'プロシージャ内で設定し直す方がスマートなんですか?
        Narabekae_B     'B列で並べ替える
        Create_List         'リストを作成する
    cCo = 2     'プロシージャ内で設定し直す方がスマートなんですか?
        Narabekae_A     'A列で並べ替える(並び順を元に戻す)
        Sakujo_Tooshibangou '通番を削除する、これで元通り
End Sub

Sub Tooshibanngou()
    For cCo = 2 To cMx
        ws.Range("A" & cCo).Value = cCo - 1
    Next
End Sub

Sub Narabekae_B()
    With ws
    .Sort.SortFields.Clear
    .Sort.SortFields.Add _
        Key:=Range("B1"), _
        SortOn:=xlSortOnValues, _
        Order:=xlAscending, _
        DataOption:=xlSortNormal
        With .Sort
            .SetRange Range("A1:B" & cMx)
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End With
End Sub

Sub Create_List()
    For cCo = 2 To cMx
        If ws.Range("B" & cCo) <> namae Then
            namae = ws.Range("B" & cCo).Value
            ws.Range("D" & cMigi).Value = cMigi - 1
            ws.Range("E" & cMigi).Value = namae
            cMigi = cMigi + 1
        End If
    Next
End Sub

Sub Narabekae_A()
    With ws
    .Sort.SortFields.Clear
    .Sort.SortFields.Add _
        Key:=Range("A1"), _
        SortOn:=xlSortOnValues, _
        Order:=xlAscending, _
        DataOption:=xlSortNormal
        With .Sort
            .SetRange Range("A1:B" & cMx)
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End With
End Sub

Sub Sakujo_Tooshibangou()
    ws.Range("A2:A" & cMx).ClearContents
End Sub

[ 続きを読む ]  返信件数:1件  [ 動画を見る] 

[8918]重複しないリストを作成する(並べ替えを行い、最後に元に戻す)

2017-09-23 18:23:48 浦山大さんからの投稿です。

小川先生
添削頂きましてありがとうございます。
自分の書いたコードと小川先生のコードを見比べてみました。

>’↓丁寧にやるなら、以下のとおり、range(“xx”) の手前に wFm. をつけま
>す。でないと、アクティブシートが wFm でないときに誤動作する可能性
>が高いです。
> ‘ (「並べ替え対象は wFm で、諸条件の設定はアクティブシート」とな>ってしまうため)
> ‘ シートが1枚しかないか、このマクロ実行時には絶対に
>worksheets(“main”) がアクティブになっているという保証があれば
>話は別ですが。

見直してみたら、Rangeの前にwFmが抜けていますね。

> ‘ あるいは、この並べ替えが実行されるより前に、 wFm を明示的にアク>ティブにしておくこと。

添削頂いたコードに記載があったように、
最初の段階でニックネームを付けて、誤動作を防ぐように致します。

①明示的に宣言できる部分は宣言
②並べ替えが実行される前に、wFmを明示的にアクティブにしておく。
練習する度に頂いたコードを見ながら、
添削頂いた点が体得できているか確認します。

添削してもらうととってもよくわかります。
ありがとうございます!

[ 続きを読む ]  返信件数:1件  [ 動画を見る] 

[8910]重複しないリストを作成する(並べ替えを行い、最後に元に戻す)

2017-09-18 16:10:42 浦山大さんからの投稿です。

1~10までの動画を拝見させて頂いて、自分で作ってみました。

※記法、インデント等問題ないでしょうか?
※並べ替えが大変(ごちゃごちゃ)でした。
→過去の皆さんのコメント等参考にさせて頂いて自分なりに編集してみました。
■動作は確認しました、意図通りに動いています。
■別解の様に変数namaeを使用するのにもチャレンジしてみます。

基礎編で実施していることについてはサラサラ書けています。不思議です…。

また、今までブレークポイントをあまり使ってこなかったんですが、使い方が今回の練習で体得できました。途中途中でしっかり検証、実験しながらでないと訳がわからなくなってしまいますね。Debug.Printも入れながら作業するようにしています。

Sub renshu()
    Dim wFm As Worksheet
    Dim cMx As Long
    Dim cGyo As Long
    Dim cMigi As Long
        cMx = Range("B" & ActiveSheet.Rows.Count).End(xlUp).Row
        cMigi = 2
    
    For cGyo = 2 To cMx
        Range("A" & cGyo).Value = cGyo - 1
    Next
    
    Set wFm = ActiveWorkbook.Worksheets("main") 'ブレークポイント①↑通し番号を振る
    
    With wFm.Sort
            .SortFields.Clear
            .SortFields.Add Key:=Range("B1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            .SetRange Range("A1:B" & cMx)
            .Header = xlYes
            .Orientation = xlTopToBottom
            .Apply
    End With
    
    For cGyo = 2 To cMx 'ブレークポイント②↑B列で並べ替え
        If Range("B" & cGyo).Value <> Range("B" & cGyo - 1).Value Then
            Range("D" & cMigi).Value = cMigi - 1
            Range("E" & cMigi).Value = Range("B" & cGyo).Value
            cMigi = cMigi + 1
        End If
    Next
    
    With wFm.Sort   'ブレークポイント③↑リスト書き出しまで
            .SortFields.Clear
            .SortFields.Add Key:=Range("A1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            .SetRange Range("A1:B" & cMx)
            .Header = xlYes
            .Orientation = xlTopToBottom
            .Apply
    End With
    
    Range("A2:A" & cMx).ClearContents   'ブレークポイント④↑A列で並べ替え
End Sub     '⑤番号を消す-A列を削除

[ 続きを読む ]  返信件数:1件  [ 動画を見る] 

[2587]重複しないリストを作成する(並べ替えを行い、最後に元に戻す)

2014-09-30 01:25:31 明石 照伸さんからの投稿です。

お世話になります。

元のリストに番号を振って、
最後に削除するのが、最初
意味がわからなかったのですが(^^;、

元のリストの並びを元の順に戻すために
行っていたのですね。

一時的に元データを整形・加工して
処理しやすくすることで、マクロ作成を
楽にしているのですね。
非常に勉強になりました。(^^

毎回ライブ感があって
とても頭と心に響く動画解説ですね。(^^

[ 続きを読む ]  返信件数:1件  [ 動画を見る] 

[2573]重複しないリストを作成する(並べ替えを行い、最後に元に戻す)

2014-09-28 12:56:52 受講生さんからの投稿です。

伝票マクロ、とても勉強になります。
ひとつひとつのスキルを大切にして頑張ります。

[ 続きを読む ]  返信件数:1件  [ 動画を見る] 

[915]重複しないリストを作成する(並べ替えを行い、最後に元に戻す)

2014-01-05 20:36:03 受講生さんからの投稿です。

自分の頭で書けるように、何回も復習したいと思います。

[ 続きを読む ]  返信件数:1件  [ 動画を見る] 


各講座ごとのメッセージを見る場合はこちら

 

まずはここから!スマホでも学べる無料動画講座

今なら先着30名限定で無料!定価4,800円の、初心者のためのエクセルマクロ動画講座。
  1. Excel 97~Excel 2016まですべて対応。動画本数20本、総再生時間2時間44分53秒
  2. PC, Mac, iPhone, iPad, Androidのお好みの環境で、いつでも好きなときに学べます。
2004年から10年間述べ3,000名以上に実施した研修の経験と実績を集約した講座です。
いますぐ無料で試してください。

トップへ