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

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

[2488]複数シートを作成し、取引先名リストにあるのと同じ名前を順に割り当てる

2014-09-15 19:32:46 受講生さんからの投稿です。

「転記元」のワークシートをSetしていなかったため、最初はマクロがうまくまわりませんでしたが、
動画を見て、原因が分かりました。まだまだ足りない部分が多いですが、数をこなして頑張ります。

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

[2471]警告ダイアログを出さずにシートを削除する

2014-09-14 21:55:20 受講生さんからの投稿です。

Applicaion.DisplayAlertsとApplication.ScreenUpdatingは多用しています。
組み合わせてもっともっとレベルの高いマクロを組んでいきたいです。

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

[2470]所定の条件に一致しないシートすべてを削除する

2014-09-14 21:48:16 受講生さんからの投稿です。

個人的にはLeft関数を使う方が分かりやすかったです。

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

[2467]所定のシート以外すべてを削除する

2014-09-14 19:00:16 受講生さんからの投稿です。

動作確認出来ました。
For Each構文、うまく動くと結構感動します。

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

[2415]すべてのシートを順に処理する

2014-09-07 19:37:42 受講生さんからの投稿です。

For Each構文、好きになりました。
分かりやすい動画、いつもありがとうございます。

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

[1887]取引記録に登場するすべての取引先名のシートを作成する(IDの割り振りも行う)

2014-08-10 08:28:23 古川智之さんからの投稿です。

B列の並び替えについて、2007だと形式がちがっていました。
テキストを参照したら、並び替えできました。(2003の方がシンプルですね。)
09_homeworkの課題をやり始めました。
最初はこの動画の手順からですね。

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

[1607]重複しないリストを作成する(並べ替えから行う)

2014-07-05 18:30:54 荏隈 直樹さんからの投稿です。

