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

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

[11512]簡単なマクロを書いてみる – プログラムの読み方

2019-07-18 16:17:18 受講生さんからの投稿です。

お世話になっております。

動画とおりやってマクロを書いてみましたが、

Worksheets(“sheet3”).Range(“b8”).Value = 22353
と入力したら、

実行時エラー“9”
インデックスが有効範囲にありません。

と言われ、操作が継続できません。

シート数は6まであります。

お忙しいところ恐れ入りますが、ご教示いただけますと幸いです。

よろしくお願いします。

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

[11511]サポートの目的と方法について

2019-07-18 14:46:33 ゲストさんからの投稿です。

こんにちは
私もワークの報告をさせて頂きたく、メールを頂けますでしょうか。
宜しくお願いします。

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

[11509]エクセルでのワークその2

2019-07-17 19:44:42 ゲストさんからの投稿です。

先生こんにちは
ctrlキーについて質問があります。
ctrlキーを右・左どちらで使うかを試行錯誤しながらワークをやっています。
実は元々「C」のキーを中指で押す習慣がなかったこともあり(人差し指でした)、ctrl+CのCがctrlキーと同時に押すと、かなり指が張った感じになります。
また保存のctrl+Sで、同時にSを薬指で押すのも、体を右側にひねるか手首を九の字に曲げないと難しいです。
HPのノートパソコンを使っているので、右側のctrlで対処しようとしていますが、他のパソコンだと、右側にctrlキーが無いものも結構あるようなので、ctrlキーは左指で頑張って練習した方がいいのかを伺いたいです。またctrl+Sのような場合でも必ず決まった指で使った方がいいのかも教えて頂ければ幸いです。

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

[11507]発展1講座第5章 – モジュールレベル変数 アクセシビリティ設定

2019-07-16 12:18:31 ほとさんからの投稿です。

6章のテキストを拝読しました。

こちらで出てくる
6.3様々なオブジェクト・プロパティ・メソッド
6.5知っておきたい便利関数
等は、プログラミングする際に無条件に使える位のレベルまで覚えておくべきものでしょうか。内容は理解できるのですが、自分がプログラミングする際引き出しとして利用できるかといった観点からはまだ到達できていないというのが正直なところです。
少し曖昧な質問になってしましましたが、到達度という観点での目標点を
お教えいただければと思います。

よろしくお願いします。

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

[11495]出現回数を数える。CountIf関数がやっていることをマクロで書くと?

2019-07-07 14:26:00 ほとさんからの投稿です。

小川先生

こんにちわ
先生の講義はわかりやくすてすらすら頭に入ってきます。
この調子で進めていきたいと思います。

[2]の回答を復習したとき、最後のfor next構文でお団子のとる範囲を間違えて最後の行を取りこぼしてしまいました。
間違いだということはすぐ理解できたのですが、
その時のマクロの実行結果が私の推測と違っていたので、質問させていただきました。私の推測では、F6に6が表示されると思ったのですが、実際はF7に表示されました。理由をお教えいただけますでしょうか。

復習で書いたマクロは以下のものとなります。
Sub countif_3()
Dim goukei

Dim gyo2
For gyo2 = 4 To 6
goukei = 0
Dim gyo
For gyo = 4 To 18
If Range(“c” & gyo).Value = Range(“e” & gyo2).Value Then
goukei = goukei + 1
End If
Next


Next
Range(“f” & gyo2) = goukei

End Sub

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

[11491]発展編1 フォローメールセミナー 第11回

2019-07-01 14:38:26 小川慶一さんからの投稿です。

受講生の方から、添削依頼を受けました。
以下のものです。

Option Explicit
Dim wFm As Worksheet
Dim Ireru As String
Dim Mx As Long

Public Sub WsDelete()
    Dim wd As Worksheet
    Application.DisplayAlerts = False
    For Each wd In Worksheets
        If Left(wd.Name, 4) <> "main" Then
            wd.Delete
        End If
    Next
    Application.DisplayAlerts = True
End Sub

Private Sub Bangou()
    wFm.Range("A2").FormulaR1C1 = "1"
    wFm.Range("A2:A317").DataSeries Rowcol:=xlColumns, _
    Type:=xlLinear, Date:=xlDay, _
    Step:=1, Trend:=False
End Sub

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

