Excel VBA質問箱 IV

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

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


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

【82312】目安箱は、ここから見れた
発言  Jaka  - 24/6/17(月) 2:27 -

引用なし
パスワード
   目安箱

ht tp://www.vbalab.sakura.ne.jp/vbaqa/c-board.cgi?cmd=tre;id=FAQ
・ツリー全体表示

【82311】Re:日付けが検索されない
発言  マナ  - 24/6/15(土) 15:21 -

引用なし
パスワード
   Sub test()
  Dim ws応募 As Worksheet
  Dim ws集計 As Worksheet
  Dim dic As Object, k
  Dim c As Range, ym As String
  
  Set dic = CreateObject("scripting.dictionary")
 Set ws応募 = Worksheets("応募")
  Set ws集計 = Worksheets("集計")
  
  
  For Each c In ws応募.Range("AX2", ws応募.Cells(Rows.Count, "Ax").End(xlUp))
    If c.Value Like "*インスタ*" Then
      With c.Offset(, 7)
        If IsDate(.Value) Then ym = Format(.Value, "yyyymm")
        dic(ym) = dic(ym) + 20000
      End With
    End If
  Next
  
  For Each k In dic.keys
    If k = "202404" Then ws集計.Range("A5").Value = dic(k)
    If k = "202405" Then ws集計.Range("A6").Value = dic(k)
  Next
  
End Sub
・ツリー全体表示

【82310】日付けが検索されない
質問  せい E-MAIL  - 24/6/15(土) 6:45 -

引用なし
パスワード
   Sub CalculateAndSetValue()
  Dim ws応募 As Worksheet
  Dim ws集計 As Worksheet
  Dim lastRow As Long
  Dim countインスタ4月 As Long
  Dim countインスタ5月 As Long
  Dim i As Long
  Dim axValue As String
  Dim beValue As Variant
  Dim beDate As Date
  
  ' シートを指定
  Set ws応募 = Worksheets("応募")
  Set ws集計 = Worksheets("集計")
  
  ' 最終行を取得(ここではAX列の最終行を取得します)
  lastRow = ws応募.Cells(ws応募.Rows.Count, "AX").End(xlUp).Row
  
  ' 件数の初期化
  countインスタ4月 = 0
  countインスタ5月 = 0
  
  ' 件数をカウント
  For i = 2 To lastRow ' 1行目はヘッダー行として2行目からループ開始
    axValue = ws応募.Cells(i, "AX").Value
    beValue = ws応募.Cells(i, "BE").Value
    
    ' 日付の取得とフォーマット
    On Error Resume Next
    beDate = DateValue(beValue)
    On Error GoTo 0
    
    ' 2024年4月の場合
    If Year(beDate) = 2024 And Month(beDate) = 4 Then
      If InStr(axValue, "インスタ") > 0 Then
        countインスタ4月 = countインスタ4月 + 1
      End If
    End If
    
    ' 2024年5月の場合
    If Year(beDate) = 2024 And Month(beDate) = 5 Then
      If InStr(axValue, "インスタ") > 0 Then
        countインスタ5月 = countインスタ5月 + 1
      End If
    End If
  Next i
  
  ' 件数に20000を掛けた値をシート集計のA5およびA6セルに設定
  ws集計.Cells(5, 1).Value = countインスタ4月 * 20000
  ws集計.Cells(6, 1).Value = countインスタ5月 * 20000
End Sub
上記指示だと
2024/4/1 16:00
のような日付けデータを検索してくれません。
何が間違えているのでしょうか。
式を修正して教えてください
・ツリー全体表示

【82309】Re:フォルダの一括選択
お礼  なんでやねん  - 24/6/6(木) 11:43 -

引用なし
パスワード
   マナさん
下記の通り編集し動作を確認しました。
(準備)提示していただいたコードは、選択したフォルダ内のサブフォルダを一括選択する為、専用フォルダを用意し、そこにデータファイルの入ったフォルダをダウンロードし処理することにしました。
(コード編集)リストボックスに追加したフォルダ(パス)はフォルダ毎に処理するため
  For Each f In fso.getfolder(fdg.SelectedItems(1)).subfolders
    UFフォルダ選択.LB.AddItem f
  Next
としました。
ありがとうございました。
***************************************************************
Sub 起動()
  Dim fdg As FileDialog
  Dim fso As Object
  Dim f As Object
  Dim p As String
  Dim continue As Boolean

  continue = MsgBox("データフォルダを選択してください。", vbYesNo) = vbYes
   If Not continue Then
    Exit Sub
   End If
 
  Set fdg = Application.FileDialog(msoFileDialogFolderPicker)
  If Not fdg.Show Then Exit Sub
 
  Set fso = CreateObject("scripting.filesystemobject")
 
  For Each f In fso.getfolder(fdg.SelectedItems(1)).subfolders
    ' p = f.Path & "\分析.csv"
    UFフォルダ選択.LB.AddItem f
  Next

 UFフォルダ選択.Show
 Set fdg = Nothing
