Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


96 / 3841 ページ ←次へ | 前へ→

【80552】Re:ユーザ名を比較して、存在していない...
回答  amatsuno  - 19/3/4(月) 9:44 -

引用なし
パスワード
   ▼マナ さん:
>▼amatsuno さん:
>
>よくみると、合計するのが、B列なのかC列なのか混乱しています。
>どっちでしょうか。
>
>
>Option Explicit
>
>Sub test()
>  Dim dic1 As Object, dic2 As Object
>  Dim c As Range
>  Dim vk1 As String, vk2 As String
>  
>  Set dic1 = CreateObject("scripting.dictionary")
>  Set dic2 = CreateObject("scripting.dictionary")
> 
>  With Worksheets("シート1")
>     For Each c In .Range("A2", .Cells(Rows.Count, "A").End(xlUp))
>       vk1 = c.Value
>       vk2 = c.Offset(, 2).Text
>      
>       If IsDate(vk2) Then
>        dic1(vk1) = dic1(vk1) + TimeValue(vk2)
>        dic2(vk1) = dic2(vk1) + TimeValue(vk2)
>      Else
>        dic1(vk1) = TimeValue("23:59:58")
>      End If
>    Next
>     
>    .Cells(5).Resize(dic1.Count).Value = Application.Transpose(dic1.keys)
>    .Cells(6).Resize(dic1.Count).Value = Application.Transpose(dic1.items)
>    .Cells(7).Resize(dic2.Count).Value = Application.Transpose(dic2.keys)
>    .Cells(8).Resize(dic2.Count).Value = Application.Transpose(dic2.items)
>  End With
> 
>End Sub


すいません。
合計するのは、シート1のB列です
・ツリー全体表示

【80551】Re:ユーザ名を比較して、存在していない...
お礼  amatsuno  - 19/3/4(月) 9:12 -

引用なし
パスワード
   ▼でれすけ さん:
>こんにちわ
>
>Sub test()
>
> With Worksheets("Sheet3")
>   .Cells.ClearContents
>   Worksheets("Sheet2").Range("A1").CurrentRegion.Columns(1).Copy .Cells(.Rows.Count, 1).End(xlUp)
>   Worksheets("Sheet1").Range("A1").CurrentRegion.Columns(1).Copy .Cells(.Rows.Count, 1).End(xlUp).Offset(1)
>   With .Range("A1")
>    .CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlNo
>    strAddr = Worksheets("Sheet2").Range("A1").CurrentRegion.Address(ReferenceStyle:=exlR1C1, external:=True)
>    With .CurrentRegion.Columns(2)
>       .NumberFormatLocal = "hh:mm:ss"
>       .FormulaR1C1 = "=VLOOKUP(RC[-1]," & strAddr & ",2,false)"
>       .Value = .Value
>       .Replace "#N/A", TimeValue("23:59:58")
>    End With
>   End With
> End With
>
>End Sub


ありがとうございます。
いただいたソースを参考にして確認させていただきます
・ツリー全体表示

【80550】Re:ユーザ名を比較して、存在していない...
発言  マナ  - 19/3/2(土) 15:59 -

引用なし
パスワード
   ▼amatsuno さん:

一般機能の「統合」と「ジャンプ」を使う方法もあります。
こんな感じです。

1) sheet1データをSheet2で「統合」:左端列基準で合計
2) 空白セルに「ジャンプ」
3) 行全体を削除
4) sheet1データをSheet3で「統合」:左端列基準で合計
5) 空白セルに「ジャンプ」
6) "23:58:59"を入力

実際のレイアウトが不明なので、
・1行目に共通見出しがあるかどうか
・合計するのがB列なのかC列なのか
で、操作がかわります。

マクロ化することも可能です。
・ツリー全体表示

【80549】Re:シート名と同じ文字列のセル行位置を...
発言  γ  - 19/3/2(土) 14:40 -

引用なし
パスワード
   ▼狛ちゃん さん:
>アドバイスにあるモーグのmatch関数と同じ構文を使用してみました。

その最後にあるSample3を参考にしてください。
Application.Match (Worksheetfunction.Matchでなく)を使った
マッチしない場合の対応方法が役に立つはずです。

>このように動作が安定しない理由としては何が考えられるでしょうか?
詳細なコメントを希望するなら、現在のコードを提示することです。
回答者が当て推量で回答しても益がないでしょう。
・ツリー全体表示

【80548】Re:シート名と同じ文字列のセル行位置を...
質問  狛ちゃん E-MAIL  - 19/3/2(土) 11:56 -

