Excel VBA質問箱 IV

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

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


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

【80532】処理が遅くなってしまう
質問  amatsuno  - 19/2/28(木) 14:04 -

引用なし
パスワード
   csvファイルを読み込んで、各ユーザのログイン時刻とログアウト時刻
また、実利用時間を取得するスクリプトを作成しています

スクリプト自動実行をおこなっている関係上、
1つのマクロで全処理を実施する必要が発生したため、
各処理を結合したのですが、処理が冗長化しているのか、
別々にしたときよりも実行時間がかかってしまいます。

そこで、スリム化を計画しているのですが、
具体的に手を入れる箇所がうまくわからない状態です。

申し訳ございませんが、
どこを修正すればよいのか、ご教授いただけますでしょうか。
(処理が遅くなっている原因などもお分かりになりましたら、お願いいたします)

Option Explicit

Sub CSV_READ()
 'マスタファイルを読み込むマクロ

  Dim varFileName As Variant
  Dim varFileName2 As Variant
  Dim intFree As Integer
  Dim intFree2 As Integer
  Dim strRec As String
  Dim strRec2 As String
  Dim strSplit() As String
  Dim strSplit2() As String
  Dim i As Long, j As Long
  Dim i2 As Long, j2 As Long
  Dim i3 As Long, j3 As Long
  Dim m As Long, n As Long
  Dim dic As Object
  Dim rng As Range
  Dim vA As Variant, vB As Variant, v As Variant
  Dim ii As Long, jj As Long, kk As Long, nn As Long
   
  Dim vA2 As Variant, vB2 As Variant, v2 As Variant
  Dim ii2 As Long, jj2 As Long, kk2 As Long, nn2 As Long
  
   
  Dim dic2 As Object
  Dim vA3 As Variant, vK2 As Variant, vK3 As Variant


  Dim csvFile As String
  Dim ii3 As Long, jj3 As Long
  
  Dim ws_master_csv As Worksheet
  Dim ws_master_csv_new As Worksheet
  Dim ws_btn As Worksheet
  Dim ws_group As Worksheet
  Dim ws_group_new As Worksheet
  Dim ws_group_user As Worksheet
  Dim ws_cover As Worksheet
  Dim ws_usetime As Worksheet
  Dim ws_usetime_new As Worksheet
  Dim ws_addtime As Worksheet
  Dim ws_res As Worksheet
  Dim ws_last As Worksheet
  Dim ws_group_name As Worksheet
  Dim ws_group_new_3 As Worksheet
  Dim ws_group_new_2 As Worksheet
  
  
  Dim ws_add As Worksheet
  Set ws_add = Worksheets.Add
  ws_add.Name = "最終csv"


  Set ws_master_csv = Worksheets("マスタCSV")
  Set ws_master_csv_new = Worksheets("マスタCSV更新")
  Set ws_btn = Worksheets("ボタン")
  Set ws_group = Worksheets("グループ情報")
  Set ws_group_new = Worksheets("グループ情報更新")
  Set ws_group_user = Worksheets("利用ユーザ")
  Set ws_cover = Worksheets("名称補完")
  Set ws_usetime = Worksheets("開始終了")
  Set ws_usetime_new = Worksheets("開始終了更新")
  Set ws_addtime = Worksheets("時間合計")
  Set ws_res = Worksheets("出力結果")
  Set ws_last = Worksheets("最終csv")
  Set ws_group_name = Worksheets("グループ名")
  Set ws_group_new_3 = Worksheets("グループ補完")
  Set ws_group_new_2 = Worksheets("グループ補完2")
  
  Set dic = CreateObject("Scripting.Dictionary")
  Set dic2 = CreateObject("Scripting.Dictionary")


  ws_master_csv.Activate
 
 
  '貼り付け先を空白にする
  ws_master_csv.Cells.Clear
  ws_master_csv_new.Cells.Clear
  ws_group.Cells.Clear
  ws_group_new.Cells.Clear
  ws_group_user.Cells.Clear
  ws_cover.Cells.Clear
  ws_usetime.Cells.Clear
  ws_usetime_new.Cells.Clear
  ws_addtime.Cells.Clear
  ws_res.Cells.Clear
  ws_last.Cells.Clear
  ws_group_name.Cells.Clear
  ws_group_new_3.Cells.Clear
  ws_group_new_2.Cells.Clear
 
  '読み込むファイルを指定する
  varFileName = "P:\ログ.csv"
  varFileName2 = "P:\ライセンス.csv"


  intFree = FreeFile '空番号を取得
  Open varFileName For Input As #intFree 'CSVファイルをオープン

  'ログ情報のcsvファイルを1行ずつ読み込んで貼り付ける
  i = 0
  Do Until EOF(intFree)
    Line Input #intFree, strRec '1行読み込み
    i = i + 1
    strSplit = Split(strRec, ",") 'カンマ区切りで配列へ
    For j = 0 To UBound(strSplit)
      Cells(i, j + 1) = strSplit(j)
    Next
  Loop
 
  'グループ情報のcsvファイルを1行ずつ読み込んで貼り付ける
  ws_group.Activate

  intFree2 = FreeFile '空番号を取得
  Open varFileName2 For Input As #intFree2 'CSVファイルをオープン

  'csvファイルを1行ずつ読み込んで貼り付ける
  i2 = 0
  Do Until EOF(intFree2)
    Line Input #intFree2, strRec2 '1行読み込み
    i2 = i2 + 1
    strSplit2 = Split(strRec2, ",") 'カンマ区切りで配列へ
    For j2 = 0 To UBound(strSplit2)
      Cells(i2, j2 + 1) = strSplit2(j2)
    Next
  Loop