End Sub
Private Sub Keisen()
    Mx = Range("K65536").End(xlUp).Row
    With Range("B16:K" & Mx)
        .Borders(xlDiagonalUp).LineStyle = xlNone
        .Borders(xlDiagonalDown).LineStyle = xlNone
        .Borders(xlEdgeLeft).LineStyle = xlContinuous
        .Borders(xlEdgeLeft).Weight = xlThin
        .Borders(xlEdgeTop).LineStyle = xlContinuous
        .Borders(xlEdgeTop).Weight = xlThin
        .Borders(xlEdgeBottom).LineStyle = xlContinuous
        .Borders(xlEdgeBottom).Weight = xlThin
        .Borders(xlEdgeRight).LineStyle = xlContinuous
        .Borders(xlEdgeRight).Weight = xlThin
        .Borders(xlInsideVertical).LineStyle = xlContinuous
        .Borders(xlInsideVertical).Weight = xlHairline
        .Borders(xlInsideHorizontal).LineStyle = xlContinuous
        .Borders(xlInsideHorizontal).Weight = xlHairline
    End With
End Sub
Private Sub P_hani()
    ActiveWindow.View = xlPageBreakPreview
    ActiveSheet.VPageBreaks(1).DragOff Direction:=xlToRight, RegionIndex:=1
    ActiveWindow.View = xlNormalView
End Sub

Private Sub Daimei()
    Application.PrintCommunication = False
    With ActiveSheet.PageSetup
        .PrintTitleRows = ""
        .PrintTitleColumns = ""
    End With
    Application.PrintCommunication = True
    ActiveSheet.PageSetup.PrintArea = ""
    Application.PrintCommunication = False
    With ActiveSheet.PageSetup

        .CenterHeader = "&F"


        .CenterFooter = "&P / &N ページ"

        .LeftMargin = Application.InchesToPoints(0.748031496062992)
        .RightMargin = Application.InchesToPoints(0.748031496062992)
        .TopMargin = Application.InchesToPoints(0.984251968503937)
        .BottomMargin = Application.InchesToPoints(0.984251968503937)
        .HeaderMargin = Application.InchesToPoints(0.511811023622047)
        .FooterMargin = Application.InchesToPoints(0.511811023622047)
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        .CenterHorizontally = False
        .CenterVertically = False
        .Orientation = xlPortrait
        .Draft = False
        .PaperSize = xlPaperA4
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = 100
        .PrintErrors = xlPrintErrorsDisplayed
        .OddAndEvenPagesHeaderFooter = False
        .DifferentFirstPageHeaderFooter = False
        .ScaleWithDocHeaderFooter = True
        .AlignMarginsHeaderFooter = False
            End With
    Application.PrintCommunication = True
    
End Sub
Private Sub Tyousei()
    Keisen
    Daimei
    P_hani
    
End Sub

Public Sub Denpyo()
    Application.ScreenUpdating = False
    Dim wTo As Worksheet
    Dim lnMoto As Long
    Dim lnSaki As Long
    Dim dHiduke As Date
    
    Set wFm = Worksheets("main")
    WsDelete
    wFm.Activate
    Bangou
    Ireru = "B2:" & "B" & wFm.Range("B65536").End(xlUp).Row
    Narabe
       
    For lnMoto = 2 To wFm.Range("B65536").End(xlUp).Row
        If wFm.Range("B" & lnMoto).Value <> wFm.Range("B" & lnMoto - 1).Value Then
            
            If lnMoto > 2 Then
                Tyousei
            End If
            
            lnSaki = 16
            Sheets("main1").Copy After:=Sheets(2)
            Set wTo = Worksheets(3)
            wTo.Name = wFm.Range("B" & lnMoto).Value
        End If
        dHiduke = wFm.Range("C" & lnMoto).Value
        wTo.Range("B" & lnSaki).Value = Left(Year(dHiduke), 2)
        wTo.Range("C" & lnSaki).Value = Month(dHiduke)
        wTo.Range("D" & lnSaki).Value = Day(dHiduke)
        wTo.Range("E" & lnSaki).Value = wFm.Range("D" & lnMoto).Value
        wTo.Range("F" & lnSaki).Value = wFm.Range("E" & lnMoto).Value
        wTo.Range("H" & lnSaki).Value = wFm.Range("F" & lnMoto).Value
        If wFm.Range("G" & lnMoto).Value > 0 Then
            wTo.Range("I" & lnSaki).Value = wFm.Range("G" & lnMoto).Value
        Else
            wTo.Range("J" & lnSaki).Value = wFm.Range("G" & lnMoto).Value
        End If
        If lnMoto > 2 Then
            wTo.Range("K" & lnSaki).Value = wFm.Range("G" & lnMoto).Value + wTo.Range("K" & lnSaki - 1).Value
        Else
            wTo.Range("K" & lnSaki).Value = wFm.Range("G" & lnMoto).Value
        End If
        lnSaki = lnSaki + 1
    Next
    
    Tyousei
    
    Ireru = "A2:" & "A" & wFm.Range("A65536").End(xlUp).Row
    Narabe
    
    wFm.Range("A2:" & "A" & wFm.Range("A65536").End(xlUp).Row).ClearContents
    wFm.Activate
    Application.ScreenUpdating = True