引用なし
パスワード
   アドバイスにあるモーグのmatch関数と同じ構文を使用してみました。
ワークシート名と表内の文字列に差があることも分かったのですが
安定した動作が得られません。
安定しない状況に
1)マッチした行数が得られた場合でもエラーメッセジが表示されることあります。
2)繰り返して作動してみると行数そのものも得られない場合があります。

このように動作が安定しない理由としては何が考えられるでしょうか?
・ツリー全体表示

【80547】Re:ユーザ名を比較して、存在していない...
発言  マナ  - 19/3/1(金) 21:39 -

引用なし
パスワード
   ▼amatsuno さん:

よくみると、合計するのが、B列なのかC列なのか混乱しています。
どっちでしょうか。


Option Explicit

Sub test()
  Dim dic1 As Object, dic2 As Object
  Dim c As Range
  Dim vk1 As String, vk2 As String
  
  Set dic1 = CreateObject("scripting.dictionary")
  Set dic2 = CreateObject("scripting.dictionary")
 
  With Worksheets("シート1")
     For Each c In .Range("A2", .Cells(Rows.Count, "A").End(xlUp))
       vk1 = c.Value
       vk2 = c.Offset(, 2).Text
      
       If IsDate(vk2) Then
        dic1(vk1) = dic1(vk1) + TimeValue(vk2)
        dic2(vk1) = dic2(vk1) + TimeValue(vk2)
      Else
        dic1(vk1) = TimeValue("23:59:58")
      End If
    Next
     
    .Cells(5).Resize(dic1.Count).Value = Application.Transpose(dic1.keys)
    .Cells(6).Resize(dic1.Count).Value = Application.Transpose(dic1.items)
    .Cells(7).Resize(dic2.Count).Value = Application.Transpose(dic2.keys)
    .Cells(8).Resize(dic2.Count).Value = Application.Transpose(dic2.items)
  End With
 
End Sub
・ツリー全体表示

【80546】Re:ユーザ名を比較して、存在していない...
発言  でれすけ  - 19/3/1(金) 20:24 -

引用なし
パスワード
   こんにちわ

Sub test()

 With Worksheets("Sheet3")
   .Cells.ClearContents
   Worksheets("Sheet2").Range("A1").CurrentRegion.Columns(1).Copy .Cells(.Rows.Count, 1).End(xlUp)
   Worksheets("Sheet1").Range("A1").CurrentRegion.Columns(1).Copy .Cells(.Rows.Count, 1).End(xlUp).Offset(1)
   With .Range("A1")
    .CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlNo
    strAddr = Worksheets("Sheet2").Range("A1").CurrentRegion.Address(ReferenceStyle:=exlR1C1, external:=True)
    With .CurrentRegion.Columns(2)
       .NumberFormatLocal = "hh:mm:ss"
       .FormulaR1C1 = "=VLOOKUP(RC[-1]," & strAddr & ",2,false)"
       .Value = .Value
       .Replace "#N/A", TimeValue("23:59:58")
    End With
   End With
 End With

End Sub
・ツリー全体表示

【80545】Re:ユーザ名を比較して、存在していない...
発言  amatsuno  - 19/3/1(金) 19:56 -

引用なし
パスワード
   ▼amatsuno さん:
>▼マナ さん:
>>▼amatsuno さん:
>>
>>>vlookupなどを使用する感じでしょうか?
>>
>>はい。
>
>
>すいません。
>正確にはこのような感じです
>
>シート1:
>カラムA,カラムB,カラムC
>
>NAME-1,00:22:22
>NAME-1.00:33:33
>NAME-2,AAAA
>NAME-3,00:12:34
>NAME-4,00:23:33
>NAME-5,00:55:16
>NAME-5,00:17:27
>NAME-5,00:55:16
>NAME-6,HHHHH
>
>シート2: ⇒シート1から抽出
>カラムA,カラムB
>
>NAME-1,00:55:55
>NAME-3,00:12:34
>NAME-4,00:23:33
>NAME-5,02:07:59
>
>※カラムAはシート1のカラムCが時間を持っているユーザ
>※カラムBはシート1のカラムCの合計値
>
>実行結果
>シート3:
>カラムA,カラムB
>
>NAME-1,00:55:55
>NAME-2,23:59:58
>NAME-3,00:12:34
>NAME-4,00:23:33
>NAME-5,03:30:30
>NAME-6,02:07:59
>
>
>1)シート3のA列(NAME-*)は、シート1と同じ並びで出力させたいです
>2)シート3のB列(**:**:**)は、シート2で存在しているユーザーはシート2のB列を、シート2に存在していないユーザーは、「23:59:58」を入れたいと考えています
>
>
>お手数であはありますが、お分かりになられる方、よろしくお願いいたします