・ツリー全体表示

【80531】ユーザ名を比較して、存在していないユー...
質問  amatsuno  - 19/2/28(木) 13:52 -

引用なし
パスワード
   2つのシート上に羅列したユーザを比較し、片方にのみ存在するユーザを、双方に存在するユーザの下につなげたいと思っています

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

NAME-1,XXXXX,YYYYY
NAME-2,ZZZZZ,TTTTT
NAME-3,AAAAA,WWWWW
NAME-4,RRRRR,YYYYY
NAME-5,RRRRR,BBBBB
NAME-6,HHHHH,LLLLL

シート2:
カラムA,カラムB

NAME-1,10:00:10
NAME-3,12:12:12
NAME-4,22:20:20
NAME-5,30:30:30


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

NAME-1,10:00:10
NAME-2,23:59:58
NAME-3,12:12:12
NAME-4,22:20:20
NAME-5,03:30:30
NAME-6,23:59:58


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


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

【80530】Re:csvファイルを出力したときに、日付表...
発言  でれすけ  - 19/2/28(木) 13:48 -

引用なし
パスワード
   すみません。私は知らなかったのですが、よく知られたバグ(ではなくて仕様)
なのだそうです。

SaveAsメソッドでテキストファイル保存すると書式が変更される
をキーワードに検索したらかなりヒットしました。

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

SaveAsメソッドの Local引数に True をセットするそうです。

ためしてみてください。
・ツリー全体表示

【80529】Re:csvファイルを出力したときに、日付表...
回答  amatsuno  - 19/2/28(木) 13:24 -

引用なし
パスワード
   ▼でれすけ さん:
>こんにちは。
>
> Windows側の設定だと思います。
>
> Windowsの設定の【時刻と言語】で日付の形式を確認してください。
>
> 地域と言語も日本/日本語でなくなっているかもしれません。

地域と言語はyyyy/MM/ddになっています
形式は日本語になっています
・ツリー全体表示

【80528】Re:csvファイルを出力したときに、日付表...
発言  でれすけ  - 19/2/27(水) 14:20 -

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

 Windows側の設定だと思います。

 Windowsの設定の【時刻と言語】で日付の形式を確認してください。

 地域と言語も日本/日本語でなくなっているかもしれません。
・ツリー全体表示

【80527】Re:csvファイルの読み込みに変数を指定し...
発言  γ  - 19/2/27(水) 13:27 -

引用なし
パスワード
   了解。
・ツリー全体表示

【80526】Re:csvファイルの読み込みに変数を指定し...
お礼  amatsuno  - 19/2/27(水) 11:43 -

引用なし
パスワード
   ▼γ さん:
>こうしたところに投稿するときは、手打ちではなく、
>「VBE画面のコードをそのままコピーペイスト」すべきです。
>
>これまでの指摘はあなたの投稿上のミスについての指摘です。
>というのはいずれも構文エラーになるはずのまちがいです。
>無駄な労力を他人に使わせているのです。
>
>パス名が無効です、
>というエラーメッセージは
>open varfilename for input as #intfree
>の箇所で発生するはずで、
>varfilenameが""になっているのでしょう。
>
>つまり、
>varFileName = dir(sourcepath & "ログ-12345678.csv")は
> dir("P:\aaa\ログ-12345678.csvログ-12345678.csv")
>としていることと同じで、そんなファイルはないから、
>varFileNameは ""となっているのでしょう。
>
>エラー回避のためには、まずは
>sourcepath = "P:\aaa\" とすればよいのでは?
>
>ただし、本当の質問は、日付部分を自動作成したいのではないかと
>思うが、まずはここまで。
>
>繰り返しますが、「コードはコピーペイストすべし」を肝に銘じて下さい。