End Sub

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

[11483]発展1講座第3章 – マクロの自動記録 並べ替え

2019-06-27 16:31:43 ゲストさんからの投稿です。

2003年と2007年のバージョンで並び替えの自動記録を行うとマクロの構文も違ってくることが勉強できました。
私は2007年で自動記録をしたのですが、2007では、並べ替えの設定と並べ替えの実行で処理が別れていることを学びました。
2003よりもより丁寧な記述が行えると思いました。

やはり、小川先生の仰るように長い1文に直してからちぎるやり方でやったので理解が早かったです。

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

[11477]エクセルマクロの全体像

2019-06-26 02:45:45 ゲストさんからの投稿です。

まだ何が出来るかわからないですが、業務効率化と自身のスキルアップを目指して頑張ります。IT用語が全く分からないので不安ですが。。。

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

[11474]発展編1 フォローメールセミナー 第11回

2019-06-24 13:55:59 小川慶一さんからの投稿です。

とある受講生の方から、添削依頼をいただきました。
以下に添削を示します。

まずは、いただいたコード。

Option Explicit
Dim wFm As Worksheet
Dim Ireru As String
Dim Mx As Long

Sub WsDelete()
    Dim wd As Worksheet
    Application.DisplayAlerts = False
    For Each wd In Worksheets
        If Left(wd.Name, 4) <> "main" Then
            wd.Delete
        End If
    Next
    Application.DisplayAlerts = True
End Sub

Sub Bangou()
    wFm.Range("A2").FormulaR1C1 = "1"
    wFm.Range("A2:A317").DataSeries Rowcol:=xlColumns, _
    Type:=xlLinear, Date:=xlDay, _
    Step:=1, Trend:=False
End Sub

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

End Sub
Sub Keisen()
    Mx = Range("K65536").End(xlUp).Row
    Range("B16:K" & Mx).Borders(xlDiagonalDown).LineStyle = xlNone
    Range("B16:K" & Mx).Borders(xlDiagonalUp).LineStyle = xlNone
    With Range("B16:K" & Mx)
        .Borders(xlEdgeLeft).LineStyle = xlContinuous
        .Borders(xlEdgeLeft).Weight = xlThin
        .Borders(xlEdgeTop).LineStyle = xlContinuous
        .Borders(xlEdgeTop).Weight = xlThin
        .Borders(xlEdgeBottom).LineStyle = xlContinuous
        .Borders(xlEdgeBottom).Weight = xlThin
        .Borders(xlEdgeRight).LineStyle = xlContinuous
        .Borders(xlEdgeRight).Weight = xlThin
        .Borders(xlInsideVertical).LineStyle = xlContinuous
        .Borders(xlInsideVertical).Weight = xlHairline
        .Borders(xlInsideHorizontal).LineStyle = xlContinuous
        .Borders(xlInsideHorizontal).Weight = xlHairline
    End With
End Sub
Sub Phani()
    ActiveWindow.View = xlPageBreakPreview
    ActiveSheet.VPageBreaks(1).DragOff Direction:=xlToRight, RegionIndex:=1
    ActiveWindow.View = xlNormalView
End Sub

Sub Daimei()
    Application.PrintCommunication = False
    With ActiveSheet.PageSetup
        .PrintTitleRows = ""
        .PrintTitleColumns = ""
    End With
    Application.PrintCommunication = True
    ActiveSheet.PageSetup.PrintArea = ""
    Application.PrintCommunication = False
    With ActiveSheet.PageSetup
        .LeftHeader = ""
        .CenterHeader = "&F"
        .RightHeader = ""
        .LeftFooter = ""
        .CenterFooter = "&P / &N ページ"
        .RightFooter = ""
        .LeftMargin = Application.InchesToPoints(0.748031496062992)
        .RightMargin = Application.InchesToPoints(0.748031496062992)
        .TopMargin = Application.InchesToPoints(0.984251968503937)
        .BottomMargin = Application.InchesToPoints(0.984251968503937)
        .HeaderMargin = Application.InchesToPoints(0.511811023622047)
        .FooterMargin = Application.InchesToPoints(0.511811023622047)
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        .CenterHorizontally = False
        .CenterVertically = False
        .Orientation = xlPortrait
        .Draft = False
        .PaperSize = xlPaperA4
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = 100
        .PrintErrors = xlPrintErrorsDisplayed
        .OddAndEvenPagesHeaderFooter = False
        .DifferentFirstPageHeaderFooter = False
        .ScaleWithDocHeaderFooter = True
        .AlignMarginsHeaderFooter = False
        .EvenPage.LeftHeader.Text = ""
        .EvenPage.CenterHeader.Text = ""
        .EvenPage.RightHeader.Text = ""
        .EvenPage.LeftFooter.Text = ""
        .EvenPage.CenterFooter.Text = ""
        .EvenPage.RightFooter.Text = ""
        .FirstPage.LeftHeader.Text = ""
        .FirstPage.CenterHeader.Text = ""
        .FirstPage.RightHeader.Text = ""
        .FirstPage.LeftFooter.Text = ""
        .FirstPage.CenterFooter.Text = ""
        .FirstPage.RightFooter.Text = ""
    End With
    Application.PrintCommunication = True
    
