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

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

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

解説

本番3:データ投入後、各シートの表に罫線を引いていきます。罫線を引く処理をどこに入れたらいいか悩みどころですが、いきなり解答を見ないでいろいろトライしてください。

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

12424 : 小川慶一の回答 (2020-09-13 12:22:12)

ゲストさん:

こんにちは。

おお、すばらしいです☆

> 仕上がったマクロがサクサク動いているのを見るとうれしいです。

ほんと、うれしくなりますよね。僕も、いまだにマクロを書き上げると高揚します。
ひきつづき、お楽しみください☆


12422 : ゲストさんのコメント (2020-09-13 00:16:51)

感想です。
マクロ記録を使いながら、何も見ることなく伝票作成マクロを作成できるようになりました。
仕上がったマクロがサクサク動いているのを見るとうれしいです。


9061 : 小川慶一の回答 (2017-10-15 12:32:06)

浦山大さん:

> 勉強を始めて2か月程でこんなに書けるようになるなんて思っていませんでした。感謝しています。

v(^^

実務でも成果でているようですね。
なので特に心配していませんが。。ひきつづきお楽しみください☆

Option Explicit
'↓以下2行、別の添削でお伝えしたとおり。都度データ型を指定しましょう!
Dim wFm, wTo, wS, wA As Worksheet
Dim cMx, cCo, cTo As Long
Dim daHiduke As Date
Dim strNamae As String
 
Sub Zentai()
    Set wFm = Worksheets("main")
    Set wTo = Worksheets("main1")
    cMx = wFm.Range("B" & wFm.Rows.Count).End(xlUp).Row
    cCo = 2
        'インデント不正
        Delete_Sheet
        Tooshi_bangou
    cCo = 2
        'インデント不正
        NarabekaeB
    cTo = 16
        'インデント不正
        Sheet_Create_Kakikomi
    cCo = 2
    strNamae = ""
        'インデント不正
        NarabekaeA
        Sakujo_Tooshibangou
End Sub
 
Sub Delete_Sheet()
    '↓[*1], [*2] はきちんと入れ子になるように。
    '↓インデント不正
       For Each wS In Worksheets         '[*1-1]
       Application.DisplayAlerts = False '[*2-1]
           If wS.Name <> "main1" And wS.Name <> "main" Then
                wS.Delete
           End If
       Next                              '[*1-2]
       Application.DisplayAlerts = True  '[*2-2]
End Sub
 
Sub Tooshi_bangou()
    For cCo = 2 To cMx
        wFm.Range("A" & cCo).Value = cCo - 1
    Next
End Sub
 
Sub NarabekaeB()
    With wFm
        wFm.Sort.SortFields.Clear
        wFm.Sort.SortFields.Add Key:=Range("B1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With .Sort
            .SetRange Range("A1:G" & cMx)
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End With
End Sub
 
Sub Sheet_Create_Kakikomi()
    For cCo = 2 To cMx
        If wFm.Range("B" & cCo).Value <> strNamae Then
            If strNamae <> "" Then
                wA.Range("H2").Value = wA.Range("K" & cTo - 1).Value
                Keisen
            End If
            cTo = 16
            strNamae = wFm.Range("B" & cCo).Value
            wTo.Copy after:=wFm
            Set wA = ActiveSheet
            wA.Name = strNamae
            wA.Range("J12").Value = strNamae
        End If
        With wA.Range("B" & cTo)
            .Offset().Value = Year(wFm.Range("C" & cCo).Value)       'wA B
            .Offset(, 1).Value = Month(wFm.Range("C" & cCo).Value)       'wA C
            .Offset(, 2).Value = Day(wFm.Range("C" & cCo).Value)         'wA D
            .Offset(, 3).Value = wFm.Range("D" & cCo).Value                  'wA E
            .Offset(, 4).Value = wFm.Range("E" & cCo).Value                  'wA F
            .Offset(, 6).Value = wFm.Range("F" & cCo).Value                  'wA G
            Select Case wFm.Range("G" & cCo).Value                                                     'H
                Case Is > 0
                    .Offset(, 7).Value = wFm.Range("G" & cCo).Value              'wA I
                Case Is < 0
                    .Offset(, 8).Value = wFm.Range("G" & cCo).Value              'wA J
            End Select
            If cTo = 16 Then
                .Offset(, 9).Value = .Offset(, 7).Value + .Offset(, 8).Value       'wA K= wA I+ wA J
            Else
                .Offset(, 9).Value = wA.Range("K" & cTo - 1).Value + .Offset(, 7).Value + .Offset(, 8).Value      'wA K=wA Kの一個上+wA I+ wA J
            End If
        End With
        cTo = cTo + 1
    Next
    wA.Range("H2").Value = wA.Range("K" & cTo - 1).Value
    Keisen
End Sub
 
Sub NarabekaeA()
    With wFm
        wFm.Sort.SortFields.Clear
        wFm.Sort.SortFields.Add Key:=Range("A1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With .Sort
            .SetRange Range("A1:G" & cMx)
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End With
End Sub
 
Sub Sakujo_Tooshibangou()
    wFm.Range("A2:A" & cMx).ClearContents
End Sub
 
Sub Keisen()
    With wA.Range("B16:K" & cTo)
        .Borders(xlDiagonalDown).LineStyle = xlNone
        .Borders(xlDiagonalUp).LineStyle = xlNone
        With .Borders(xlEdgeLeft)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
        With .Borders(xlEdgeTop)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
        With .Borders(xlEdgeBottom)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
        With .Borders(xlEdgeRight)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
        With .Borders(xlInsideVertical)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlHairline
        End With
        With .Borders(xlInsideHorizontal)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlHairline
        End With
    End With
End Sub


9052 : 浦山大さんのコメント (2017-10-13 16:43:27)

問題文だけ参照にし、
ノーヒントで罫線を引く部分まで作りました(通し番号が振られていない前提で作成)。
きちんと動きました…(大丈夫でしょうか?)。
一度、紙で印刷してみたら、A4用紙3枚分位になりました。

勉強を始めて2か月程でこんなに書けるようになるなんて思っていませんでした。感謝しています。
引き続き、よろしくお願いします(そろそろ、フォローメールセミナー30題にも取り掛かっていきたいと思っています)。

Option Explicit

Dim wFm, wTo, wS, wA As Worksheet
Dim cMx, cCo, cTo As Long
Dim daHiduke As Date
Dim strNamae As String

Sub Zentai()
    Set wFm = Worksheets("main")
    Set wTo = Worksheets("main1")
    cMx = wFm.Range("B" & wFm.Rows.Count).End(xlUp).Row
    cCo = 2
        Delete_Sheet
        Tooshi_bangou
    cCo = 2
        NarabekaeB
    cTo = 16
        Sheet_Create_Kakikomi
    cCo = 2
    strNamae = ""
        NarabekaeA
        Sakujo_Tooshibangou
End Sub

Sub Delete_Sheet()
       For Each wS In Worksheets
       Application.DisplayAlerts = False
           If wS.Name <> "main1" And wS.Name <> "main" Then
                wS.Delete
           End If
       Next
       Application.DisplayAlerts = True
End Sub

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

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

Sub Sheet_Create_Kakikomi()
    For cCo = 2 To cMx
        If wFm.Range("B" & cCo).Value <> strNamae Then
            If strNamae <> "" Then
                wA.Range("H2").Value = wA.Range("K" & cTo - 1).Value
                Keisen
            End If
            cTo = 16
            strNamae = wFm.Range("B" & cCo).Value
            wTo.Copy after:=wFm
            Set wA = ActiveSheet
            wA.Name = strNamae
            wA.Range("J12").Value = strNamae
        End If
        With wA.Range("B" & cTo)
            .Offset().Value = Year(wFm.Range("C" & cCo).Value)       'wA B
            .Offset(, 1).Value = Month(wFm.Range("C" & cCo).Value)       'wA C
            .Offset(, 2).Value = Day(wFm.Range("C" & cCo).Value)         'wA D
            .Offset(, 3).Value = wFm.Range("D" & cCo).Value                  'wA E
            .Offset(, 4).Value = wFm.Range("E" & cCo).Value                  'wA F
            .Offset(, 6).Value = wFm.Range("F" & cCo).Value                  'wA G
            Select Case wFm.Range("G" & cCo).Value                                                     'H
                Case Is > 0
                    .Offset(, 7).Value = wFm.Range("G" & cCo).Value              'wA I
                Case Is < 0
                    .Offset(, 8).Value = wFm.Range("G" & cCo).Value              'wA J
            End Select
            If cTo = 16 Then
                .Offset(, 9).Value = .Offset(, 7).Value + .Offset(, 8).Value       'wA K= wA I+ wA J
            Else
                .Offset(, 9).Value = wA.Range("K" & cTo - 1).Value + .Offset(, 7).Value + .Offset(, 8).Value      'wA K=wA Kの一個上+wA I+ wA J
            End If
        End With
        cTo = cTo + 1
    Next
    wA.Range("H2").Value = wA.Range("K" & cTo - 1).Value
    Keisen
End Sub

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

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

Sub Keisen()
    With wA.Range("B16:K" & cTo)
        .Borders(xlDiagonalDown).LineStyle = xlNone
        .Borders(xlDiagonalUp).LineStyle = xlNone
        With .Borders(xlEdgeLeft)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
        With .Borders(xlEdgeTop)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
        With .Borders(xlEdgeBottom)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
        With .Borders(xlEdgeRight)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
        With .Borders(xlInsideVertical)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlHairline
        End With
        With .Borders(xlInsideHorizontal)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlHairline
        End With
    End With
End Sub


8036 : 小川慶一の回答 (2017-04-21 11:22:57)

 松隈 利幸 さん:

>この名前は既に使われています。別の名前を入力してください。
>というメッセージがあります。

その名前はすでに使われているからです。

同じ名前のシートを複数作ることはできません。これはマクロ以前のエクセルの仕様です。

ということなので、そのエラーが出た場合は、その名前のシートがすでに存在しているのでは?と、探してみてください。

呼び出して使っている以下のプロシージャで、しっかり初期化(つまり、なくなるべきシートがすべてなくなっている状態にすること)ができていないのではないかと思います。

DeleteSheets


8035 : 松隈 利幸さんのコメント (2017-04-21 11:14:39)

小川 様

お世話になります。
何度も復習しながら覚えていっています。
伝票マクロを何とか会社用に代えてみたのですが、
一部でどうしても引っかかるところがあります。
Private Sub ExeCreateDenpyo()
DeleteSheets
Dim lnFm As Long
Dim lnFmMx As Long
Dim st As String
Dim shFm As Worksheet
Dim shTo As Worksheet
Dim dt As Date
Set shFm = Worksheets("main")
lnFmMx = shFm.Range("E1048576").End(xlUp).Row
Dim lnTo As Long
For lnFm = 3 To lnFmMx
If st <> shFm.Range("E" & lnFm).Value Then
If lnFm > 3 Then
Keisen
End If
st = shFm.Range("E" & lnFm).Value
Sheets("main1").Copy After:=Sheets(2)
Set shTo = ActiveSheet
> shTo.Name = st
lnTo = 16
End If
shTo.Range("A" & lnTo).Value = shFm.Range("B" & lnFm).Value
shTo.Range("B" & lnTo).Value = shFm.Range("C" & lnFm).Value
shTo.Range("C" & lnTo).Value = shFm.Range("D" & lnFm).Value
shTo.Range("D" & lnTo).Value = shFm.Range("E" & lnFm).Value
shTo.Range("E" & lnTo).Value = shFm.Range("F" & lnFm).Value
shTo.Range("F" & lnTo).Value = shFm.Range("G" & lnFm).Value
shTo.Range("G" & lnTo).Value = shFm.Range("H" & lnFm).Value
lnTo = lnTo + 1
Next
goukei
Keisen
shFm.Activate
End Sub

> shTo.Name = st

のところでデバッグしてしまうのです。

この名前は既に使われています。別の名前を入力してください。
というメッセージがあります。
最初はうまくいっていたのですが、最近でるようになりました。
どこが悪いのでしょうか。
お教えください。
Excel2016を使用しています。

最後の動画配信後ずいぶん時間が経っている 松隈


6096 : 小川慶一の回答 (2016-03-24 13:01:31)

平澤 延弘 さん:

ステキです ヾ(´ー`)ノ
どんどん学んでください。応援シテマス☆


>小川先生
> こんにちは。
> 初めてホームページで伝票作成マクロの動画を見た後、
>長い間自分でこんなプログラムを作成してみたいと思ってきましたが、
>四苦八苦しながらもなんとかここまで来ることができました。
>
> 私は伝票作成業務そのものは担当しておりませんが、
>このマクロを学ぶ過程で得たデータの転記やシート作成の知識は、
>十分私の業務に活かせるものでした。
>まだ仕事ではここまで生産性の高いマクロは作成できていませんが、
>「3日分の仕事を3分で」というレベルまでは大分近づいてきたように思います。
>
> この後は他の講座を受講してさらに知識を深めたいと思いますので、
>これからもよろしくお願いいたします。


6043 : 平澤 延弘さんのコメント (2016-03-22 19:01:49)

小川先生
 こんにちは。
 初めてホームページで伝票作成マクロの動画を見た後、
長い間自分でこんなプログラムを作成してみたいと思ってきましたが、
四苦八苦しながらもなんとかここまで来ることができました。

 私は伝票作成業務そのものは担当しておりませんが、
このマクロを学ぶ過程で得たデータの転記やシート作成の知識は、
十分私の業務に活かせるものでした。
まだ仕事ではここまで生産性の高いマクロは作成できていませんが、
「3日分の仕事を3分で」というレベルまでは大分近づいてきたように思います。

 この後は他の講座を受講してさらに知識を深めたいと思いますので、
これからもよろしくお願いいたします。


4372 : 山田 将之さんのコメント (2015-05-23 06:20:21)

ありがとうございました。


4102 : 小川慶一の回答 (2015-04-18 15:09:43)

井上 聡 さん:

こんにちは。

InMx = Range("B" & Rows.Count).End(xlUp).Row
Range("B16:K" & InMx + 1).Select


の、2行目の InMx に一行目の右辺をそのまま代入してみてください。
それで動きませんでしょうか。




>罫線の範囲を設定する方法について
>Dim InMx As Long
> InMx = Range("B" & Rows.Count).End(xlUp).Row
> Range("B16:K" & InMx + 1).Select
>この場合は、変数の範囲が選択されました。
>("K" & Rows.Count).End(xlUP)のつもりでしたが範囲が選択されません。
>  Range("B16:K" & Rows.Count).End(xlUP).Select
>一行で表すにはどうすればいいのでしょうか。


4097 : 井上 聡さんのコメント (2015-04-16 20:36:51)

罫線の範囲を設定する方法について
Dim InMx As Long
InMx = Range("B" & Rows.Count).End(xlUp).Row
Range("B16:K" & InMx + 1).Select
この場合は、変数の範囲が選択されました。
("K" & Rows.Count).End(xlUP)のつもりでしたが範囲が選択されません。
  Range("B16:K" & Rows.Count).End(xlUP).Select
一行で表すにはどうすればいいのでしょうか。


3766 : 小川慶一の回答 (2015-02-07 20:25:30)

ゲスト さん:

ご指摘ありがとうございます。
なるほど、そういうことだったのですね。

>Enshu20700 ⇒NG
>Enshu21000~21200 ⇒NG

↑前回書いたとおりの理由でエラーになっています。(既存のものと同じ名前のシートを作ろうとしてエラー)

>Enshu20800~20900 ⇒コンパイルエラー

「Sub または Function が定義されていません」と表示されますね。
呼び出し先のプロシージャが存在しないからです。


動画解説では「伝票作成ボタンを押してください」とは指示していませんし、解説の本線とは無関係なところだっだので、気にしていませんでした。
なので、「まさかこれらのボタンを押したらエラーが出た」といった問合せが発展編受講者レベルの方から来るとは思っていませんでした。

今後のことを考えて修正版のファイルを作りたいと思います。

とりあえず、学習にあたっては、これらのエラーは気にせず、動画での解説内容に集中していただければと思います。

ありがとうございました。


3765 : 佐々木久さんのコメント (2015-02-07 20:03:56)

PC環境:Win7 Excel:2013
他にエクセルファイルが開かれていないことを確認して、再ダウンロードしたdenpyo.zipの中の
ファイルを開き、伝票作成を実行。
エクセルファイルを完全に閉じて、次のファイルの実行を繰り返し。
以下が結果。

Enshu20100~20500 ⇒OK
Enshu20600 ⇒ボタンなし
Enshu20700 ⇒NG
Enshu20800~20900 ⇒コンパイルエラー
Enshu21000~21200 ⇒NG

OKは消去・実行を繰り返してもエラー発生せず。

NGはシートに「main1」「main」の2シートのみ。
エラー発生時のシートの並び順は左から。
「main1」「main」「Sheet2」「愛知販売」
デバックを押すと、
「Sub CreateSheets」の
「ActiveSheet.Name = w.Range("B" & c).Value」
が黄色く反転します。

作成実行せず、「mdlMain」から「Sub CreateSheets」をF8連打。
「ActiveSheet.Name = w.Range("B" & c).Value」が黄色になり、
その時「c」の値は「c = 3」ここでF8を押してエラーになります。

よろしくお願いします。

佐々木


3762 : 小川慶一の回答 (2015-02-07 18:31:25)

ゲスト さん:

マクロ以前にエクセルの基礎知識を再確認。
同じ名前のシートを同じファイル内に2つ作ることはできません。すでにあるものと同じ名前のシートを作ろうとするとエラーがでます。
(さらに念のため。もしご存じないようでしたら、実際に手作業して確かめてみてください)

その前提で、確認していただきたいことがあります。
マクロのその行を実行するとき、すでに、Sheet2を何か別の名前にしようとしているはずです。その名前は、すでにあるシートのどれかと同じではないですか?(質問の内容だけから大胆に予測すると、おそらく「愛知販売」というシートをもうひとつ作ろうとして失敗しているかと思います)

上記の件検証したら、報告/さらなる相談いただければと。



>↓追記
エクセル終了、再起動も試しましたが、エラーが発生します。


3760 : 佐々木久さんのコメント (2015-02-07 18:15:08)

↓追記
エクセル終了、再起動も試しましたが、エラーが発生します。


3759 : 佐々木久さんのコメント (2015-02-07 18:13:38)

ファイル enshu2100などで伝票作成のボタンを押すと、
「実行時エラー '1004':
この名前は既に使用されています。別の名前を入力してください。」
とエラーが出てしまいます。
エクセルファイルは「愛知販売」シートが作成され、
「Sheet2」が作成された時に上記のエラーが表示されます。
コードのエラー箇所は
「Sub CreateSheets」の
「ActiveSheet.Name = w.Range("B" & c).Value」
が黄色く反転します。
エラー解消方法はありますでしょうか?
思いつく、余計なことは
「Option Explicit」
の下に
Dim wFm as Long
Dim wTo as Long
を入力してマクロを数回実行したぐらいです。

よろしくお願いします。

佐々木


3367 : 小川慶一の回答 (2014-12-01 07:36:02)

匿名 さん:

>「罫線を最終行より1行多く引かないとエラーとなる」とのことでしたが、当方の環境(Excel2010)では特にエラーは出ませんでした。

そうなんですか。なんと。
こちらでも確認して、メールセミナーの記載の文言を修正しておきます。


>小川先生
>伝票作成はメールセミナーを先に見ましたが、動画ではメールセミナーとは違うやり方も説明されていて、参考になる部分も多かったです。
>「罫線を最終行より1行多く引かないとエラーとなる」とのことでしたが、当方の環境(Excel2010)では特にエラーは出ませんでした。
>また、Withを使いこなせるようなるために、あえてオブジェクト型変数を使わずに作成してみました。


3358 : 受講生さんのコメント (2014-11-30 20:20:40)

小川先生
伝票作成はメールセミナーを先に見ましたが、動画ではメールセミナーとは違うやり方も説明されていて、参考になる部分も多かったです。
「罫線を最終行より1行多く引かないとエラーとなる」とのことでしたが、当方の環境(Excel2010)では特にエラーは出ませんでした。
また、Withを使いこなせるようなるために、あえてオブジェクト型変数を使わずに作成してみました。


2716 : 小川慶一の回答 (2014-10-13 20:51:40)

匿名 さん:

型そのものは、経理・財務に限らず、あらゆる業種に頻出なんですけどね。
ひきつづお楽しみください!

>伝票作成マクロ、財務という仕事柄、大変参考になりました。
>もう少し復習した後、発展編2に進んでいこうかと思います。


2709 : 受講生さんのコメント (2014-10-13 11:01:36)

伝票作成マクロ、財務という仕事柄、大変参考になりました。
もう少し復習した後、発展編2に進んでいこうかと思います。


984 : 小川慶一の回答 (2014-01-28 13:44:01)

望月 晋一 さん:

つづきです。

望月さんはさすがですね。「考えてから答えを見る」というのも、基礎編の最初の最初からずっと言っていることです。
そのほうが、結果的に早くVBAを習得できます(w

>●罫線を最終行より一行多く引く設定の意味~前に学んでいたかもしれませんが、今回の動画セミナーで、間の行を考えての事という説明を見て、「なるほど」と思いました。
>罫線を引く範囲を最終行に合わせる方法も解説されていて、こちらも、「あ、こういうやり方があるんだ」と、柔軟な書き方、使い方ができるものだと感心しました。

別解ももちろんあります。研究してみてください。
たとえば、転記元表の明細行数が1行だったら表の中に罫線を引く処理は if 文でスキップするとか (^^*

>●罫線作成部分の応用について~応用と言えるかわかりませんが、転記元表の明細行数を数えて、転記先表に記載するといった作業でも、条件付けの点などで共通すると気が付きました。

↑「番外編」のpdf資料は入手されましたか?そちらで紹介しています (^^

>●With構文~罫線機能の部分とか明細行処理とか、頭出しが同じ記述箇所がVBAでは数多く出てくるので、この構文を活用できるとプログラムが大分読みやすくなり、プログラム作成時の間違い探しや作成後の保守で、効率アップが図れると思いました。

可読性が高まるとメンテナンス性も増しますね。

>先生の動画セミナーでは、置換機能を合わせて使って、With構文を入れた記載にさっと変える場面が出てきましたが、こうした技術も是非身に付けたいと思いました。

次回同じ課題にチャレンジするとき、まったく同じ操作をしてみてください。
望月さんなら、それで十分かと。


983 : 小川慶一の回答 (2014-01-28 13:43:27)

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


980 : 望月 晋一さんのコメント (2014-01-27 18:00:39)

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


975 : 望月 晋一さんのコメント (2014-01-27 13:51:29)

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


957 : 小川慶一の回答 (2014-01-17 09:01:51)

匿名さん:

部品化すると、可読性、メンテナンス性、再利用性の面で向上が期待できます。
With も使いまくっていると慣れますよ!「ハナコ」でやってください (^^

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


952 : 受講生さんのコメント (2014-01-14 22:51:52)

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


936 : 小川慶一の回答 (2014-01-06 10:44:22)

山口 舞さん:

>面白くて一気に最後まで見ました!

おお、おもしろかったなら、それはよかったです!
ちなみに、僕のほうも、このシリーズは一気に作成しました。

> 罫線ワザは、動画になるとより鮮烈な印象として残りますね。

気持ちいいですよね (^^*

>また他の内容も、回を重ね繰り返し登場した場合には一度目とは違う手法を紹介されている等、日頃から「いかにしてより効率化できるか」を検討するヒントがたくさんあったと思います。

ベタなパターンをマスターすると、応用例も習得しやすくなりますね。

>もう一度、次はノーヒントで伝票作成にチャレンジしたいと思いました。ありがとうございました!

分からないこと、行き詰まったこととかがあったら、動画を確認したり、質問したりしてください。
舞さんなら、もう動画があれば質問する必要なさそうだけど。

ひきつづき、お楽しみを☆


921 : 山口 舞さんのコメント (2014-01-06 01:01:39)

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


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】 データ転記先のシートすべてに対し、罫線を引く等の後処理をする 未習得

塾長 小川慶一

メニュー

コメント紹介

もっと見る

ページの先頭へ