すいません。
以降、気をつけます
・ツリー全体表示

【80525】csvファイルを出力したときに、日付表記...
質問  amatsuno  - 19/2/27(水) 11:42 -

引用なし
パスワード
   マクロで作成したexcel上のデータをcsvとして保存するときに、
csv上の日付表記がm/d/yyyyの順で表示されてしまいます


 ws_res.Columns(3).Copy
  ws_last.Columns(1).PasteSpecial Paste:=xlPasteValues
  ws_last.Columns(1).NumberFormatLocal = "yyyy/m/d"


  ws_last.SaveAs "C:\fileexp.csv", FileFormat:=xlCSV


上記のように書いたとき、
fileexp.csvの第1カラムが2/26/2019
のように表示されます

どのように修正すればよいのでしょうか?

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

【80524】Re:csvファイルの読み込みに変数を指定し...
お礼  amatsuno  - 19/2/27(水) 9:52 -

引用なし
パスワード
   ▼zzz さん:
>そっちは見てなかった。
>恥ずかしい。


すいません。
""なども指定しています

この箇所、別の方法で回避しましたので、
本件はクローズでお願いします

お手数をおかけしまして申し訳ございませんでした
・ツリー全体表示

【80523】Re:csvファイルの読み込みに変数を指定し...
回答  γ  - 19/2/26(火) 23:05 -

引用なし
パスワード
   こうしたところに投稿するときは、手打ちではなく、
「VBE画面のコードをそのままコピーペイスト」すべきです。

これまでの指摘はあなたの投稿上のミスについての指摘です。
というのはいずれも構文エラーになるはずのまちがいです。
無駄な労力を他人に使わせているのです。

パス名が無効です、
というエラーメッセージは
open varfilename for input as #intfree
の箇所で発生するはずで、
varfilenameが""になっているのでしょう。

つまり、
varFileName = dir(sourcepath & "ログ-12345678.csv")は
dir("P:\aaa\ログ-12345678.csvログ-12345678.csv")
としていることと同じで、そんなファイルはないから、
varFileNameは ""となっているのでしょう。

エラー回避のためには、まずは
sourcepath = "P:\aaa\" とすればよいのでは?

ただし、本当の質問は、日付部分を自動作成したいのではないかと
思うが、まずはここまで。

繰り返しますが、「コードはコピーペイストすべし」を肝に銘じて下さい。
・ツリー全体表示

【80522】Re:csvファイルの読み込みに変数を指定し...
発言  zzz  - 19/2/26(火) 20:18 -

引用なし
パスワード
   そっちは見てなかった。
恥ずかしい。
・ツリー全体表示

【80521】Re:csvファイルの読み込みに変数を指定し...
発言  γ  - 19/2/26(火) 20:05 -

引用なし
パスワード
   文字列は"と"で囲まないとダメということのほか、
Dim と = の取り合わせも 構文エラーになるはずですがね。
・ツリー全体表示

【80520】Re:csvファイルの読み込みに変数を指定し...
発言  zzz  - 19/2/26(火) 20:00 -

引用なし
パスワード
   そこじゃないでしょ。

"  "
・ツリー全体表示

【80519】Re:csvファイルの読み込みに変数を指定し...
回答  amatsuno  - 19/2/26(火) 16:52 -

引用なし
パスワード
   ▼ピンク さん:
>▼amatsuno さん:
>>din sourcepath = string
>> sourcepath = P:\aaa\ログ-12345678.csv
>
>Dim sourcepath = string
>sourcepath = "P:\aaa\ログ-12345678.csv"


すいません。
記載が間違えていました
dimとしても結果が変わりません。
・ツリー全体表示

【80518】Re:フォントの反映【エクセルからアウト...
お礼  aymie  - 19/2/26(火) 15:16 -

引用なし
パスワード
   ▼マナ さん:
>▼aymie さん:
>
>アウトルックのことは全くわかりませんので
>検索してみました。
>
>ht tps://www.ka-net.org/blog/?p=8550