End Sub

Sub Denpyo()
    Dim wTo As Worksheet
    Dim Moto As Long
    Dim Saki As Long
    Dim Hiduke As Long
    
    Set wFm = Worksheets("main")
    WsDelete
    wFm.Activate
    Bangou
    Ireru = "B2:B317"
    Narabe
       
    For Moto = 2 To wFm.Range("B65536").End(xlUp).Row
        If wFm.Range("B" & Moto).Value <> wFm.Range("B" & Moto - 1).Value Then
            
            If Moto > 2 Then
                Keisen
                Daimei
                Phani
            End If
            
            Saki = 16
            Sheets("main1").Copy After:=Sheets(2)
            Set wTo = Worksheets(3)
            wTo.Name = wFm.Range("B" & Moto).Value
        End If
        Hiduke = wFm.Range("C" & Moto).Value
        wTo.Range("B" & Saki).Value = Left(Year(Hiduke), 2)
        wTo.Range("C" & Saki).Value = Month(Hiduke)
        wTo.Range("D" & Saki).Value = Day(Hiduke)
        wTo.Range("E" & Saki).Value = wFm.Range("D" & Moto).Value
        wTo.Range("F" & Saki).Value = wFm.Range("E" & Moto).Value
        wTo.Range("H" & Saki).Value = wFm.Range("F" & Moto).Value
        If wFm.Range("G" & Moto).Value > 0 Then
            wTo.Range("I" & Saki).Value = wFm.Range("G" & Moto).Value
        Else
            wTo.Range("J" & Saki).Value = wFm.Range("G" & Moto).Value
        End If
        If Moto > 2 Then
            wTo.Range("K" & Saki).Value = wFm.Range("G" & Moto).Value + wTo.Range("K" & Saki - 1).Value
        Else
            wTo.Range("K" & Saki).Value = wFm.Range("G" & Moto).Value
        End If
        Saki = Saki + 1
    Next
    
    Keisen
    Daimei
    Phani
    
    Ireru = "A2:A317"
    Narabe
    
    wFm.Activate
    wFm.Range("A2:A317").ClearContents
End Sub


そして、以下は、添削内容。

'データ数の増減に耐えられるプログラムにしましょう
'実際にデータ数を増減させて動作確認されると良いかと思います
'「317」という検索キーワードでコード内を検索もしてください
'あと、以下では書いていませんが、SubプロシージャにPublic, Privateキーワードも入れたいですね。
Option Explicit
Dim wFm As Worksheet
Dim Ireru As String
Dim Mx As Long

'↓Excellent v(^^*
Sub WsDelete()
    Dim wd As Worksheet
    Application.DisplayAlerts = False
    For Each wd In Worksheets
        If Left(wd.Name, 4) <> "main" Then
            wd.Delete
        End If
    Next
    Application.DisplayAlerts = True
End Sub

'↓Excellent v(^^*
Sub Bangou()
    wFm.Range("A2").FormulaR1C1 = "1"
    wFm.Range("A2:A317").DataSeries Rowcol:=xlColumns, _
    Type:=xlLinear, Date:=xlDay, _
    Step:=1, Trend:=False
End Sub

Sub Narabe()
    wFm.Sort.SortFields.Clear
    wFm.Sort.SortFields.Add Key:=Range(Ireru), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With wFm.Sort
        .SetRange Range("A1:G317") 'データ数可変でもOKになるようになおしましょう
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

