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

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

12>

[12875]「クラス」と「インスタンス」について

2021-01-26 22:57:54 受講生さんからの投稿です。

58歳、新米プログラマーです。
クラスとインスタンスの関係はわかるのですがオブジェクトの概念がどうもよくわかりません。例えばセルというオブジェクトがあり、そのひな形として様々なプロパティを持ったり、動作(メソッド)ができたりするようになっている。初期値も決められている。A1に具体的な実態を伴ったセルを作ったときにそれがインスタンスで固有の列幅や網掛け色などを持っています。ここまではあっているような気がしています。
一方、動画の3分を超えたあたりのコメントに関する先生の説明で使われる「オブジェクト」の意味がどうもしっくりきません。
「…コメントのクラスというのがあって、コメントの発注をした。そうするとEXCELがコメントの◆オブジェクトを作って◆最低限の設定だけしてそのまま納品した…」の◆で挟んだ部分です。ここでいう「オブジェクトを作る」というのは「インスタンスを作る」ことと何が違うのか?について教えてください。よろしくお願いします。

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

[12837]テキストファイルの操作について

2021-01-17 08:20:56 たかちゃんさんからの投稿です。

複数のCSVファイルを自動で読み込ませるマクロを書いてみました。
・csv内には日付データがない為、ファイル名から日付を取得
・csv内の12項目&日付を配列に入れ、一気にシートに書き出し

csvファイルはこのような感じです。
“ABC1230″,”掃除機”,”,000″…
EmEditorで確認した所、utf-8(BOM有)

苦労した点
・金額の,が区切り文字と判断される
→replaceColonという関数を作成し、区切りのカンマのみ
“:”(コロン)に置き換えた
・データを配列に入れ、エクセルに書き出すと文字化け
→FileSystemObjectの代わりに、ADODB.streamを使用して
CSVを読ませた
・CSV内の改行が認識されなかった
→ADODB.streamのLineSeparatorの値をデフォルトから変更

ほぼ丸一日かかって書き上げ、動いた時は非常に嬉しかった為
記念投稿します。
とても長いのでコメントは気になさらないで下さい(^^)

今度は、データを使用しどのように分析する為のグラフを作ろう・・
と考えてます。ここはVBAと関係ありませんが、。
マクロは奥が深いです。

【参考URL】
https://tonari-it.com/vba-csv-camma/
https://tonari-it.com/vba-csv-utf8/

'Microsoft Scripting Runtimeにチェックを入れる→FileSystemObjectを使用する為
'Microsoft ActiveX Data Objects x.x にチェックを入れる→ADODB.Streamを使用する為
Public Sub CSVファイルをdataシートへ全て書き出し()
    Dim fs As New Scripting.FileSystemObject
    Dim files As Scripting.files
    Dim file As Scripting.file
    Dim strLine As String
    Dim sData As String
    Dim SPcsvData As Variant
    Dim path As String
    Dim fName As String
    Dim cnt As Long
    Dim ar() As Variant
    Dim c As Long
    'utf-8(BOM有) csvファイルの文字化け対策用
    Dim ado_stream As New ADODB.Stream
    
    'CSVファイルは、BusinessReportフォルダの中へ保存しておく
    path = ThisWorkbook.path & "\BusinessReport"
    Set files = fs.GetFolder(path).files
    
    
    cnt = 0 '配列で使用するカウント用
    For Each file In files
         
        'utf-8 csv文字化け対策
        With ado_stream
            .Charset = "utf-8"
            .LineSeparator = 10 '改行されなかったので設定変更
            .Open
            .LoadFromFile (file)
        
        fName = Right(fs.GetBaseName(file), 8) 'ファイル名の日付部分のみを取得、この先の配列0に入れる
        
         ado_stream.SkipLine '1行目(タイトル行)は読まない
        'CSVファイルを2行目から1行づつ読み、ar配列へ格納
        Do Until .EOS
            strLine = .ReadText(adReadLine) '一行読む
            sData = replaceColon(strLine) ',000のカンマも区切りと判断される為、区切りのカンマだけ:に置換
            SPcsvData = Split(sData, ":")
            
            ReDim Preserve ar(12, cnt)
            ar(0, cnt) = fName 'ファイル名から取得した日付を配列に格納
            
            'CSVの中の12項目も配列に格納
            For c = LBound(SPcsvData) To UBound(SPcsvData)
                ReDim Preserve ar(12, cnt)
                ar(c + 1, cnt) = Mid(SPcsvData(c), 2, Len(SPcsvData(c)) - 2) 'データが""で囲われているので除去
            Next
                       
            cnt = cnt + 1
        Loop
    
        .Close 'ファイルを閉じる
        End With
        
            
    Next
    
    '何かデータが入っていた時の為に、一度セルのデータを消去
    Worksheets("data").Range("A1").CurrentRegion.ClearContents
    
    '読み込んだCSVファイルのデータを一気に書き出し
    Worksheets("data").Range("A1").Resize(UBound(ar, 2) + 1, UBound(ar, 1) + 1).Value = _
    Application.WorksheetFunction.Transpose(ar) 'Excel関数で行列入替
    
    Set file = Nothing
    Set files = Nothing
    Set fs = Nothing
    