マナさん、
ご回答頂きありがとうございます!Word経由で装飾するという方法があるのですね。エクセル→ワード→アウトルックという形でメール作成ができないか工夫してみます。
自分では探せなかったページなので、とても参考になりました、ありがとうございました。
・ツリー全体表示

【80517】Re:フォルダ内の複数のExcelファイルを1...
発言  マナ  - 19/2/25(月) 17:47 -

引用なし
パスワード
   ▼くりしち さん:

回答ではありません。

↓の xyzさんと同じ方でしょうか?
ht tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=80506;id=excel
・ツリー全体表示

【80516】Re:csvファイルの読み込みに変数を指定し...
発言  ピンク  - 19/2/25(月) 15:14 -

引用なし
パスワード
   ▼amatsuno さん:
>din sourcepath = string
> sourcepath = P:\aaa\ログ-12345678.csv

Dim sourcepath = string
sourcepath = "P:\aaa\ログ-12345678.csv"
・ツリー全体表示

【80515】csvファイルの読み込みに変数を指定したい
質問  amatsuno  - 19/2/25(月) 14:08 -

引用なし
パスワード
   csvファイルを読み込むマクロで、
ファイル名に変数を指定して読み込みをしたいと考えております


読み込むcsvのファイル名は「ログ-(日付).csv」と「ライセンス-(日付).csv」
になり、(日付)が毎日変更される値になります。

din sourcepath = string
sourcepath = P:\aaa\ログ-12345678.csv


dim varFileName as string
dim varFileName2 as string

  
   'マスタ情報のcsvファイルを選択する
  varFileName = dir(sourcepath & "ログ-12345678.csv")


  'グループ情報のcsvファイルを選択する
  varFileName2 = dir(sourcepath & "ライセンス-12345678.csv")

  intFree = FreeFile '空番号を取得
  intFree2 = FreeFile '空番号を取得

'csvファイルを開く
open varfilename for input as #intfree

  'csvファイルを開く
open varfilename2 for input as #intfree2

  
上記のように記載したのですが、
「パス名が無効です」表示されます
(パス自体は存在します)


何か指定が間違っているのでしょうか?
お分かりになられる方、
よろしくお願いいたします
・ツリー全体表示

【80514】フォルダ内の複数のExcelファイルを1つ...
質問  くりしち  - 19/2/25(月) 7:25 -

引用なし
パスワード
   マクロ素人です。
申し訳ありませんが、教えてください。
題名のとおり、集計表を以下の式で作成してみました。

'
Option Explicit
'
Sub Macro1()
'
Dim O As Worksheet
Dim Path As String
Dim FileName As String
Dim IRange As String
Dim RowOut As Long
Dim RowAdd As Long
'
Set O = ThisWorkbook.Sheets("出力")
RowOut = InStrRev([B2], "\")
Path = Left([B2], RowOut - 1)
FileName = Dir([B2])
IRange = [B3]
RowAdd = Range(IRange).Rows.Count
O.Cells.ClearContents
RowOut = 1
'
While FileName > ""
Workbooks.Open Path & "\" & FileName, ReadOnly:=True
Range(IRange).Copy
O.Cells(RowOut, "A").PasteSpecial xlPasteValues
RowOut = RowOut + RowAdd
ActiveWorkbook.Close False
FileName = Dir
Wend
End Sub

上記式の、同マクロ内で出力ブックの、抽出の列数を増やしてみたいと考え、同じ式をコピー(wendの下から、同式のset O以下が同文で、IRange = [B3]を[C3]と変更、O.Cells(RowOut, "A")をO.Cells(RowOut, "B")と変更)し、試してみましたが、エラーが出てしまいました。
同じマクロ内で式を連結させて、出力ブックの抽出列数を増やすことは可能でしょうか?

例:出力ブックB3の範囲は(K13:AI14)となっていますが、C3の範囲は(A2:C13)、D3の範囲は(D2:G14)と、出力ブックの抽出列数を増やしていきたいです。。
・ツリー全体表示

【80513】Re:EXCEL フォルダ内のファイルを結合す...
お礼  xyz  - 19/2/25(月) 6:57 -

引用なし
パスワード
   ▼マナ さん:
>▼xyz さん:
>^
>>Range(K13:AI13).Copy
>>としたところ区切り範囲のエラーが出てしまい、K13:AI13とすると、rangeメソッドのエラーが出てしまいます。
>
>Rangeでのセルの指定方法
>ht tps://excel-ubara.com/excelvba1/EXCELVBA309.html

抽出できました!
お手数おかけしました。本当にありがとうございます!
・ツリー全体表示

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