End Sub
Sub Keisen()
    Mx = Range("K65536").End(xlUp).Row
    '[3] 以下、 With Range("B16:K" & Mx) ... End With で [4] までをくくれるのでは?と。
    '以下の要領。
    'With Range("B16:K" & Mx)
    '    .Borders(xlDiagonalDown).LineStyle = xlNone
    '    .Borders(xlDiagonalUp).LineStyle = xlNone
    '    .Borders(xlEdgeLeft).LineStyle = xlContinuous
    '    .Borders(xlEdgeLeft).Weight = xlThin
    '    .Borders(xlEdgeTop).LineStyle = xlContinuous
    '    .Borders(xlEdgeTop).Weight = xlThin
    '    .Borders(xlEdgeBottom).LineStyle = xlContinuous
    '    .Borders(xlEdgeBottom).Weight = xlThin
    '    .Borders(xlEdgeRight).LineStyle = xlContinuous
    '    .Borders(xlEdgeRight).Weight = xlThin
    '    .Borders(xlInsideVertical).LineStyle = xlContinuous
    '    .Borders(xlInsideVertical).Weight = xlHairline
    '    .Borders(xlInsideHorizontal).LineStyle = xlContinuous
    '    .Borders(xlInsideHorizontal).Weight = xlHairline
    'End With
    
    Range("B16:K" & Mx).Borders(xlDiagonalDown).LineStyle = xlNone
    Range("B16:K" & Mx).Borders(xlDiagonalUp).LineStyle = xlNone
    With Range("B16:K" & Mx)
        .Borders(xlEdgeLeft).LineStyle = xlContinuous
        .Borders(xlEdgeLeft).Weight = xlThin
        .Borders(xlEdgeTop).LineStyle = xlContinuous
        .Borders(xlEdgeTop).Weight = xlThin
        .Borders(xlEdgeBottom).LineStyle = xlContinuous
        .Borders(xlEdgeBottom).Weight = xlThin
        .Borders(xlEdgeRight).LineStyle = xlContinuous
        .Borders(xlEdgeRight).Weight = xlThin
        .Borders(xlInsideVertical).LineStyle = xlContinuous
        .Borders(xlInsideVertical).Weight = xlHairline
        .Borders(xlInsideHorizontal).LineStyle = xlContinuous
        .Borders(xlInsideHorizontal).Weight = xlHairline
    End With
End Sub
Sub Phani()
    'Sub Print_Area() のように、間にアンダーバーを入れた名前にするのもありです。VBのキーワードには、アンダーバーが入ったものはないので。
    'アンダーバーを間に入れるなら、簡単な英単語の組み合わせでも安全(VBのキーワードとかぶる心配はない)です
    ActiveWindow.View = xlPageBreakPreview
    ActiveSheet.VPageBreaks(1).DragOff Direction:=xlToRight, RegionIndex:=1
    ActiveWindow.View = xlNormalView
End Sub

Sub Daimei()
    '不要と思しきものがかなりありますね。ご自身で設定したものを見出し、それ以外は積極的に削除を!
    Application.PrintCommunication = False
    With ActiveSheet.PageSetup
        .PrintTitleRows = ""
        .PrintTitleColumns = ""
    End With
    Application.PrintCommunication = True
    ActiveSheet.PageSetup.PrintArea = ""
    Application.PrintCommunication = False
    With ActiveSheet.PageSetup
        .LeftHeader = ""
        .CenterHeader = "&F"
        .RightHeader = ""
        .LeftFooter = ""
        .CenterFooter = "&P / &N ページ"
        .RightFooter = ""
        .LeftMargin = Application.InchesToPoints(0.748031496062992)
        .RightMargin = Application.InchesToPoints(0.748031496062992)
        .TopMargin = Application.InchesToPoints(0.984251968503937)
        .BottomMargin = Application.InchesToPoints(0.984251968503937)
        .HeaderMargin = Application.InchesToPoints(0.511811023622047)
        .FooterMargin = Application.InchesToPoints(0.511811023622047)
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        .CenterHorizontally = False
        .CenterVertically = False
        .Orientation = xlPortrait
        .Draft = False
        .PaperSize = xlPaperA4
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = 100
        .PrintErrors = xlPrintErrorsDisplayed
        .OddAndEvenPagesHeaderFooter = False
        .DifferentFirstPageHeaderFooter = False
        .ScaleWithDocHeaderFooter = True
        .AlignMarginsHeaderFooter = False
        .EvenPage.LeftHeader.Text = ""
        .EvenPage.CenterHeader.Text = ""
        .EvenPage.RightHeader.Text = ""
        .EvenPage.LeftFooter.Text = ""
        .EvenPage.CenterFooter.Text = ""
        .EvenPage.RightFooter.Text = ""
        .FirstPage.LeftHeader.Text = ""
        .FirstPage.CenterHeader.Text = ""
        .FirstPage.RightHeader.Text = ""
        .FirstPage.LeftFooter.Text = ""
        .FirstPage.CenterFooter.Text = ""
        .FirstPage.RightFooter.Text = ""
    End With
    Application.PrintCommunication = True
    
End Sub