で、上記の条件に対して

 With Worksheets("シート1")
   For i3 = 2 To .Cells(Rows.Count, "A").End(xlUp).Row
     vK2 = .Cells(i3, "A").Value
     dic2(vK2) = dic2(vK2) + .Cells(i3, "B")
   Next
  End With

  ReDim vA3(1 To dic2.Count, 1 To 2)
  i3 = 0
  For Each vK2 In dic2.Keys
   i3 = i3 + 1
   vA3(i3, 1) = vK2
   vA3(i3, 2) = dic2(vK2)
  Next

  Application.ScreenUpdating = False
  With Worksheets("シート2")
   With .Range("A1").Resize(i3, 2)
     .EntireColumn.ClearContents
     .Value = vA3
     .Columns(2).NumberFormatLocal = "h:mm:ss"
     Application.Goto .Cells(1), True
   End With
  End With
  Application.ScreenUpdating = True

  Rows(1).Insert

まで実施しました。
このときのシート1にあってシート2にいないユーザの追加の箇所でとまりました

とりあえずvlookupで試してみます
・ツリー全体表示

【80544】Re:ユーザ名を比較して、存在していない...
発言  amatsuno  - 19/3/1(金) 19:52 -

引用なし
パスワード
   ▼マナ さん:
>▼amatsuno さん:
>
>>vlookupなどを使用する感じでしょうか?
>
>はい。


すいません。
正確にはこのような感じです

シート1:
カラムA,カラムB,カラムC

NAME-1,00:22:22
NAME-1.00:33:33
NAME-2,AAAA
NAME-3,00:12:34
NAME-4,00:23:33
NAME-5,00:55:16
NAME-5,00:17:27
NAME-5,00:55:16
NAME-6,HHHHH

シート2: ⇒シート1から抽出
カラムA,カラムB

NAME-1,00:55:55
NAME-3,00:12:34
NAME-4,00:23:33
NAME-5,02:07:59

※カラムAはシート1のカラムCが時間を持っているユーザ
※カラムBはシート1のカラムCの合計値

実行結果
シート3:
カラムA,カラムB

NAME-1,00:55:55
NAME-2,23:59:58
NAME-3,00:12:34
NAME-4,00:23:33
NAME-5,03:30:30
NAME-6,02:07:59


1)シート3のA列(NAME-*)は、シート1と同じ並びで出力させたいです
2)シート3のB列(**:**:**)は、シート2で存在しているユーザーはシート2のB列を、シート2に存在していないユーザーは、「23:59:58」を入れたいと考えています


お手数であはありますが、お分かりになられる方、よろしくお願いいたします
・ツリー全体表示

【80543】Re:ユーザ名を比較して、存在していない...
発言  マナ  - 19/3/1(金) 19:39 -

引用なし
パスワード
   ▼amatsuno さん:

>vlookupなどを使用する感じでしょうか?

はい。
・ツリー全体表示

【80542】Re:処理が遅くなってしまう
発言  amatsuno  - 19/3/1(金) 19:29 -

引用なし
パスワード
   ▼マナ さん:
>▼amatsuno さん:
>
>>1つのマクロで全処理を実施する必要が発生したため、
>>各処理を結合したのですが、処理が冗長化しているのか、
>>別々にしたときよりも実行時間がかかってしまいます。
>>
>
>コードは全く見ていませんが
>こんな感じのほうがわかりやすくないですか?
>
>sub 実行()
>  macro1
>  macro2
>  macro3
>  macro4
>end sub

急遽、複数の処理をひとつのマクロにする話が出たので、
とりあえず処理を複合させて動作確認を行っていました
・ツリー全体表示

【80541】Re:処理が遅くなってしまう
発言  amatsuno  - 19/3/1(金) 19:21 -

引用なし
パスワード
   ▼γ さん:
>横入り失礼します。
>ラップタイムをとって、どこで時間がかかっているか調査するとよいのでは?
>sub 実行()
>  dim t
>  t = Timer
>  macro1
>  Debug.print "macro1 " & (Timer - t)
>  t = Timer
>  macro2
>  Debug.print "macro2 " & (Timer - t)
>  t = Timer
>  macro3
>  Debug.print "macro3 " & (Timer - t)
>  t = Timer
>  macro4
>  Debug.print "macro4 " & (Timer - t)
>end sub


