Excel VBA質問箱 IV

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

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


6661 / 76734 ←次へ | 前へ→

【75672】Re:同じフォルダ内での作業について
発言  kanabun  - 14/6/12(木) 10:04 -

引用なし
パスワード
   ▼マリモ さん:

元表のあるBookとは 別に マクロをおくBookを作ってください。
そのマクロBook の標準モジュールに コードを書きます。
たとえば以下。
元表をファイルダイアログを使って開き、そのシート1の表を
フィルタで(A,B,C列項目種類別に)別Bookに抽出コピーします。
(任意の月・日・番号 で抽出し 別Bookに転記するくり返しの部分は
読みやすさのために サブプロシージャに独立させてます)

'------------------------------------------------------ 標準モジュール
Option Explicit

Sub test1()
  Dim srcFName
  Dim orgBook As Workbook
  Dim OrgSheet As Worksheet
  Dim bookPath As String
  Dim r As Range
  
  '元表ファイルを開く
  srcFName = Application.GetOpenFilename("元表Book,*.xls*")
  If VarType(srcFName) = vbBoolean Then Exit Sub
  
  Set orgBook = Workbooks.Open(srcFName) '元表のあるBook
  bookPath = orgBook.Path & "\"
  Set OrgSheet = orgBook.Worksheets(1) '元表のあるシート
  Set r = OrgSheet.Cells(1).CurrentRegion
  '元表のA,B,C列(月、日、番号)の種類リストを得る
  Dim v, i As Long
  Dim dic As Object 'リストオブジェクト
  Set dic = CreateObject("Scripting.Dictionary")
  v = r.Resize(, 3).Value '表のA,B,C列を配列に格納
  For i = 2 To UBound(v) '重複をカットした抽出項目を作成
    dic(v(i, 1) & "_" & v(i, 2) & "_" & v(i, 3)) = Empty
  Next
  
  'リストの順にフィルタをかけ、該当Bookに転記する
  Dim ky
  For Each ky In dic.Keys()
    FilterCopy ky, r, bookPath
  Next
  orgBook.Close False
End Sub

'-----------------------------------------------------------
'元表rに ky項目で AutoFilterをかけ、抽出データを該当Bookに
'転記する
Private Sub FilterCopy(ky, ByVal r As Range, bookPath$)
  Dim v
  v = Split(ky, "_")
  r.AutoFilter 1, Val(v(0)) 'A列を「月」で
  r.AutoFilter 2, Val(v(1)) 'B列を「日」で
  r.AutoFilter 3, Val(v(2)) 'C列を「番号」でFilter
  
  '抽出行はタイトル行以外に一行以上ある
  Dim bookName As String
  Dim copyBook As Workbook
  '転記先Bookはなければ新規作成する
  bookName = bookPath & ky & "_○○○.xls"
  On Error Resume Next
  Set copyBook = Workbooks.Open(bookName)
  On Error GoTo 0
  If copyBook Is Nothing Then
   Set copyBook = Workbooks.Add(xlWBATWorksheet)
   copyBook.SaveAs bookName
  End If
  '------ 抽出データをコピー
  r.Columns("D:F").Copy
  copyBook.Worksheets(1).Range("H1").PasteSpecial Transpose:=True
  copyBook.Save
  copyBook.Close False
  
  r.AutoFilter

End Sub

7 hits

【75661】同じフォルダ内での作業について マリモ 14/6/9(月) 9:43 質問
【75662】Re:同じフォルダ内での作業について kanabun 14/6/9(月) 14:38 発言
【75664】Re:同じフォルダ内での作業について マリモ 14/6/10(火) 9:37 お礼
【75665】Re:同じフォルダ内での作業について マリモ 14/6/10(火) 16:45 質問
【75666】Re:同じフォルダ内での作業について γ 14/6/11(水) 8:11 発言
【75675】Re:同じフォルダ内での作業について マリモ 14/6/12(木) 14:44 お礼
【75672】Re:同じフォルダ内での作業について kanabun 14/6/12(木) 10:04 発言
【75673】Re:同じフォルダ内での作業について kanabun 14/6/12(木) 10:19 発言
【75674】Re:同じフォルダ内での作業について kanabun 14/6/12(木) 10:23 発言
【75676】Re:同じフォルダ内での作業について マリモ 14/6/12(木) 14:48 お礼

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