Sub mondai9()
    Columns("B:B").Select
    ActiveWorkbook.Worksheets("main").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("main").Sort.SortFields.Add Key:=Range("B1"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("main").Sort
        .SetRange Range("A2:B317")
        .Orientation = xlTopToBottom
        .Apply
    End With

    Dim BG As Long
    Dim BEG As Long
    Dim WSM As Worksheet
    Dim ToG As Long
    
    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
    
    Range("A2:B2").Select
    ActiveWorkbook.Worksheets("main").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("main").Sort.SortFields.Add Key:=Range("A2"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("main").Sort
        .SetRange Range("A2:B317")
        .Orientation = xlTopToBottom
        .Apply
    End With
End Sub


出来たことは出来たのですが、
Excel2010の自動記録が結構複雑で、どこを削ってよいか分からず、こんな長いマクロになってしまいました。

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

[1604]重複しないリストを作成し、新規シート作成時にリストからシート名を生成する

2014-07-05 17:57:40 荏隈 直樹さんからの投稿です。

Sub mondai8()
    DeleteSheets
    CopyCreate
End Sub

Sub CopyCreate()
    Dim BG As Long
    Dim BEG As Long
    Dim WSM As Worksheet
    
    Set WSM = Worksheets("main")
    BEG = WSM.Range("B65536").End(xlUp).Row
    
    For BG = 2 To BEG
        If WSM.Range("B" & BG).Value <> WSM.Range("B" & BG - 1).Value Then
            Sheets("main1").Copy After:=Sheets(Sheets.Count)
            ActiveSheet.Name = WSM.Range("B" & BG).Value
        End If
    Next
End Sub


問題なく出来ました。

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

[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


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

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

[1602]テンプレートシートを複数コピーし、取引先名リストにあるのと同じ名前を順に割り当てる

2014-07-05 16:43:18 荏隈 直樹さんからの投稿です。

問題5と1行変えただけで出来ました。

Sub mondai6()
    
    Dim ws As Worksheet
    Dim WSM As Worksheet
    Dim stAry() As String
    Dim G As Long
    Dim EG As Long
    
    Set WSM = Worksheets("main")
    EG = WSM.Range("A65536").End(xlUp).Row
    
    For G = 2 To EG
        ReDim Preserve stAry(G - 2)
        stAry(G - 2) = WSM.Range("B" & G).Value
        Debug.Print stAry(G - 2)
    Next
    
    For G = LBound(stAry) To UBound(stAry)
        Sheets("main1").Copy After:=Sheets(Sheets.Count) '変えた行
        ActiveSheet.Name = stAry(G)
    Next
End Sub

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

[1601]複数シートを作成し、取引先名リストにあるのと同じ名前を順に割り当てる

2014-07-05 16:35:02 荏隈 直樹さんからの投稿です。


Sub mondai4()
    Dim ws As Worksheet
    Dim WSM As Worksheet
    Dim stAry() As String
    Dim G As Long
    Dim EG As Long
    
    Set WSM = Worksheets("main")
    EG = WSM.Range("A65536").End(xlUp).Row
    
    For G = 2 To EG
        ReDim Preserve stAry(G - 2)
        stAry(G - 2) = WSM.Range("B" & G).Value
        Debug.Print stAry(G - 2)
    Next
    
    For G = LBound(stAry) To UBound(stAry)
        Sheets.Add After:=Sheets(Sheets.Count)
        ActiveSheet.Name = stAry(G)
    Next

End Sub


発展編2もやったことだし、折角なので、配列を使って書いてみました。
ところで、追加したワークシートの名前を変える時、いつも上記の様にやっていたのですが、
wToのように先にオブジェクト型の変数を使う方法もあるのですね。
またひとつ新たな発見が。

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

[980]データ転記先のシートすべてに対し、罫線を引く等の後処理をする

2014-01-27 18:00:39 望月 晋一さんからの投稿です。

先ほど出したコメントの補足です。
●罫線作成部分の応用について~応用と言えるかわかりませんが、転記元表の明細行数を数えて、転記先表に記載するといった作業でも、条件付けの点などで共通すると気が付きました。
と書いた部分ですが、ここで転記元表と転記先表という表現を使いましたが、課題の「main」から「main1」のコピーシートへの転記の場合のことではありません。課題の中で最初の方に、重複しないリスト作成というのがありました。重複しないリストを別シートに作る場合に、合わせて転記元の明細件数(重複している件数ということになる)を、重複しないリストに併記する場合の事例です。紛らわしい書き方ですみません。でもこうした使い方はありそうなので上げておきました。

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

[975]データ転記先のシートすべてに対し、罫線を引く等の後処理をする

2014-01-27 13:51:29 望月 晋一さんからの投稿です。

昨年セミナーを受講した時、取り組んだ課題ですが、改めてこの動画セミナーを一通り見てプログラムを2回最初から作ってみました。マクロの自動記録から使いたい機能を取ってくる所など、この動画で出てくる操作手順を思い起こしながら取り組んでみました。改めて実によく考え尽くされた手順であることがわかりました。もうこの課題には何回も取り組んでいますが、その度に、新たな気付きや「なるほど!」と感心する事があります。今更ながらですが。例えば次のような点です。
●「ハナコ」のステップ~VBAがよくわからない時、上から順に書いていこうとする。未熟な段階では仕方ないかもしれませんが、VBAに限らず他の思考作業でも、上から順に考えてばかりだったのかなという気がします。こなれた表現をすると、「頭の使い方」にも通じる法則かなと思います。
●プログラム内の罫線作成部分~どこに入れるかと考える所で、どうしても最初は、メインの処理の前後のどこか? ここだとこの条件に引っかかる、うまくいきそうにないとか、すぐ悩みモードに入って手が止まってしまいがちだと思いますが、IF文で使う条件付けをしたら無理なくあてはまるという、できてしまえば「え、これだけ!」という答えですが、この答えに辿り着くまでの思考ステップも、VBA習得に必須な技術だと思いました。
●罫線を最終行より一行多く引く設定の意味~前に学んでいたかもしれませんが、今回の動画セミナーで、間の行を考えての事という説明を見て、「なるほど」と思いました。罫線を引く範囲を最終行に合わせる方法も解説されていて、こちらも、「あ、こういうやり方があるんだ」と、柔軟な書き方、使い方ができるものだと感心しました。
●罫線作成部分の応用について~応用と言えるかわかりませんが、転記元表の明細行数を数えて、転記先表に記載するといった作業でも、条件付けの点などで共通すると気が付きました。
●With構文~罫線機能の部分とか明細行処理とか、頭出しが同じ記述箇所がVBAでは数多く出てくるので、この構文を活用できるとプログラムが大分読みやすくなり、プログラム作成時の間違い探しや作成後の保守で、効率アップが図れると思いました。先生の動画セミナーでは、置換機能を合わせて使って、With構文を入れた記載にさっと変える場面が出てきましたが、こうした技術も是非身に付けたいと思いました。

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

[952]データ転記先のシートすべてに対し、罫線を引く等の後処理をする

2014-01-14 22:51:52 受講生さんからの投稿です。

罫線だけのマクロを書いて本体のマクロに呼び出させるようにするとスッキリ書けるんですね!
withの使いこなしを更に練習してみようと思いました。

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

[922]警告ダイアログを出さずにシートを削除する

2014-01-06 01:13:08 受講生さんからの投稿です。

Dim wFm As Worksheet →  Set wFm = Worksheets(“main”)

複数形と単数形の違いがやっとすっきりした。
『Worksheets』は、名前指定することで単数形扱いになる。

以前触れた時に、うっすら感じていたのは、シートを名前で呼び出すのなら、
単数形でWorksheet(“main”)でもよさそうなものだということだった。
やってみてもエラーになるので、しっくり来ていなかったが、
複数形のコレクションに対して、一意のシートを指定することで単数系と同格になる決まりだとわかった。

自分事ながら、こういう細かい部分が?になったまま放置して、
積み重なったときに全体がつかめずに諦めるパターンが続いていたんだと気づいた。

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

[921]データ転記先のシートすべてに対し、罫線を引く等の後処理をする

2014-01-06 01:01:39 山口 舞さんからの投稿です。

面白くて一気に最後まで見ました!罫線ワザは、メール講座を添削いただいたときも鮮やかだと思いましたが、動画になるとより鮮烈な印象として残りますね。
また他の内容も、回を重ね繰り返し登場した場合には一度目とは違う手法を紹介されている等、日頃から「いかにしてより効率化できるか」を検討するヒントがたくさんあったと思います。
もう一度、次はノーヒントで伝票作成にチャレンジしたいと思いました。ありがとうございました!

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

[920]複数シートを作成し、取引先名リストにあるのと同じ名前を順に割り当てる

2014-01-05 22:14:26 山口 舞さんからの投稿です。

「転記先・転記元の各ワークシートにニックネーム(変数)を作る」などの Tips が良いです。実際にはこんなところでよく躓いたことを思い出しました。

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

[919]所定の条件に一致しないシートすべてを削除する

2014-01-05 21:56:50 受講生さんからの投稿です。

複数条件を設けて If で分岐する場合ですが、「If」を重ねるのと、And で条件を結ぶのとでは、どちらかに負荷がかからない等のメリットがあったりするんでしょうか?

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

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

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

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

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

[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


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

[913]テンプレートシートを複数コピーし、取引先名リストにあるのと同じ名前を順に割り当てる

2014-01-05 18:08:49 受講生さんからの投稿です。

5回見ました~!また2-3日したら見たいと思います。

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

[909]警告ダイアログを出さずにシートを削除する

2014-01-04 17:32:54 受講生さんからの投稿です。

動画を見ながらマクロを動かすとエラーが出ます。よく見ると文字が違っています。覚えてしまったほうが早そうです。

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

[908]警告ダイアログを出さずにシートを削除する

2014-01-04 10:49:03 受講生さんからの投稿です。

Applecation. DisplayAlerts = False
Applecation. DisplayAlerts = True
対にする

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

[907]所定の条件に一致しないシートすべてを削除する

2014-01-04 10:33:21 受講生さんからの投稿です。

このパターン、よく使います。グループ化してまとめて集計する時とか

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

[904]所定の条件に一致しないシートすべてを削除する

2014-01-04 08:51:48 受講生さんからの投稿です。

何回も動画を確認して身につけると強力な武器になりそうです。

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

[903]すべてのシートを順に処理する

2014-01-04 08:16:25 岡崎年彦さんからの投稿です。

For Each構文は何だか使いにくいな~と思っていましたが、
型を丸暗記してしまって、無意識レベルまでが体に染み込ませると、
案外イケるのね!と再認識。

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

[876]警告ダイアログを出さずにシートを削除する

2013-12-24 09:24:53 受講生さんからの投稿です。

行に先頭を合わせる時、行き過ぎた行はShift + tabで戻す。

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

[875]所定のシート以外すべてを削除する

2013-12-23 19:47:26 受講生さんからの投稿です。

Debug print をあまり活用してなかったと反省。

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

[873]すべてのシートを順に処理する

2013-12-23 19:37:56 受講生さんからの投稿です。

ここまではOK
そして、ここまででも業務時間短縮にかなり役立ってます!

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

[872]所定のシート以外すべてを削除する

2013-12-23 18:17:48 受講生さんからの投稿です。

途中ででてきた<>の使いかたを考えていました。
If Range(“A1”)<>”1” Then
 Range(“B1”).Valur=1
End If
となるとRange(“A1”)が1でなかったらこうするという使い方ができるわけですね。

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


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

 

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

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

トップへ