ありがとうございます。
これで確認してみます

処理ごとの時刻としては、現在
  Debug.Print Time
を使っていました
(実行時に、表示される時刻の羅列で確認していました)
・ツリー全体表示

【80540】Re:ユーザ名を比較して、存在していない...
発言  amatsuno  - 19/3/1(金) 19:19 -

引用なし
パスワード
   ▼マナ さん:
>▼amatsuno さん:
>
>簡単な数式でできますが、それではだめですか?

vlookupなどを使用する感じでしょうか?
・ツリー全体表示

【80539】Re:処理が遅くなってしまう
発言  γ  - 19/2/28(木) 20:19 -

引用なし
パスワード
   横入り失礼します。
ラップタイムをとって、どこで時間がかかっているか調査するとよいのでは?
sub 実行()
  dim t
  t = Timer
  macro1
  Debug.print "macro1 " & (Timer - t)
  t = Timer
  macro2
  Debug.print "macro2 " & (Timer - t)
  t = Timer
  macro3
  Debug.print "macro3 " & (Timer - t)
  t = Timer
  macro4
  Debug.print "macro4 " & (Timer - t)
end sub
・ツリー全体表示

【80538】Re:処理が遅くなってしまう
発言  マナ  - 19/2/28(木) 18:54 -

引用なし
パスワード
   ▼amatsuno さん:

>1つのマクロで全処理を実施する必要が発生したため、
>各処理を結合したのですが、処理が冗長化しているのか、
>別々にしたときよりも実行時間がかかってしまいます。
>

コードは全く見ていませんが
こんな感じのほうがわかりやすくないですか?

sub 実行()
  macro1
  macro2
  macro3
  macro4
end sub
・ツリー全体表示

【80537】Re:ユーザ名を比較して、存在していない...
発言  マナ  - 19/2/28(木) 18:46 -

引用なし
パスワード
   ▼amatsuno さん:

簡単な数式でできますが、それではだめですか?
・ツリー全体表示

【80536】Re:csvファイルを出力したときに、日付表...
お礼  amatsuno  - 19/2/28(木) 15:42 -

引用なし
パスワード
   ▼でれすけ さん:
>すみません。私は知らなかったのですが、よく知られたバグ(ではなくて仕様)
>なのだそうです。
>
>SaveAsメソッドでテキストファイル保存すると書式が変更される
>をキーワードに検索したらかなりヒットしました。
>
>ws_last.SaveAs "C:\fileexp.csv", FileFormat:=xlCSV, Local:=True
>
>SaveAsメソッドの Local引数に True をセットするそうです。
>
>ためしてみてください。

上記で対応できました。
ありがとうございました
・ツリー全体表示

【80535】Re:処理が遅くなってしまう
発言  amatsuno  - 19/2/28(木) 14:18 -

引用なし
パスワード
   ライセンス.csv

端末機No,端末機名,端末機タイプ,所属マスターサーバー,部署名,コンピューター名,ホスト名,ドメイン名(ワークグループ名),ログオンユーザー,表示名,OS名,プロダクトID
1,logSVMM,サーバー,logSV,NW1,logSVMM,logSVMM,vbstest.co.jp,11login,,Windows Server 2016 Standard (x64),AAAAA
15,15SVMM,PC,logSV,NW1,15SVMM,15SVMM,vbstest.co.jp,33login,15のユーザ,Windows 10 Pro (x64),AAAAA
18,18SVMM,PC,logSV,NW2,18SVMM,18SVMM,vbstest.co.jp,18login,18のユーザ,Windows 10 Pro (x64),AAAAA
75,75SVMM,PC,logSV,NW2,75SVMM,75SVMM,vbstest.co.jp,75login,18のユーザ,Windows 7 Professional,AAAAA
76,76SVMM,PC,logSV,NW2,76SVMM,76SVMM,vbstest.co.jp,76login,18のユーザ,Windows 7 Professional,AAAAA
82,82SVMM,PC,logSV,NW2,82SVMM,82SVMM,vbstest.co.jp,82login,18のユーザ,Windows 10 Pro (x64),AAAAA
・ツリー全体表示

【80534】Re:処理が遅くなってしまう
発言  amatsuno  - 19/2/28(木) 14:12 -

引用なし
パスワード
   ログ.csv