End Sub
・ツリー全体表示

【82308】Re:フォルダの一括選択
お礼  なんでやねん  - 24/6/6(木) 7:15 -

引用なし
パスワード
   マナさん
"filesystemobject"で検索しました。
難解でしたので、生成AI(無料)に提示していただいたコードの解説をかけました。
どちらも私のレベルでは理解不能でしたが、
検索結果と解説を参考にして編集してみます。
成果が出ましたらお伝えします。
一旦、ありがとうございました。
・ツリー全体表示

【82307】Re:フォルダの一括選択
発言  マナ  - 24/6/5(水) 19:39 -

引用なし
パスワード
   ▼なんでやねん さん:

filesystemobjectで検索してみてください。

Sub test()
  Dim fdg As FileDialog
  Dim fso As Object
  Dim f As Object
  Dim p As String

  Set fdg = Application.FileDialog(msoFileDialogFolderPicker)
  If Not fdg.Show Then Exit Sub
  
  Set fso = CreateObject("scripting.filesystemobject")
  
  For Each f In fso.getfolder(fdg.SelectedItems(1)).subfolders
    p = f.Path & "\分析.csv"
    MsgBox p
  Next
  

End Sub
・ツリー全体表示

【82306】フォルダの一括選択
質問  なんでやねん  - 24/6/5(水) 16:08 -

引用なし
パスワード
   (現状)フォルダをひとつづつ選択しそのフォルダパスをフォームのリストボックス(UFフォルダ選択.LB)に登録しています。
(やりたいこと)表示されたフォルダを一括選択したい。可能でしょうか?可能ならその方法をお教えください。
(現状のコード)
Sub 起動()
Dim fldr As FileDialog
Dim sItem As Variant
Dim continue As Boolean

MsgBox "対応するデータフォルダを選択してください。"

Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
  With fldr
    .Title = "データフォルダを選択してください"
    .AllowMultiSelect = True
    continue = True
    While continue
    If .Show = -1 Then
      For Each sItem In .SelectedItems
        UFフォルダ選択.LB.AddItem sItem
      Next sItem
    End If
    continue = MsgBox("選択を続ける", vbYesNo) = vbYes
    Wend
  End With

UFフォルダ選択.Show
  Set fldr = Nothing
End Sub
・ツリー全体表示

【82305】Re:テーブル最終行にデータ貼り付け
お礼  なんでやねん  - 24/6/5(水) 15:09 -

引用なし
パスワード
   マナさん
ありがとうございました。貼り付けできました!
  For i = 0 To UFフォルダ選択.LB.ListCount - 1
    folderPath = UFフォルダ選択.LB.List(i)

    ' フォルダ内の"分析.csv"ファイルを開く
    Set csvWorkbook = Workbooks.Open(folderPath & "\分析.csv")
    
    ' 新しい行を追加し、ペースト
    Set newRow = targetTable.ListRows.Add

    ' "A2:KC2"の範囲をコピー
    csvWorkbook.Sheets(1).Range("A2:KC2").Copy

    ' B列にペースト
    newRow.Range(1, 2).PasteSpecial Paste:=xlPasteValues

    ' クリップボードをクリア
    Application.CutCopyMode = False

    ' "分析.csv"ファイルを閉じる
    csvWorkbook.Close SaveChanges:=False
  Next i
・ツリー全体表示

【82304】Re:テーブル最終行にデータ貼り付け
発言  マナ  - 24/6/5(水) 14:51 -

引用なし
パスワード
   ▼なんでやねん さん:

> 他にどのような原因が考えられるでしょうか?

コピーと行追加の順番を入れ替えてください。
(でないと、コピーモードが解除される)
・ツリー全体表示

【82303】Re:テーブル最終行にデータ貼り付け
質問  なんでやねん  - 24/6/5(水) 11:47 -

引用なし
パスワード
   マナさん
 targetTable.ListRows.Add.Range(1, 2).PasteSpecial Paste:=xlPasteValues を
 newRow.Range(1, 2).PasteSpecial Paste:=xlPasteValues に置換しました。
 やはり同じエラーが発生します。
 "実行時エラー1004 Rangeクラスの PaseSpecialメソッドが失敗しました。"

 試しにコピー範囲を
 Range("A2:KC2")からRange("A2:C2")に変更してみましたが結果は同じでした。