End Sub

Function replaceColon(str As String) As String
    Dim strTemp As String
    Dim quotCount As Long
    Dim L As Long

    For L = 1 To Len(str)
        strTemp = Mid(str, L, 1) '1文字づつ調べる
        If strTemp = """" Then 'ダブルコーテーション(")を単なる記号として扱いたいときは「""」と2つ続けて書く。
            quotCount = quotCount + 1
        ElseIf strTemp = "," Then
            If quotCount Mod 2 = 0 Then
            str = Left(str, L - 1) & ":" & Right(str, Len(str) - L)
            End If
        End If
    Next

    replaceColon = str
End Function
 

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

[12827]テキストファイルの操作について

2021-01-15 12:24:59 たかちゃんさんからの投稿です。

気象庁のページから以下の条件で、CSVファイルをダウンロードし
時刻が9:00の行の日時と気温データを取得しグラフを作成する
マクロを作成してみました。
Excel2019で動作確認済み。

前準備
1.気象庁のページからCSVファイルをダウンロードする
場所:羽田と八戸
取得データ:気温
期間:2020/12/1~2020/12/31

2.以下のような名前をつけて、kion という名前のフォルダの中に入れておく
HanedaDec.csv
HachinoheDec.csv

マクロの動き
1.9:00の行のデータのみ取得。
2.配列に格納
3.CSVのファイル名のシートを作成し、データの書き出し&折れ線グラフを作成

CreateGrapthに関しては、自動記録で作成しました。

【参考URL】
http://it-benkyou.seesaa.net/article/435728508.html

Option Explicit
'Microsoft Scripting Runtime にチェックを入れる→FSO使用のため
Dim fName As String

 Sub CreateData()
    Dim fs As New Scripting.FileSystemObject
    Dim files As Scripting.files
    Dim file As Scripting.file
    Dim csvFile As Scripting.TextStream
    Dim csvData As String
    Dim SPcsvData As Variant
    Dim c As Long
    Dim cnt As Long
    Dim ar() As Variant '()がないと動かないので要注意!!!
    Dim Dstr As String
    Dim D As Date
    Dim path As String
    
    'CSVファイルは、kionフォルダ内にいれておく
    path = ThisWorkbook.path & "\kion"
    
    
    Set files = fs.GetFolder(path).files
    
    'kionフォルダ内、全てのCSVファイルについて処理
    For Each file In files
    
        Set csvFile = fs.OpenTextFile(file, IOMode:=ForReading)
        fName = fs.GetBaseName(file) 'シート名作成用にファイル名を取得
        
        cnt = 0 '配列で使うカウント用
        
        'CSVファイルを最後の行まで読む
        Do While csvFile.AtEndOfStream <> True
        
            '最初のヘッダー行と最終行の2021/1/1が入らないように、先頭4文字が2020の行と
            'いう条件を設定
            csvData = csvFile.Read(4) '行の先頭4文字をcsvDataに代入
            If csvData = "2020" Then
            '1度4文字を読んでいる為、4文字以降から読み始めるので4文字(2020)を付け足した
                csvData = "2020" & csvFile.ReadLine
                SPcsvData = Split(csvData, ",")
                Dstr = SPcsvData(0) '日時データを文字列として格納
                D = CDate(Dstr) 'CDate関数を使用して、文字列→Data型に変換
                
                '9:00のデータだけを取得し、配列に格納
                If Hour(D) = 9 Then
                    ReDim Preserve ar(1, cnt)
                    ar(0, cnt) = SPcsvData(0) '日時
                    ar(1, cnt) = SPcsvData(1) '気温(必要な日時と気温のデータのみ配列に格納)
                    cnt = cnt + 1
                End If
                
            Else
                csvFile.SkipLine
            End If
        Loop
        
        'グラフを作る為に、一度Excelに書き出す
        Dim Nws As Worksheet
    '    Worksheets.Add after:=Worksheets(Worksheets.Count)
        Set Nws = Worksheets.Add
        Nws.Name = fName
        
        For c = LBound(ar, 2) To UBound(ar, 2)
            Worksheets(fName).Range("A1").Offset(c).Value = ar(0, c)
            Worksheets(fName).Range("B1").Offset(c).Value = ar(1, c)
        Next
        
        CreateGraph
        '次の処理でも使うので配列の中を消しておく!
        Erase ar
    Next
    
    Set csvFile = Nothing
    Set file = Nothing
    Set files = Nothing
    Set fs = Nothing
    
End Sub

Private Sub CreateGraph()
'Excelの自動記録でグラフを作成
    Dim ws As Worksheet
    Set ws = ActiveSheet
    
    ws.Range("A1").CurrentRegion.Select
    ws.Shapes.AddChart2(227, xlLineMarkers).Select
    ActiveChart.SetSourceData Source:=ws.Range("A1").CurrentRegion
    ActiveChart.Axes(xlCategory).Select
    ActiveChart.Axes(xlCategory).Select
    ActiveChart.Axes(xlCategory).CategoryType = xlCategoryScale
    ActiveChart.Axes(xlValue).Select
    ActiveChart.Axes(xlValue).MinimumScale = -15
    ActiveChart.Axes(xlValue).MaximumScale = 20
    ActiveChart.ChartTitle.Select
    ActiveChart.ChartTitle.Text = fName & "気温"

    With Selection.Format.TextFrame2.TextRange.Characters(1, 2).ParagraphFormat
        .TextDirection = msoTextDirectionLeftToRight
        .Alignment = msoAlignCenter
    End With
    With Selection.Format.TextFrame2.TextRange.Characters(1, 2).Font
        .BaselineOffset = 0
        .Bold = msoFalse
        .NameComplexScript = "+mn-cs"
        .NameFarEast = "+mn-ea"
        .Fill.Visible = msoTrue
        .Fill.ForeColor.RGB = RGB(89, 89, 89)
        .Fill.Transparency = 0
        .Fill.Solid
        .Size = 14
        .Italic = msoFalse
        .Kerning = 12
        .Name = "+mn-lt"
        .UnderlineStyle = msoNoUnderline
        .Spacing = 0
        .Strike = msoNoStrike
    End With
   
End Sub

 

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

[12806]ファイルの操作・フォルダの操作説明

2021-01-12 11:30:27 たかちゃんさんからの投稿です。

ファイルシステムオブジェクトを使用して、エクセルに写真を張り付け
工事現場の作業報告書のようなものを作成してみました。

事前準備:
エクセルでは”ひな形”という名前のシートを作成し、全てのセルの高さ20に設定。
写真の横にコメントを書ける罫線を引くなどしておく。

ひな形シートをコピーして、指定フォルダの写真を3枚貼り
再び、ひな形シートをコピーして、指定フォルダの残りの写真を
3枚づつ貼っていくマクロです。

Excel2019で動作確認済み。記念に投稿させて頂きました。


'Microsoft Scripting Runtimeにチェック→FSOを使用する為
Sub 画像貼り付け()
    Dim lngTop As Long 'TOPの余白用
    Dim fs As FileSystemObject
    Dim objFile As Scripting.File
    Dim objFldr As Scripting.Folder
    Dim c As Long '写真貼り付けのカウント用
    Dim cFiles As Long 'ファイルの数
    Dim cLast As Long  '最後の3の倍数用
    Dim ws As Worksheet  '作業用ワークシート
    
    Set fs = New Scripting.FileSystemObject
    Set objFldr = fs.GetFolder(ThisWorkbook.Path & "\写真")

    '最初は、写真を貼るシートをコピーする
    Worksheets("ひな形").Copy after:=Worksheets(Worksheets.Count)
    ActiveSheet.Name = Format(Date, "yymmdd")
    Set ws = ActiveSheet
    
    c = 1 '写真を貼り付けるカウント用
    lngTop = 20 '写真貼の際、Topの余白を20の意味
    
    cFiles = objFldr.Files.Count 'フォルダの中のファイル数
    
    'A4 1枚に3枚づつ写真を貼り付ける。最後の3の倍数では
    'シート(ページ)を追加したくない為、ここで最後の3の倍数を確認
    If cFiles Mod 3 = 0 Then
        cLast = (cFiles \ 3) * 3
    End If
    
    '写真を貼り付け
    For Each objFile In objFldr.Files

        ws.Shapes.AddPicture _
            Filename:=objFile, _
            LinkToFile:=False, _
            SaveWithDocument:=True, _
            Left:=20, _
            Top:=lngTop, _
            Width:=300, _
            Height:=200
        
        lngTop = lngTop + 200 + 20
        
        '3回写真を貼ったら、次のページ(シート)を作成
        '但し、最後の3の倍数ではページ(シート)を作成しない
        If c Mod 3 = 0 And c <> cLast Then
            Worksheets("ひな形").Copy after:=Worksheets(Worksheets.Count)
            ActiveSheet.Name = Format(Date, "yymmdd") & "_" & c
            Set ws = ActiveSheet
            lngTop = 20
        End If
        
        c = c + 1
    Next
    
    Set objFile = Nothing
    Set objFldr = Nothing
    Set fs = Nothing
    
End Sub
 







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

[12700]Excel の表を貼り付けるには

2020-12-24 03:04:53 たかちゃんさんからの投稿です。

47都道府県の性別・年代別の人口比率についてドーナツグラフを作成し、
パワーポイントにスライドに一気に張り付けるものを作成してみました。

このアイデアは以下の参考サイトからですが、コードは全て自力で書き上げました。(^^)
【参考サイト】
https://coconala.com/blogs/1312355/25743

パワーポイントは、色んな所に似たようなプロパティがあって苦労しました。
各プロパティの場所が分かるように、あえて纏めず書いているのでスッキリしていませんが
記念に投稿します。(Excel 2019動作確認済み)

Sub PowerPointTest()
    Dim ppApp As PowerPoint.Application
    Dim ppPrt As PowerPoint.Presentation
    Dim ppSld As PowerPoint.Slide
    Dim ppShape As PowerPoint.Shape 'グラフのタイトルを入力するシェイプ用
    Dim todoufuken As String
    Dim gyo As Long
    
    'Presentation1.pptxを開く(スライドが0枚の状態)
    Set ppApp = New PowerPoint.Application
    Dim path As String
    path = ThisWorkbook.path & "\Presentation1.pptx"
    ppApp.Visible = True
    Set ppPrt = ppApp.Presentations.Open(Filename:=path, ReadOnly:=msoFalse)
    
    
    For gyo = 3 To 49
    
    Worksheets("form").Range("A3").Value = Worksheets("data").Range("A" & gyo).Value
    
    'グラフのタイトル名
    todoufuken = Worksheets("form").Range("B3").Value

    'Excelでグラフを作成する為に範囲を選択、グラフ作成
    Worksheets("form").Range("C1:J3").Select
    Worksheets("form").Shapes.AddChart2(381, xlSunburst).Select

    'グラフのタイトルを非表示
    Worksheets("form").ChartObjects(1).Chart.HasTitle = False
    
    'グラフサイズを調整(ここで調整しないとグラフのデータラベル表示が欠けてしまう)
    Debug.Print Worksheets("form").ChartObjects(1).Chart.PlotArea.Height
    Debug.Print Worksheets("form").ChartObjects(1).Chart.PlotArea.Width
    
    Worksheets("form").ChartObjects(1).Height = 252.262504577637
    Worksheets("form").ChartObjects(1).Width = 407.325050354004
    
    Debug.Print Worksheets("form").ChartObjects(1).Chart.PlotArea.Height
    Debug.Print Worksheets("form").ChartObjects(1).Chart.PlotArea.Width
    
    'グラフをコピー(画像として)
    Worksheets("form").ChartObjects(1).CopyPicture appearance:=xlScreen, Format:=xlPicture

    'グラフを消去(要らないのでグラフは削除しておく)
    Worksheets("form").ChartObjects(1).Delete

    'スライドを作成し、グラフの大きさを調整しスライドの中央に貼り付け
    Dim c As Long    'スライドのカウント用
  
    'スライドの追加
    c = ppPrt.Slides.Count
    Set ppSld = ppPrt.Slides.Add(Index:=c + 1, Layout:=ppLayoutBlank)
    
    'グラフ(シェイプ)の貼り付け
    ppSld.Shapes.Paste
    
    'シェイプの大きさを設定(拡大)
    ppSld.Shapes(1).LockAspectRatio = msoCTrue
    ppSld.Shapes(1).Width = 800
'
    'シェイプの大きさを調査
    Debug.Print ppSld.Shapes(1).Name
    Debug.Print ppSld.Shapes(1).Width
    Debug.Print ppSld.Shapes(1).Height
    
    'スライドの大きさを調査
    Debug.Print ppPrt.PageSetup.SlideWidth
    Debug.Print ppPrt.PageSetup.SlideHeight
    
    'シェイプを中央揃え
    ppSld.Shapes(1).Left = (ppPrt.PageSetup.SlideWidth - ppSld.Shapes(1).Width) / 2
    ppSld.Shapes(1).Top = (ppPrt.PageSetup.SlideHeight - ppSld.Shapes(1).Height) / 2
  
    'グラフのタイトルを入力する為、シェイプを作成し文字を入力
    ppSld.Shapes.AddShape Type:=msoShapeRectangle, Left:=20, Top:=20, Width:=300, Height:=100
    
    Set ppShape = ppSld.Shapes(2)
    ppShape.Fill.Visible = msoFalse
    ppShape.Line.Visible = msoFalse
    ppShape.TextFrame.TextRange.Characters.Font.Size = 60
    ppShape.TextFrame.TextRange.Characters.Font.Color = vbBlack
'   日本語のフォントを設定するので、NameFarEastを使用。"HG 丸ゴシック M-PRO"は何故か使えない為明朝体を使用。
    ppShape.TextFrame.TextRange.Font.NameFarEast = "MS 明朝"
    ppShape.TextFrame.TextRange.Text = todoufuken
    
    Next
    
    ppPrt.Save
    ppPrt.Close
    ppApp.Quit
    
    Set ppShape = Nothing
    Set ppSld = Nothing
    Set ppPrt = Nothing
    Set ppApp = Nothing

End Sub
 


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

[12688]PowerPoint の主要オブジェクト紹介

2020-12-22 02:35:03 たかちゃんさんからの投稿です。

パワーポイントと連携させて英単語帳のようなものを作成するマクロを
書いてみましたので、記念に投稿します!(^o^)

①Presentation1.pptxというファイルを作成(スライドは0枚)し、
 マクロが書かれたエクセルと同じフォルダに入れておく。
②ExceのA列に英単語、B列に和訳が記入されている状態で、マクロを実行。
③PowerPointにて、スライドを1枚作成し、英単語を入力。
 スライドを1枚作成し、和訳を入力。
Excel2019にて動作確認済み。

Sub PowerPointSlideAdd()
    Dim ppApp As PowerPoint.Application
    Dim ppPrt As PowerPoint.Presentation
    Dim ppSld As PowerPoint.Slide
    Dim ppShape As PowerPoint.Shape
    
    'Presentation1.pptxを開く(スライドが0枚の状態)
    Set ppApp = New PowerPoint.Application
    Dim path As String
    path = ThisWorkbook.path & "\Presentation1.pptx"
    ppApp.Visible = True
    Set ppPrt = ppApp.Presentations.Open(Filename:=path, ReadOnly:=msoFalse)
    
    
    
    Dim c As Long    'スライドのカウント用
    Dim gyo As Long  'エクセルのデータ取得用
    
    For gyo = 2 To Range("B" & Rows.Count).End(xlUp).Row
    
        '英単語を入力
        '1番後ろにスライドを追加
        c = ppPrt.Slides.Count
        Set ppSld = ppPrt.Slides.Add(Index:=c + 1, Layout:=ppLayoutBlank)
        '文字を入力する為、シェイプを1つ作成
        ppSld.Shapes.AddShape Type:=msoShapeRectangle, Left:=20, Top:=160, Width:=920, Height:=164
        '作成したシェイプをへ書式を整えて、データを入力
        Set ppShape = ppSld.Shapes(1)
        With ppShape
            .Fill.Visible = msoFalse
            .Line.Visible = msoFalse
            With .TextFrame.TextRange
                .Font.Size = 160
                .Font.Color = vbBlack
                .Font.Name = "MS ゴシック"
                .Text = Range("A" & gyo).Value
            End With
        End With
        
        
        '日本語の単語を入力
        '一番後ろにスライドを追加
        c = ppPrt.Slides.Count
        Set ppSld = ppPrt.Slides.Add(Index:=c + 1, Layout:=ppLayoutBlank)
        '文字を入力する為、シェイプを1つ作成
        ppSld.Shapes.AddShape Type:=msoShapeRectangle, Left:=20, Top:=160, Width:=920, Height:=164
        '作成したシェイプにエクセルの値を入力
        Set ppShape = ppSld.Shapes(1)
        With ppShape
            .Fill.Visible = msoFalse
            .Line.Visible = msoFalse
            With .TextFrame.TextRange
                .Font.Size = 160
                .Font.Color = vbBlack
                '日本語のフォントを設定するので、NameFarEastを使用
                .Font.NameFarEast = "MS ゴシック"
                .Text = Range("B" & gyo).Value
            End With
        End With
    
    Next
    
    ppPrt.Save
    ppPrt.Close
    ppApp.Quit
    
    Set ppShape = Nothing
    Set ppSld = Nothing
    Set ppPrt = Nothing
    Set ppApp = Nothing
End Sub
 


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

[12645]テキストファイルの操作について

2020-11-28 03:54:48 たかちゃんさんからの投稿です。

外部連携講座に入ってから、一気にレベルが上がりました。
頭から煙が出そうですが、少しづつ仕組みを思い浮かべながら、
ノートに書いてみたりしながら、少しづづ進んでいます。


今使えるPCがMacしかないので、お手本通りに行きませんが、
どうしてもMacでも動かしてみたいと調べて、本日やっと
成功しました。とても嬉しかったので、近況報告しました。
(Excel for Mac 2016で動作確認済み)

Sub ReadTextFile()

    Dim FileNum As Long 'ファイルを開く為に使う番号を格納する
    Dim DataLine As String 'ファイル内の文字を一時的に格納
    Dim MYPath As String 'ファイルのパスを格納

	'デスクトップへのパスを設定
    MYPath = MacScript("return (path to desktop folder) as String")
	'デスクトップ上にある、対象のTextファイルのパスを設定
    MYPath = MYPath & "textfile1.txt"

	'FreeFile関数にてファイルを開くための番号を取得
    FileNum = FreeFile()

	'Open ファイル名 For 開き方 As #ファイル番号 Input(読み込み)で開くの意味
    Open MYPath For Input As #FileNum

    'ファイルがEOF(ファイルの終端)になるまでループをする
    Do Until EOF(FileNum)
		'Line Input #番号, 変数 (1行づつ読み込む)
        Line Input #FileNum, DataLine
		
        Debug.Print DataLine

    Loop
    'ファイルを閉じる
    Close #FileNum
End Sub 


参考サイト:
https://answers.microsoft.com/en-us/msoffice/forum/msoffice_word-mso_mac-mso_mac2016/read-text-file-line-by-line-using-vba-on-mac/7173f9dd-622d-432a-a960-816f0e734e96
https://www.petitmonte.com/excel/excel_vba_freefile.html

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

[12542]テキストファイルの操作について

2020-10-31 18:10:37 田中 宏明さんからの投稿です。

久しぶりに仕事でテキストファイルの処理を行いました。
具体的には、あるフォルダに保存された複数CSVファイルを1つのCSVファイルに結合するツール作成。
配列を利用することでWorkSheet不要の処理となりました。
 ①複数CSVファイルを順番にOpenTextFileメソッドで開き、TextStreamのReadLineメソッドで行データを一次元配列に格納
 ②別のCSVファイルをOpenTextFileメソッドで作成
 ③一次元配列に格納された行データをTextStreamのWriteLineメソッドで②のCSVファイルに追記

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

[11524]ORDER BYの紹介

2019-07-23 08:33:50 受講生さんからの投稿です。

SQL を利用したデータベース利用がここまで強力とは驚きました。
今の私は、魔法使いが最強の呪文を覚えたときと同じ心境です。

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

[10720]文字列操作の一例を紹介

2018-12-01 14:17:45 田中 宏明さんからの投稿です。

マクロを実行しながら、ログ出力することに成功しました。
出力結果とコードの一部です。素晴らしいです。

2018/12/01 13:37:09, [INFO] , ————— ログファイルオープン —————
2018/12/01 13:38:04, [ERROR] , エラー番号:-2147023783/種類:Unicode 文字のマッピングがターゲットのマルチバイト コード ページにありません。
2018/12/01 13:41:19, [INFO ] , —————正常終了 —————

'*************************************************************
'クラスモジュール
'logフォルダを作成してテキストファイルにログ出力
'*************************************************************
Option Explicit
'-------------------------------------------------------------
'モジュールレベル変数定義
'-------------------------------------------------------------
Private txt As TextStream

'-------------------------------------------------------------
' 名 称 : Class_Initialize
' 機 能 : コンストラクタ
' 引 数 : なし
' 戻 値 : なし
'-------------------------------------------------------------
Private Sub Class_Initialize()

    'インスタンス生成時に追記モードでログファイルオープン
    Dim logPath As String
    logPath = ThisWorkbook.path & "\log"
    
    'ログフォルダが無ければ作成
    Dim objFSO As FileSystemObject
    Set objFSO = New FileSystemObject
    If objFSO.folderexists(folderspec:=logPath) = False Then
        objFSO.createfolder logPath
    End If

    Dim filePath   As String
    filePath = logPath & "\" & "VBA_" & Format(Date, "yyyymmdd") & ".log"

    'TextStreamの追記モードでオープン
    Set txt = objFSO.OpenTextFile(Filename:=filePath, IOMode:=ForAppending, Create:=True, _
        Format:=TristateUseDefault)
    
    Set objFSO = Nothing

End Sub

'-------------------------------------------------------------
' 名 称 : Class_Terminate
' 機 能 : デストラクタ
' 引 数 : なし
' 戻 値 : なし
'-------------------------------------------------------------
Private Sub Class_Terminate()
    'インスタンス解放時ログファイルクローズ
    txt.Close
    Set txt = Nothing
End Sub

'-------------------------------------------------------------
' 名 称 : writeLog
' 機 能 : ログ出力
' 引 数 : level     :ログレベル("INFO " or "ERROR")
'          message   :メッセージ
' 戻 値 : なし
'-------------------------------------------------------------
Public Sub writeLog(ByVal level As String, _
                    ByVal message As String)
    'ログ作成
    Dim buf As String
    buf = Format(Now, "yyyy/mm/dd hh:nn:ss") '時間
    buf = buf & ", [" & level & "] "         'ログレベル
    buf = buf & ", " & message               'メッセージ
    '出力
    txt.WriteLine buf
End Sub 

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

[10598]テキストファイルの操作について

2018-09-27 19:56:45 受講生さんからの投稿です。

外部連携講座は、かなり奥が深いですが、この
テキストファイルの操作は、急にレベルが高く
なったように感じたので、理解を深めるまでに
相当な時間がかかりました。

今では、FileSystemObject TextStreamを使い、
csvファイル(カンマで区切られたデータ)を
読み込んだ直後に配列に代入し、高速にデータ
処理できるまになりました。

達人養成塾に入って、2年半での成果報告です。

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

[10310] 「クラス」と「インスタンス」の生成を体験

2018-08-04 18:51:05 田中 宏明さんからの投稿です。

クラス(設計図)を使って、インスタンス(オブジェクトの実体)を生成することを体験することで、Excelから外の世界への広がる「外部連携」の入り口がしっかり見えた気がします。
最近になって、クラスモジュールを使うことのメリットやデメリットが理解できるようになりましたが、ここまでの道のりに約2年半近くかかりました。

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

[10117]フォルダ内のサブフォルダとファイルをリストアップ

2018-06-13 23:58:26 こんちゃんさんからの投稿です。

FSO 概念を理解するのに時間かかりましたが、
非常に強力!
紙で管理していた帳票がエクセルだけでできちゃいました。(^^)v
フォルダにあるファイルを指定し、処理して保存する。
保存したら処理日を別のシートに入力。
まさにペーパーレス化!便利になります化!
管理も非常に楽になりました♪
ここまでできるのがなにより楽しいです!♪

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

[10084]フォルダ内のサブフォルダとファイルをリストアップ

2018-06-07 21:00:57 田中 宏明さんからの投稿です。

今日は、指定フォルダーから下にある全サブフォルダーを検索し、条件にヒットしたファイル(ある文字が含まれたファイル)のみを1つのフォルダーに移動させるマクロを作成できました。
for each構文 , instr関数, 動的配列, 再帰呼出 の組み合わせで実現でき、感激です。 

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

[9974]テキストファイルの操作について

2018-05-14 21:48:25 受講生さんからの投稿です。

AtEndOfLine と streamについて、
動画内での説明と字幕での説明が違いますが
結局はどちらなのでしょうか。
混乱するので動画の再編集をしていただければ
有り難いかなと思いますが。

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

[9966]ファイルの操作・フォルダの操作説明

2018-05-14 00:55:23 あじろうさんからの投稿です。

いつもお世話になっております。
処理時間について教えてもらいたいことがあります。
今迄、日ごとに分けたファイルから情報をあつめて集計しようと考えてます。
FileSystemObjectのサンプルコードを参考にして書いてみたコードがあります。
“siken”ファイルに”1.xlsm”,”3.xlsm””4.xlsm”3個が存在していて有無を確認した後、あったらSheet1の”A1”の値を “syuukei”シートに書き出す処理をしてみました。
僅か3個の処理で2~3秒かかってます。コードの描き方がいけないのでしょうか?それともこのくらいはかかるものでしょうか?うまく説明できずすいません。よろしくお願いします。

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

[9125]データベースとの接続と接続解除について

2017-11-15 15:04:57 田中 宏明さんからの投稿です。

小川先生
これからになりますが、SQLを使って、大量データを高速処理できるスキルを学習していきます。

> 追記ですが、複数表間でのマッチングは、AccessにデータをブチこんでSQLを発行するのが最強最速です。

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

[9121]データベースとの接続と接続解除について

2017-11-14 15:34:29 田中 宏明さんからの投稿です。

Access形式のデータベースからExcelシートにデータを取得できたことに感激しました。独学でこのレベルに到達することはできなかったと思います。

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

[9047]既存レコード内容の削除とデータリンクファイルによる接続について

2017-10-12 09:46:56 受講生さんからの投稿です。

◎「.udl をメモ帳で開いて Data Source= … 以降の部分を実際に adosample.mdb がある場所に書き換えてもつながらない」ということですね。
→【回答】ご教示いただいた通り、書き換えてみたところ、動作しました。ありがとうございます。.udlソースを直接修正すれば、動作することを確認しました。

◎db参照先は、現在どのような方法で指定していて、変更はどのような手順で行っていますでしょうか。
→【回答】実は、これからやってみようという段階です。udlソースの内容を使えば、出来る事が分かったため、本件解決です。
Excel経由で、Accessを複数人で共有するのは、あまり良くないでしょうか?

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

[9031]既存レコード内容の削除とデータリンクファイルによる接続について

2017-10-11 10:13:52 受講生さんからの投稿です。

①UDLファイルを、マニュアルどおりに作成しようとしましたが、
Microsoft Jet 4.0 OLE DB Providerが見当たりません。(Office2016です)
その後のデータベース接続方法も含め、ご教示ください。

②UDLがあると、複数のエクセルから一つのAccessを参照している場合、
Accessの格納先が変わっても、UDL一か所修正すればよいから、便利という認識で相違ないでしょうか?

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

[8099]データベースとの接続と接続解除について

2017-05-10 16:42:04 多和田 真也さんからの投稿です。

小川先生
ご回答ありがとうございます。ゴールデンウィークが終わって、私も仕事に追われていまして、質問したことを忘れそうになっていました。

こちらでも、検索などで調べていこうと思います。

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

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

[8082]データベースとの接続と接続解除について

2017-05-06 13:38:38 多和田 真也さんからの投稿です。

小川先生
確認してみました。Excel2016も、Word 2016も、ともに32ビットでした。
ちなみに、Office365を利用しています。

PCが64ビットなので、64ビット版を探してインストールしないといけないのでしょうか?

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

[8079]データベースとの接続と接続解除について

2017-05-05 12:23:55 多和田 真也さんからの投稿です。

小川先生。いつもお世話になっております。
先日、
>
> テキストP90に記載のある、データリンクプロパティ画面で、Microsoft Jet 4.0 OLE DB Providerが表示されないのですが、このような場合はどうすればよいでしょうか。
>
> 画面のスクリーンショットを添付しておりますので、ご参照いただいたうえで教えていただけましたらありがたいです。

という質問を、お問合せ画面のフォームから質問させていただきました。
———————————————————————————-

ということで、その関連でどのような調査をされたのか?をお知らせください。
それから、お使いの環境についても。
どんな環境なのか?どこまで調査されたのか?によって、回答は変わります。

———————————————————————————–

とご解答をいただきましたので、関連情報をお知らせいたします。

PC環境は、windows10の64bitマシンで、excelとaccessのバージョンは2016です。

Googleで「Microsoft Jet 4.0 OLE DB Provider」を検索し、http://qiita.com/yaju/items/86314412741deb806366

を参照したのですが、知識不足からか何をしたらよいのかよく理解できないので質問いたしました。

なお、前回の質問はスクリーンショットで画面の状態を見ていただいたうえでご判断いただいたほうが良いか、と思い、お問合せ画面のフォームから質問いたしました。(このフォームからだとファイルの添付ができないので)

他に何か判断に必要な情報があれば、お伝えいただけましたら幸いです。

どうぞよろしくお願いいたします。

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

[7548]Wordと連携するには

2017-01-22 12:27:55 田中 宏明さんからの投稿です。

あるフォルダーに保存されたWordファイル(.doc .docx)を一括印刷するマクロを作成してみました。
MS-Officeのバージョンを気にせずに実行できるよう工夫しています。
達人養成塾に入って1年以内でこのレベルに到達してことに感謝します。

 Option Explicit
Option Base 1

Sub Word一括印刷()  'H29.1.22

    Dim seDir As String
    'Wordファイルが保存されているフォルダーを選択
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = True Then
            seDir = .SelectedItems(1)
        Else
            Exit Sub
        End If
    End With
    
    Dim FSobj As Object  'ファイルシステムオブジェクト
    Dim FSobjfolder As Object  'フォルダーオブジェクト
    Dim FSobjfile As Object  'ファイルオブジェクト
    Set FSobj = CreateObject("Scripting.FileSystemObject")
    Set FSobjfolder = FSobj.GetFolder(seDir)

    Dim cnt As Long 'カウンター
    cnt = 0
    
    Dim FName() As String 'Wordファイル名を入れる動的配列変数
    
    For Each FSobjfile In FSobjfolder.Files
        'Wordファイルが見つかったらファイル名を配列に入れる
        If Right$(FSobjfile.Name, 4) = ".doc" Or Right$(FSobjfile.Name, 5) = ".docx" Then
            cnt = cnt + 1
            ReDim Preserve FName(cnt)
            FName(cnt) = FSobjfile.Name
        End If
    Next
    
    Set FSobj = Nothing 'オブジェクトを開放
    Set FSobjfolder = Nothing 'オブジェクトを開放
    Set FSobjfile = Nothing 'オブジェクトを開放

    If cnt = 0 Then
        MsgBox "Wordファイルが見つかりません。", vbExclamation
        Exit Sub
    End If
    
    Dim wdApp As Object 'Wordアプリケーションオブジェクト
    Dim doc As Object  'Wordドキュメントオブジェクト
    Set wdApp = CreateObject("Word.Application")
    wdApp.Visible = True 'Wordアプリケーションを表示
    
    Application.DisplayAlerts = False
    
    For cnt = LBound(FName) To UBound(FName)
        Debug.Print FName(cnt)
        Set doc = wdApp.Documents.Open(seDir & "\" & FName(cnt))
        doc.PrintOut
        doc.Close
    Next cnt

    Application.DisplayAlerts = True
 
    wdApp.Quit 'Wordアプリケーションを終了
    Set wdApp = Nothing 'オブジェクトを開放
    Set doc = Nothing 'オブジェクトを開放
    
    MsgBox "Wordファイルの一括印刷終了", vbInformation
End Sub 

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

[5622]文書中の一文を操作するには

2016-01-15 06:30:06 山田 将之さんからの投稿です。

小川先生 ありがとうございました。
ワードとパワーポイントとの連携さっそくどんどん使っていきます。
メールの処理にも応用させていきたいと思います。

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

[5609]Office アプリケーションを操作・連携するには

2016-01-14 21:16:02 山田 将之さんからの投稿です。

オブジェクトが違うだけで基本はエクセルのときと同じなので、結構はやく習得できそうです。

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

[5602]ORDER BYの紹介

2016-01-14 06:07:16 山田 将之さんからの投稿です。

inner join とleft join 何度も復習してマスターします。

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

[5577]簡単なSQL を使った.mdb ファイルからデータを取得するサンプルについて

2016-01-11 16:52:19 山田 将之さんからの投稿です。

ふとこの動画を見ているときに、自分は今までと違う世界に足を踏み込んだことに気付きました。すごい技術を習得しようとしているのですね。
それを考えると、受講料は安いです。戻り値がたくさんこれからかえってくることを考えると本当に良心的です。
SQLはじめて聞きました。ぜひ習得するよう学習に励みます。
ありがとうございます。

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

[5556]データベースとの接続と接続解除について

2016-01-11 11:13:56 山田 将之さんからの投稿です。

外部接続をすると、秘密情報が流れる心配はないのでしょうか。

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

[5551]文字列操作の一例を紹介

2016-01-10 13:47:53 山田 将之さんからの投稿です。

今までLogFileって何のことかわからなかったのですが、説明を聞いて理解できました。使い道があるんですね。とても楽しくなってきました。

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

12>

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

 

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

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

トップへ