Sub Denpyo()
    'Application.ScreenUpdating = False '高速化と画面チラツキ防止のため、画面更新を停止
    '↓Moto, Saki, Hidukeは、ハンガリアン記法にしてもいいかも。たとえば、 sMoto, sSaki, dHidukeという変数名で。
    Dim wTo As Worksheet
    Dim Moto As Long
    Dim Saki As Long
    Dim Hiduke As Long
    
    Set wFm = Worksheets("main")
    WsDelete
    wFm.Activate
    Bangou
    Ireru = "B2:B317" '←データ数可変でも動くようになおしたいですね。
    Narabe
       
    For Moto = 2 To wFm.Range("B65536").End(xlUp).Row 'エクセル2007以降のファイル形式で、かつ、データ数が65566件以上ある場合には注意!
        If wFm.Range("B" & Moto).Value <> wFm.Range("B" & Moto - 1).Value Then
            
            If Moto > 2 Then
                '[1]↓Keisen, Daimei, Phani を実行するプロシージャを何か用意してもよいですね。そうすると、[2]での記述も一行で済みます
                Keisen
                Daimei
                Phani
            End If
            
            Saki = 16
            Sheets("main1").Copy After:=Sheets(2)
            Set wTo = Worksheets(3)
            wTo.Name = wFm.Range("B" & Moto).Value
        End If
        Hiduke = wFm.Range("C" & Moto).Value
        '以下3つは、Format関数を使うこともできます。たとえば直下の行の右辺は、 Format(Fiduke,"yy")
        wTo.Range("B" & Saki).Value = Left(Year(Hiduke), 2)
        wTo.Range("C" & Saki).Value = Month(Hiduke)
        wTo.Range("D" & Saki).Value = Day(Hiduke)
        wTo.Range("E" & Saki).Value = wFm.Range("D" & Moto).Value
        wTo.Range("F" & Saki).Value = wFm.Range("E" & Moto).Value
        wTo.Range("H" & Saki).Value = wFm.Range("F" & Moto).Value
        If wFm.Range("G" & Moto).Value > 0 Then
            wTo.Range("I" & Saki).Value = wFm.Range("G" & Moto).Value
        Else
            wTo.Range("J" & Saki).Value = wFm.Range("G" & Moto).Value
        End If
        If Moto > 2 Then
            wTo.Range("K" & Saki).Value = wFm.Range("G" & Moto).Value + wTo.Range("K" & Saki - 1).Value
        Else
            wTo.Range("K" & Saki).Value = wFm.Range("G" & Moto).Value
        End If
        Saki = Saki + 1
    Next
    
    '[2]
    Keisen
    Daimei
    Phani
    
    Ireru = "A2:A317"
    Narabe
    
    wFm.Activate
    wFm.Range("A2:A317").ClearContents 'データ数可変でもOKになるようになおしましょう
    Application.ScreenUpdating = True '画面更新を再開
End Sub

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

[11471]基礎講座第4章5 – 「ハナコのステップ」のふりかえり

2019-06-24 09:26:02 ゲストさんからの投稿です。

小川様
この度はお世話になっております。

まさか自分がマクロを書ける日が来るとは思ってもおらず、大変楽しく学ばさせていただいております。

1つ質問なのですが、縦の行ついてはfor next構文で繰り返すことができますが、横の列についても同じように繰り返すことができるのでしょうか?

横の列はセルの指定をアルファベットでするのが通常と思うので、普通に考えるとできないように思うのですがいかがでしょうか?

また、もしもそれが可能なのであれば、縦の行を一通り繰り返した後に、1つ右の列にずらして同じように縦の行を繰り返すようなこともできるのでしょうか?

ご回答お待ちしておりますので、よろしくお願いいたします。

小谷

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

[11469]特別動画: EmEditor設定ガイド

2019-06-21 10:07:21 ざきさんさんからの投稿です。

EmEditorを「C:¥EmEditor」という場所に移動させたら、アイコンが消えてしまいました。
機能的には正常に使えているのですが、アイコンを復活する方法がわかりません。
教えていただきたいです。

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

[11457]発展1講座第4章 – Do Loop構文 概要

2019-06-19 10:23:40 受講生さんからの投稿です。

小川先生

いつもお世話になっております。

実務で下記のようなプログラムを書きましたが、うまくいかないです。何が原因かわかりますでしょうか?おそらく、If Abs(a) < 0.1 Thenのところが、おかしいのではないかと個人的には思うのですが、絶対値のとり方が間違っているのでしょうか?

Sub syousai3()

Dim a

a = 1 – (Worksheets(“詳細算定③”).Range(“P43”).Value – Worksheets(“詳細算定③”).Range(“M36”).Value)


Do

Worksheets(“詳細算定③”).Range(“P36”).Value = Worksheets(“詳細算定③”).Range(“PM43”).Value

If Abs(a) < 0.1 Then

Exit Do ‘ これが無いと無限ループになる
End If

Loop

End Sub

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

[11455]複数条件を組み合わせた条件分岐

2019-06-18 22:45:03 矢口幸平さんからの投稿です。