他にどのような原因が考えられるでしょうか?
・ツリー全体表示

【82302】Re:テーブル最終行にデータ貼り付け
発言  マナ  - 24/6/5(水) 11:17 -

引用なし
パスワード
   ▼なんでやねん さん:

newRow.Range(1, 2).PasteSpecial Paste:=xlPasteValues
・ツリー全体表示

【82301】テーブル最終行にデータ貼り付け
質問  なんでやねん  - 24/6/4(火) 14:43 -

引用なし
パスワード
   エラーが出る原因をご教示ください。
(希望する動作)リストボックスに登録された複数フォルダ内のcsvファイルから順次、データをコピーしテーブルの最下行にペーストを行う。
(エラー)targetTable.ListRows.Add.Range(1, 2).PasteSpecial Paste:=xlPasteValues で "実行時エラー1004 Rangeクラスの PaseSpecialメソッドが失敗しました。"

Sub CB登録開始_Click()

  Dim folderPath As String
  Dim csvWorkbook As Workbook
  Dim dbWorkbook As Workbook
  Dim targetTable As ListObject
  Dim newRow As ListRow
  Dim i As Long

  ' このVBAが記されたファイルを参照
  Set dbWorkbook = ThisWorkbook
  Set targetTable = dbWorkbook.Sheets("分析db").ListObjects("概要table")
  
  ' リストボックスに登録された各フォルダを処理
  For i = 0 To UFフォルダ選択.LB.ListCount - 1
    folderPath = UFフォルダ選択.LB.List(i)

    ' フォルダ内の"分析.csv"ファイルを開く
    Set csvWorkbook = Workbooks.Open(folderPath & "\分析.csv")

    ' "A2:KC2"の範囲をコピー
    csvWorkbook.Sheets(1).Range("A2:KC2").Copy

    ' 新しい行を追加し、ペースト
    Set newRow = targetTable.ListRows.Add
    
    ' B列にペースト
    targetTable.ListRows.Add.Range(1, 2).PasteSpecial Paste:=xlPasteValues

    ' クリップボードをクリア
    Application.CutCopyMode = False

    ' "分析.csv"ファイルを閉じる
    csvWorkbook.Close SaveChanges:=False
  Next i

  MsgBox "処理が完了しました。"

End Sub
・ツリー全体表示

【82300】Re:セルの改行が影響してエクセルへの抽...
お礼  VBA初学者です_T  - 24/6/3(月) 10:44 -

引用なし
パスワード
   ▼マナ 様:
>▼VBA初学者です_T さん:
>
>【セル内改行 ダブルクォーテーション対応】ExcelVBAのCSV読み込み方法7つ
>ht ht tps://kamocyc.hatenablog.com/entry/2019/12/12/071856

マナ様
ありがとうございました!
様々試してみたところ、解決しました!
・ツリー全体表示

【82299】Re:セルの改行が影響してエクセルへの抽...
発言  マナ  - 24/5/30(木) 21:04 -

引用なし
パスワード
   ▼VBA初学者です_T さん:

【セル内改行 ダブルクォーテーション対応】ExcelVBAのCSV読み込み方法7つ
ht ht tps://kamocyc.hatenablog.com/entry/2019/12/12/071856
・ツリー全体表示

【82298】セルの改行が影響してエクセルへの抽出結...
質問  VBA初学者です_T  - 24/5/29(水) 15:41 -

引用なし
パスワード
   先日、こちらにてお世話になりました。
表題の件、
csvファイルからエクセルシートへのデータ取得の際、セルの中に改行がある場合、一行に表示されるはずのデータが下のセルへ下のセルへ縦にデータが抽出されます。

どのように記述すれば解決するか、教えていただける方、いらっしゃいませんか?
宜しくお願い致します。