所属マスターサーバー,端末機No,コンピューター名,IPアドレス,セッションID,ログイン名,表示名,日時,カテゴリ,警告,期間,パス / URL,タイトル,説明,MACアドレス,アクセスPC,アクセスユーザー,操作種別,共有名,パス1,ドライブ種別1,デバイス名1,ベンダID1,プロダクトID1,シリアルNo1,パス2,ドライブ種別2,デバイス名2,ベンダID2,プロダクトID2,シリアルNo2,テキスト,プリンター名,印刷枚数,受信者,送信者,添付,メールサイズ,ドライブ種別,操作内容1,操作内容2,書き込み内容 / ファイル名,種別,ゲートウェイMACアドレス,ゲートウェイIPアドレス,個別情報1,個別詳細1,個別情報2,個別詳細2,個別情報3,個別詳細3,個別情報4,個別詳細4,接続元コンピューター名,接続元IPアドレス,アプリケーション名(Windowsストアアプリ),パッケージID(Windowsストアアプリ),ホスト名 / IPアドレス,ポート名 / デバイスURI,ファイルサイズ(バイト),印刷ファイルパス,管理番号1,管理番号2,デバイス種別,デバイス名,ネットワークカード情報,アクセスポイント情報,デバイス種別詳細,ファイルパス,ハッシュ値,通信先IPアドレス,通信先ポート番号,国 / 地域,累積送信データ量(バイト),累積受信データ量(バイト),アカウント監査(操作No),アカウント監査(アプリケーション名称),アカウント監査(ログインアカウント),アカウント監査(画面名称),アカウント監査(項目名称),アカウント監査(収集データ),ドメイン名,プロセスID,アラート優先順位,Webストレージ1,Webストレージ2,Webストレージ / メール,バイト数,ファイル数,値の名前(レジストリ),値の種類1(レジストリ),値の種類2(レジストリ),値のデータ1(レジストリ),値のデータ2(レジストリ),データサイズ1(レジストリ),データサイズ2(レジストリ),起動モード,補正後の日時,補正前の日時
logSV,1,logSVMM,1.2.3.4,1,11login,,2019/2/26 9:56,起動・終了,,0:00:05,,,,,,,操作終了,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,vbstest.co.jp,,,,,,,,,,,,,,,,,
logSV,1,logSVMM,1.2.3.4,1,11login,,2019/2/26 9:56,起動・終了,,0:00:05,,,,,,,操作開始,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,vbstest.co.jp,,,,,,,,,,,,,,,,,
logSV,1,logSVMM,1.2.3.4,1,11login,,2019/2/26 9:41,起動・終了,,0:02:23,,,,,,,操作終了,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,vbstest.co.jp,,,,,,,,,,,,,,,,,
logSV,1,logSVMM,1.2.3.4,1,11login,,2019/2/26 9:39,起動・終了,,0:02:23,,,,,,,操作開始,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,vbstest.co.jp,,,,,,,,,,,,,,,,,
logSV,1,logSVMM,1.2.3.4,1,11login,,2019/2/26 9:23,起動・終了,,0:05:08,,,,,,,操作終了,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,vbstest.co.jp,,,,,,,,,,,,,,,,,
logSV,1,logSVMM,1.2.3.4,1,11login,,2019/2/26 9:18,起動・終了,,0:05:08,,,,,,,操作開始,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,vbstest.co.jp,,,,,,,,,,,,,,,,,
logSV,15,15SVMM,4.5.6.7,3,33login,15のユーザ,2019/2/26 15:18,起動・終了,,2:19:53,,,,,,,操作終了,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,vbstest.co.jp,,,,,,,,,,,,,,,,,
logSV,15,15SVMM,4.5.6.7,3,33login,15のユーザ,2019/2/26 12:58,起動・終了,,2:19:53,,,,,,,操作開始,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,vbstest.co.jp,,,,,,,,,,,,,,,,,
logSV,15,15SVMM,4.5.6.7,3,33login,15のユーザ,2019/2/26 12:06,起動・終了,,0:00:44,,,,,,,操作終了,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,vbstest.co.jp,,,,,,,,,,,,,,,,,
logSV,15,15SVMM,4.5.6.7,3,33login,15のユーザ,2019/2/26 12:05,起動・終了,,0:00:44,,,,,,,操作開始,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,vbstest.co.jp,,,,,,,,,,,,,,,,,
logSV,15,15SVMM,4.5.6.7,3,33login,15のユーザ,2019/2/26 12:01,起動・終了,,1:27:49,,,,,,,操作終了,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,vbstest.co.jp,,,,,,,,,,,,,,,,,
logSV,15,15SVMM,4.5.6.7,3,33login,15のユーザ,2019/2/26 10:33,起動・終了,,1:27:49,,,,,,,操作開始,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,vbstest.co.jp,,,,,,,,,,,,,,,,,
logSV,15,15SVMM,4.5.6.7,0,,,2019/2/26 8:28,起動・終了,,0:00:00,,,,,,,電源ON,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,通常起動,,
logSV,18,18SVMM,13.14.15.16,1,18login,18のユーザ,2019/2/26 15:58,起動・終了,,2:18:49,,,,,,,操作終了,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,vbstest.co.jp,,,,,,,,,,,,,,,,,
logSV,18,18SVMM,13.14.15.16,1,18login,18のユーザ,2019/2/26 13:39,起動・終了,,2:18:49,,,,,,,操作開始,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,vbstest.co.jp,,,,,,,,,,,,,,,,,
logSV,18,18SVMM,13.14.15.16,1,18login,18のユーザ,2019/2/26 13:34,起動・終了,,0:13:44,,,,,,,操作終了,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,vbstest.co.jp,,,,,,,,,,,,,,,,,
logSV,18,18SVMM,13.14.15.16,1,18login,18のユーザ,2019/2/26 13:20,起動・終了,,0:13:44,,,,,,,操作開始,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,vbstest.co.jp,,,,,,,,,,,,,,,,,
logSV,18,18SVMM,13.14.15.16,1,18login,18のユーザ,2019/2/26 13:11,起動・終了,,0:11:45,,,,,,,操作終了,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,vbstest.co.jp,,,,,,,,,,,,,,,,,
logSV,18,18SVMM,13.14.15.16,1,18login,18のユーザ,2019/2/26 12:59,起動・終了,,0:11:45,,,,,,,操作開始,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,vbstest.co.jp,,,,,,,,,,,,,,,,,
logSV,18,18SVMM,13.14.15.16,1,18login,18のユーザ,2019/2/26 12:02,起動・終了,,0:03:15,,,,,,,操作終了,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,vbstest.co.jp,,,,,,,,,,,,,,,,,
logSV,18,18SVMM,13.14.15.16,1,18login,18のユーザ,2019/2/26 11:59,起動・終了,,0:03:15,,,,,,,操作開始,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,vbstest.co.jp,,,,,,,,,,,,,,,,,
logSV,18,18SVMM,13.14.15.16,1,18login,18のユーザ,2019/2/26 11:50,起動・終了,,2:58:54,,,,,,,操作終了,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,vbstest.co.jp,,,,,,,,,,,,,,,,,
logSV,18,18SVMM,13.14.15.16,1,18login,18のユーザ,2019/2/26 8:51,起動・終了,,2:58:54,,,,,,,操作開始,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,vbstest.co.jp,,,,,,,,,,,,,,,,,
logSV,18,18SVMM,13.14.15.16,1,18login,18のユーザ,2019/2/26 8:51,起動・終了,,0:01:00,,,,,,,操作終了,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,vbstest.co.jp,,,,,,,,,,,,,,,,,
logSV,18,18SVMM,13.14.15.16,1,18login,18のユーザ,2019/2/26 8:50,起動・終了,,0:01:00,,,,,,,操作開始,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,vbstest.co.jp,,,,,,,,,,,,,,,,,
logSV,18,18SVMM,13.14.15.16,0,,,2019/2/26 8:48,起動・終了,,0:00:00,,,,,,,電源ON,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,通常起動,,
logSV,82,82SVMM,取得失敗,10,82login,82のユーザ,2019/2/26 9:24,起動・終了,,23:52:08,,,,,,,ログオフ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,vbstest.co.jp,,,,,,,,,,,,,,,通常起動,,
logSV,82,82SVMM,22.33.44.55,0,,,2019/2/26 9:24,起動・終了,,0:00:00,,,,,,,電源ON,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,通常起動,,
・ツリー全体表示