こんにちは。いつもお世話になっております。
ベーシックを終了してアドバンスドに移行予定でしたが
業務が繁忙であるため、6月末まではベーシックの復習中です。

本題にうつり、質問致します。

【質問】問題2について
下記コードを記入しても、合否結果が出力されません。
gouhi の変数に変換した途端出力されなくなりました。
そのため、この変数設定の仕方が良くないと推測されますが
何が悪いのかわからず、堂々巡りとなっております。

ご回答頂けると嬉しいです。
宜しくお願い致します。

ーーーーーーーーーーーーーー以下コードーーーーーーーーーーーー

Sub danzyo()
    Dim sei
    Dim tensu
    Dim gouhi
    
    Dim gyo
    For gyo = 2 To 11
        sei = Range("c" & gyo).Value
        tensu = Range("d" & gyo).Value
        gouhi = Range("h" & gyo).Value
        
        If sei = "女性" Then
            If tensu >= 70 Then
                gouhi = "合格"
            Else
                gouhi = "不合格"
            End If
        Else
            If tensu >= 80 Then
                gouhi = "合格"
            Else
                gouhi = "不合格"
            End If
        End If
    Next
End Sub

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

[11450]発展編1 フォローメールセミナー 第9回

2019-06-14 06:10:30 受講生さんからの投稿です。

小川様

お世話になっております。
昨日メールで添削を依頼しましたものを、こちらにも投稿致します。
よろしくお願い致します。

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

[11441]静的配列

2019-06-06 05:43:30 受講生さんからの投稿です。

 Sub GetZangyoList_Array_GetList()
    Worksheets("残業3").Activate
    
    Dim stAry(5) As String
    Dim cnt As Long
    For cnt = 0 To 5
        stAry(cnt) = Range("I2").Offset(cnt).Value
    Next
    
    Dim st As String
    For cnt = 0 To 5
        st = stAry(cnt)
        Range("B1").Offset(, cnt).Value = st
        Range("B2:B14").Offset(, cnt).Value = Worksheets(st).Range("C3:C15").Value
    Next
End Sub


について
st = stAry(cnt)と一度変数stに置き換えてから書きだしていますが、
For cnt = 0 To 5
Range(“B1”).Offset(, cnt).Value = stAry(cnt)
Range(“B2:B14”).Offset(, cnt).Value = Worksheets(stAry(cnt)).Range(“C3:C15”).Value
Next
にしてもうまく実行されます。
変数に置き換えるメリットがあれば教えてほしいです。

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

[11439]静的配列

2019-06-05 14:20:46 受講生さんからの投稿です。

小川先生