Sub C列でフィルター且つ列番号でデータ取得CSV()
  Dim ws As Worksheet
  Dim wsNew As Worksheet
  Dim csvFile As String
  Dim lastRow As Long
  Dim i As Long
  Dim newRow As Long
  Dim today As String
  Dim cValue As String
  Dim filterValues As Variant
  Dim columnsToCopy As Variant
  Dim colIndex As Long
  Dim copyColumn As Long
  
    ' フィルター対象の値を設定
  filterValues = Array("5", "11", "82", "402", "413", "421", "579", "580", "620")
  
    ' 転記する列を設定
  columnsToCopy = Array(1, 3, 4, 8, 21, 37, 56, 45, 48, 58, 62, 68, 70, 71, 73, 76, 84, 87, 20, 53)

  ' 今日の日付を取得してフォーマット
  today = Format(Date, "yyyymmdd")

  ' CSVファイルのパスを指定
  csvFile = Application.GetOpenFilename("CSVファイル (*.csv), *.csv")
  If csvFile = "False" Then Exit Sub ' ユーザーがキャンセルした場合

  ' 新しいワークシートを作成
  Set wsNew = ThisWorkbook.Sheets.Add
  wsNew.Name = "臨時進捗表_" & today

  ' CSVファイルを読み込むための一時的なワークシートを作成
  Set ws = ThisWorkbook.Sheets.Add
  ws.Name = "TempCSVData"

  ' CSVファイルを読み込み
  With ws.QueryTables.Add(Connection:="TEXT;" & csvFile, Destination:=ws.Range("A1"))
    .TextFileParseType = xlDelimited
    .TextFileCommaDelimiter = True
    .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) ' 必要に応じて列数を変更
    .Refresh BackgroundQuery:=False
  End With

  ' データの最終行を取得
  lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

  ' ヘッダーのコピー
  For i = LBound(columnsToCopy) To UBound(columnsToCopy)
    wsNew.Cells(1, i + 1).Value = ws.Cells(1, columnsToCopy(i)).Value
  Next i

  newRow = 2

  ' C列に指定された文字列が含まれる行を検索して指定の列を転記
  For i = 2 To lastRow ' ヘッダー行を飛ばして2行目から開始
    cValue = ws.Cells(i, 3).Value
    If Not IsError(Application.Match(cValue, filterValues, 0)) Then
      For colIndex = LBound(columnsToCopy) To UBound(columnsToCopy)
        copyColumn = columnsToCopy(colIndex)
        wsNew.Cells(newRow, colIndex + 1).Value = ws.Cells(i, copyColumn).Value
      Next colIndex
      newRow = newRow + 1
    End If
  Next i

  ' 一時的なワークシートを削除
  Application.DisplayAlerts = False
  ws.Delete
  Application.DisplayAlerts = True

  MsgBox "列番号でのデータ抽出が完了しました!", vbInformation
End Sub
・ツリー全体表示

【82297】Re:A-Z列は転記されるが、AB列以降の取得...
お礼  VBA初学者です_T  - 24/5/25(土) 17:45 -

引用なし
パスワード
   ▼マナ 様:
>▼VBA初学者です_T さん:
>
>「フォルダから」で、データを取得すとよいです。


マナ様
ヒント、ありがとうございます!
「フォルダから」で取得してみます!
・ツリー全体表示

【82296】Re:A-Z列は転記されるが、AB列以降の取得...
発言  マナ  - 24/5/25(土) 12:54 -

引用なし
パスワード
   ▼VBA初学者です_T さん:

「フォルダから」で、データを取得すとよいです。
・ツリー全体表示

【82295】Re:A-Z列は転記されるが、AB列以降の取得...
発言  VBA初学者です_T  - 24/5/24(金) 19:30 -

引用なし
パスワード
   ▼マナ 様:
>▼VBA初学者です_T さん:
>
>そういうことであれば、マクロを使わずに、
>抽出も含めPower Queryで実行ではだめですか。


マナ様

Power Query での実行も検討中です。
実務では毎日、csvファイル名(主に日付)が変わるので、読み込むファイル名が統一でなくても良いのか、(今のところは同じファイル名じゃないと運用できないのかなと、、)
毎回、同じファイル名にしないとPower Query更新されないか、毎日の運用でどちらがいいのか、検討しています。

今回のマクロ、Power Query共に毎日、データを取得して毎日エクセルデータを整理して活用している方々の運用にどちらを取り入れるべきか、作成と検討を行い、ご提案しようと考えています。

何度もレス頂きありがとうございます。
・ツリー全体表示

【82294】Re:A-Z列は転記されるが、AB列以降の取得...
発言  マナ  - 24/5/24(金) 12:49 -

引用なし
パスワード
   ▼VBA初学者です_T さん:

そういうことであれば、マクロを使わずに、
抽出も含めPower Queryで実行ではだめですか。
・ツリー全体表示

【82293】Re:A-Z列は転記されるが、AB列以降の取得...
質問  VBA初学者です_T  - 24/5/23(木) 8:05 -

引用なし
パスワード
   ▼マナ 様:
>▼VBA初学者です_T さん:
>
>> CSVファイルのデータをエクセルに落とし、
>
>これは、どのような操作ですか。

マナ様

Excelの操作で言うと、
データ → データの取得(Power Query) →テキスト/CSV シートに全データの読み込み

の操作です。
同ブック内のシート間で必要な行と列の転記をVBAで指示した所、転記ができましたので、
問題はVBAでのCSVの読み込み指示かと思いましたがいかがでしょうか。
・ツリー全体表示

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