【80533】Re:処理が遅くなってしまう
発言  amatsuno  - 19/2/28(木) 14:05 -

引用なし
パスワード
   'ログ情報のうち、必要な列のみを抽出

  ws_master_csv.Columns(2).Copy
  ws_master_csv_new.Columns(5).PasteSpecial Paste:=xlPasteValues
 
  ws_master_csv.Columns(8).Copy ws_master_csv_new.Columns(2)
 
  ws_master_csv.Columns(18).Copy ws_master_csv_new.Columns(3)
  
  ws_master_csv.Columns(11).Copy
  ws_master_csv_new.Columns(4).PasteSpecial Paste:=xlPasteValues
  ws_master_csv_new.Columns(4).NumberFormatLocal = "h:mm:ss"
  
  ws_master_csv.Columns(7).Copy ws_master_csv_new.Columns(1)
  
        
 'グループ情報のうち、必要な列のみを抽出
 
  ws_group.Columns(1).Copy
  ws_group_new.Columns(1).PasteSpecial Paste:=xlPasteValues
 
  ws_group.Columns(5).Copy
  ws_group_new.Columns(2).PasteSpecial Paste:=xlPasteValues
    
  ws_group.Columns(2).Copy
  ws_group_new.Columns(3).PasteSpecial Paste:=xlPasteValues
  
      
 '表示名が空白のレコードに、端末機に紐付いている名称を入れる
  ws_master_csv_new.Columns(5).Copy
  ws_group_user.Columns(1).PasteSpecial Paste:=xlPasteValues
 
  ws_master_csv_new.Columns(1).Copy
  ws_group_user.Columns(2).PasteSpecial Paste:=xlPasteValues
    
  ws_master_csv.Columns(6).Copy
  ws_group_user.Columns(3).PasteSpecial Paste:=xlPasteValues
  
          
  Const cFormula As String = "=VLOOKUP(@,グループ情報更新!A:C,3,FALSE)"
  With Worksheets("名称補完")
    Worksheets("利用ユーザ").Range("A:C").Copy .Range("A:A")
    With .Range("A1").CurrentRegion.Columns(2)
      If Application.CountBlank(.Cells) > 0 Then
        With .SpecialCells(xlCellTypeBlanks)
        .Formula = Replace(cFormula, "@", .Cells(1).Offset(, -1).Address(False, False))
        End With
      .Value = .Value
      End If
    End With
   End With
          
   
  '名称を入れた表に、実行操作と所要時間を追加する
  ws_master_csv_new.Columns(3).Copy
  ws_cover.Columns(4).PasteSpecial Paste:=xlPasteValues
 
 
  ws_master_csv_new.Columns(4).Copy
  ws_cover.Columns(5).PasteSpecial Paste:=xlPasteValues
  ws_cover.Columns(5).NumberFormatLocal = "h:mm:ss"

  
  ws_cover.Columns(2).Copy ws_master_csv_new.Columns(1)


  ws_master_csv_new.Activate
  