勘定科目のデータを配列motoに格納して、一列目にある勘定科目をキーにし、情報(科目名や他システムでの科目名)を、任意のセル(他シートを含み、科目名表記が始まるところをActivecellにしてマクロを実行すると、リスト(moto)の何列目の情報を勘定科目から見て何列目に表示したいかをInputboxで変数として格納し、出力をする

というコーディングをしているのですが、motoに格納したデータのあるシート内は成功するのですが他シートだとうまくいきません。

どのコードが原因なのかお教えいただけますでしょうか
よろしくお願いいたします。

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

[11432]特別動画: EmEditor設定ガイド

2019-05-24 08:59:34 ざきさんさんからの投稿です。

EmEditorについて質問です。
文字を検索したときに、該当の文字列の背景に色がつくのですが、検索を終了して作業にもどってもずっと色がついたままです。
解除する方法を教えてほしいです。

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

[11428]基礎講座第4章5 – 「ハナコのステップ」のふりかえり

2019-05-21 22:29:12 ゲストさんからの投稿です。

と前段11426のように思ったのですが、やはりEnter,Ctr+Yのセットでないとダメというのは、想定した流れ以外の時やちょっとミスした時などに軽快に動くことができませんでした。
今からPCは替えませんけど、コード書くのにショートカットに制約が出てしまうため、ノートPCならある程度のサイズのものが必要なんですね。

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

[11426]基礎講座第4章5 – 「ハナコのステップ」のふりかえり

2019-05-21 20:09:07 ゲストさんからの投稿です。

1 感想
 ここまでキータッチを言語化してルールにして提示できてしまうのはすごいです。

2 フィードバック
 講義の写経用のPCが持ち運び重視のためsurfaceGOなのですが、
ファンクションボタン(F8など)とHomeボタンなどが同じボタンで、
切り替えボタンを押すともう一度切り替えボタンを押すまでずっと入れ替わったままという状態で、ショートカットキーの相性が悪くて困っていました(こんなにF8とHomeを使うと思ってませんでした。)。
 しかし、しばらくして代案を見つけました。
next,Enter,Ctr+Yから通常の流れに合流する作戦です。Homeボタンとファンクションキーの相性が悪いPCのときは選択肢のひとつになるかもしれません。

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

[11420]基礎講座第3章4 – Len関数、Instr関数

2019-05-21 11:47:05 ゲストさんからの投稿です。

こんにちは。
instr関数は、インストリング(InString)、インストア(Instore)、インエスティーアール(inSTR)といろいろ読み方あるみたいですね。
結局使うときはinstrなので、実現される機能は一緒ですが(^^*

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

[11418]基礎講座第4章7 – 「If文」の実習

2019-05-20 21:32:35 ゲストさんからの投稿です。

コーディングの途中で行うテスト回数が圧倒的に多い。見習いたい。

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

[11417]基礎講座第4章6 – If文

2019-05-20 20:51:55 ゲストさんからの投稿です。

自動データヒントで、条件式部分のtrue/falseを表示できるのを知りませんでした。

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

[11416]基礎講座第3章10 – プログラミング実習のまとめ

2019-05-20 16:09:05 ゲストさんからの投稿です。

先生こんにちは。
教科書的な定義から、コーディングのコツやノウハウを見せてくれる段階に入ってきて熱いです!!
ちょっとは本で勉強したりコード書いたりしてたものの、こういうのを期待して受講したんです!!楽しい!

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

[11405]基礎講座第1章12 – ドリル

2019-05-19 00:52:47 ゲストさんからの投稿です。

ctr+jの後、単語を選択して、TABだけではなく、
いきなり「=」などの算術演算子を押しても確定できました。しかし、tabを省略していきなり「.」を押してみたら、確定できるけどwindowsの警告音(ピローン)みたいなやつが鳴ってしまいました。静かなところで試していたので焦りました(^^*。
スピード自体は速くなるけど「.」はやめた方がよさそうです。

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

[11404]基礎講座第1章10 – 自動データヒント機能

2019-05-18 23:42:25 ゲストさんからの投稿です。

先生こんにちは。
range()だけだと自動データヒントが働きませんでした。
range().valueだとデータヒントが働くんですね。
valueを使うメリットを1つ学びました。

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

[11403]基礎講座第1章9 – 変数を活用するときの注意点

2019-05-18 23:38:28 ゲストさんからの投稿です。

先生こんにちは。
my消費税計算
my税率
などとしておけばば、ctr+space,ctr+j
で自動変換が利くと思います。日本語を含むだと後任者(数日後の自分含む)が速く理解できる反面、Dim時に半角全角切替が必要なので面倒ということですね。

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

[11402]今後のサポートについて2、まとめ

2019-05-16 21:16:39 受講生さんからの投稿です。

早速、実務でファイルやフォルダの名前の先頭を半角英数字へ変更してます。
ところで質問なのですが、タイピングやショートカットの練習で通常使用しているキーボードとは別のキーボードで練習したら効率悪いでしょうか?

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

[11401]発展1講座第1章 – 総称オブジェクト型

2019-05-14 16:51:25 jinoseさんからの投稿です。

ならくのエピソードに笑いました。

新しい概念を身近な例に置換えて説明して下さるのでわかりやすいです!ありがとうございます。

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

[11400]発展1講座イントロダクション – デバッグ イミディエイトウィンド

2019-05-14 15:51:51 jinoseさんからの投稿です。

for next構文で、次何行目なのかを gyo にカーソルを合わせて確認していたので、こんな見やすい方法があるのか!と感動しました。

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

[11398]補講9-たった1行のコードでセルのデータを配列に投入する

2019-05-11 17:08:57 田中 宏明さんからの投稿です。

配列を研究し、「二次元配列の縦横入替」を知りました。
Excel自体のTranspose関数を呼び出すことで実現。Debug.Printで結果が同じになるので、うまくいっているようです。

実務で活用できそうな事例が思い当たりませんが、第一引数の行番号をRedim Preserveできない場合、縦横入替で 第二引数の行番号をRedim Preserveできることくらいでしょうか。

Sub Sample9_Transpose()
    Dim vList As Variant
    vList = Range("B4").CurrentRegion
    
    Dim c As Long
    'インデックスは1から!
    '第一引数が行番号!
    '表ではタイトルも含まれてしまうのでので注意!
    For c = LBound(vList, 1) To UBound(vList, 1)
        Debug.Print vList(c, 1), vList(c, 2), vList(c, 7)
    Next
    
    Debug.Print vbNewLine
    Dim v2List As Variant
    '二次元配列の縦横を入れ替え
    'インデックスは1から!
    '第一引数が行番号から列番号に変更される!
    v2List = Application.WorksheetFunction.Transpose(vList)
    For c = LBound(v2List, 2) To UBound(v2List, 2)
        Debug.Print v2List(1, c), v2List(2, c), v2List(7, c)
    Next
End Sub

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


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

 

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

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

トップへ