'操作時間を抽出する
  Dim i4, LastRow As Long
  LastRow = Cells(Rows.Count, 1).End(xlUp).Row
  For i4 = 1 To LastRow
    If Cells(i4, 3) = "操作終了" Then
      Rows(i4).Copy ws_usetime.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
    End If
  Next i4


'各ユーザの操作の最も古い時刻と最も新しい時刻を出力結果に抽出する
  With ws_master_csv_new.Range("A2:D" & ws_master_csv_new.Cells(Rows.Count, 1).End(xlUp).Row)
    v = .Value
    For i = 1 To UBound(v)
      m = dic(v(i, 1))
      If m = 0 Then
        n = n + 1
        v(n, 1) = v(i, 1)
        v(n, 2) = v(i, 2)
        v(n, 3) = v(i, 2)
        dic(v(i, 1)) = n
      Else
        If v(m, 2) > v(i, 2) Then
          v(m, 2) = v(i, 2)
        End If
        If v(m, 3) < v(i, 2) Then
          v(m, 3) = v(i, 2)
        End If
      End If
    Next i
    ws_res.Cells(1, 1).Resize(n, .Columns.Count - 1) = v
    
  End With
  
  Set dic = Nothing


  ws_usetime.Columns(1).Copy
  ws_usetime_new.Columns(1).PasteSpecial Paste:=xlPasteValues
    
  ws_usetime.Columns(2).Copy
  ws_usetime_new.Columns(4).PasteSpecial Paste:=xlPasteValues

    
  ws_usetime.Columns(3).Copy
  ws_usetime_new.Columns(3).PasteSpecial Paste:=xlPasteValues
    
  ws_usetime.Columns(4).Copy
  ws_usetime_new.Columns(2).PasteSpecial Paste:=xlPasteValues
  ws_usetime_new.Columns(2).NumberFormatLocal = "h:mm:ss"
    
  ws_usetime.Columns(5).Copy
  ws_usetime_new.Columns(5).PasteSpecial Paste:=xlPasteValues
  
  
  ws_addtime.Activate

  
  '各ユーザーの利用時間を合算
 With Worksheets("開始終了更新")
   For i3 = 2 To .Cells(Rows.Count, "A").End(xlUp).Row
     vK2 = .Cells(i3, "A").Value
     dic2(vK2) = dic2(vK2) + .Cells(i3, "B")
   Next
  End With

  ReDim vA3(1 To dic2.Count, 1 To 2)
  i3 = 0
  For Each vK2 In dic2.Keys
   i3 = i3 + 1
   vA3(i3, 1) = vK2
   vA3(i3, 2) = dic2(vK2)
  Next

  Application.ScreenUpdating = False
  With Worksheets("時間合計")
   With .Range("A1").Resize(i3, 2)
     .EntireColumn.ClearContents
     .Value = vA3
     .Columns(2).NumberFormatLocal = "h:mm:ss"
     Application.Goto .Cells(1), True
   End With
  End With
  Application.ScreenUpdating = True

  Rows(1).Insert


  Set dic2 = Nothing


   'ここで、マスタCSVから取得⇒配列にいれる列を指定


  ws_res.Columns(3).Copy
  ws_last.Columns(1).PasteSpecial Paste:=xlPasteValues
  ws_last.Columns(1).NumberFormatLocal = "yyyy/m/d"
  
  ws_res.Columns(1).Copy
  ws_last.Columns(3).PasteSpecial Paste:=xlPasteValues
  
  
  ws_res.Columns(2).Copy
  ws_last.Columns(4).PasteSpecial Paste:=xlPasteValues
  ws_last.Columns(4).NumberFormatLocal = "h:mm:ss"
  
  ws_res.Columns(3).Copy
  ws_last.Columns(5).PasteSpecial Paste:=xlPasteValues
  ws_last.Columns(5).NumberFormatLocal = "h:mm:ss"
 
  
  ws_addtime.Columns(2).Copy
  ws_last.Columns(6).PasteSpecial Paste:=xlPasteValues
  ws_last.Columns(6).NumberFormatLocal = "h:mm:ss"
  
  
  ws_addtime.Rows(1).Delete
   
  ws_last.Activate
 
  Rows(1).Insert

  Range("A1").Value = "日付"
  Range("B1").Value = "部署"
  Range("C1").Value = "エージェント"
  Range("D1").Value = "ON"
  Range("E1").Value = "OFF"
  Range("F1").Value = "稼働時間"


  ws_group_new.Columns(3).Copy
  ws_group_new_2.Columns(1).PasteSpecial Paste:=xlPasteValues
 
  
  ws_group_new.Columns(2).Copy
  ws_group_new_2.Columns(3).PasteSpecial Paste:=xlPasteValues
  
  
  ws_group_new.Columns(1).Copy
  ws_group_new_2.Columns(2).PasteSpecial Paste:=xlPasteValues
  
  ws_last.Columns(3).Copy
  ws_group_new_3.Columns(1).PasteSpecial Paste:=xlPasteValues
 
  
  ws_last.Columns(2).Copy
  ws_group_new_3.Columns(2).PasteSpecial Paste:=xlPasteValues
  
  
  ws_last.Columns(1).Copy
  ws_group_new_3.Columns(3).PasteSpecial Paste:=xlPasteValues


  Const cFormula2 As String = "=VLOOKUP(@,グループ補完2!A:C,3,FALSE)"
  With Worksheets("グループ名")
    Worksheets("グループ補完").Range("A:C").Copy .Range("A:A")
    With .Range("A1").CurrentRegion.Columns(2)
      If Application.CountBlank(.Cells) > 0 Then
        With .SpecialCells(xlCellTypeBlanks)
        .Formula = Replace(cFormula2, "@", .Cells(1).Offset(, -1).Address(False, False))
        End With
      .Value = .Value
      End If
    End With
   End With


  ws_group_name.Columns(2).Copy
  ws_last.Columns(2).PasteSpecial Paste:=xlPasteValues
  

   ws_last.Activate
  
  With Range("b2:b30000")
  .Replace what:="#N/A", replacement:="dummy", lookat:=xlWhole
  End With

    
'  ws_last.SaveAs "P:\fileexp.csv", FileFormat:=xlCSV, Local:=True


  '初期画面に戻る
  ws_btn.Activate
  
      
  Debug.Print Time
  
  '処理の終了
  Close #intFree
  Close #intFree2
  
  Call MsgBox("取り込みが完了しました。", vbSystemModal)
'  Application.DisplayAlerts = False 'メッセージを非表示設定に変更
'  Application.Quit
'  Workbooks.Close
'  Application.DisplayAlerts = True 'メッセージを表示設定に変更
    
End Sub
・ツリー全体表示

96 / 3841 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free