Excel VBA質問箱 IV

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

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


8917 / 76732 ←次へ | 前へ→

【73383】Re:AdvancedFilterメソッドについて
発言  kanabun  - 12/12/29(土) 9:31 -

引用なし
パスワード
   ▼ニャンソ さん:

>間違えです。Zになります。

>今までのですと、従業員番号で行っていました。

了解です。

>加えてBook1の元データですが、また変更するそうです…

金額欄が Y,Z列とか、
Book2 のどの行に 印刷データを値貼り付けするのか? とか、
そういうことは「変数」 なので、変わってもいいようにマクロの
ほうで対応しておけばいいですよ。

そういえば、送られてくるデータブックも当然 Book名が都度
変わりますね?
前回の (kanabun案) を少し変更して、Book1の名前をマクロコード
上でいちいち変更しなくてもすむように、マクロを実行するときは
送られてきたデータブックを前面にして(アクティブにして)スタート
すればすむようにしました。

> Book1-1が他部署より送られてきたデータになります。

なので、ここから マクロブックの「Temp」シートに 必要な3地区データ
を転送し、「Temp」シートにコピーされたデータについてだけグループ
番号の書き込みをすることにします。要は、並び替えのキーにグループ
番号が必要なだけなので、ってことです。

そのほかのレイアウト関係は 前回と同じ前提です。

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

Private Book1 As Workbook
Private Book2 As Workbook
Private Book3 As Workbook

Sub Try1()
 '◆送られてきたBookをアクティブにして実行してください
 Set Book1 = ActiveWorkbook '送られてきたデータブック
 Set Book2 = Workbooks("Book2.xls") '印刷シート
 Set Book3 = ThisWorkbook  'このマクロBook(Group名一覧を含む)
 
 If Book1 Is Book2 Then
   MsgBox "送られてきたBookを前面にして実行", vbCritical
   Exit Sub
 End If
 If Book1 Is Book3 Then
   MsgBox "送られてきたBookを前面にして実行", vbCritical
   Exit Sub
 End If
 
  
'>1.処理する地区のみ(3地区)フィルタにて表示し別シートへコピペ
'まず Book1の2つのシートから 必要な3地区データのみ AdvancedFilterにて _
 Book3.[Temp] へ抽出転記します。
 
 Dim shtA As Worksheet 'Book1 のSheet1
 Dim shtP As Worksheet 'Book2の印刷用シート
 Dim shtL As Worksheet 'Book3の「List」Sheet
 Dim nSheet As Long
 Dim nRow As Long: nRow = 1
 Dim c As Range, cc As Range
 
 Set shtA = Book1.Sheets(1)
 Set shtL = Book3.Worksheets("List")
 Set c = shtL.Range("G1")
 Set c = Range(c, c.End(xlDown)) 'CriteriaRange(抽出したい地区名リスト)
 Set shtP = Book2.Sheets(1)
 
 With Book3.Worksheets("Temp") 'Temp Sheetに必要データだけ転記
   .UsedRange.Clear
   '列見出しのコピー
   .Cells(nRow, 1) = "Group番号" 'あとで Book3より引用
   .Cells(nRow, 2) = shtA.[C7].Value '県名
   .Cells(nRow, 3) = shtA.[D7].Value '地区★
   .Cells(nRow, 4) = shtA.[F7].Value '従業員番号-----+
   .Cells(nRow, 5) = shtA.[G7].Value '従業員氏名   |印刷項目
   .Cells(nRow, 6) = shtA.[Y7].Value '申請金額    |
   .Cells(nRow, 7) = shtA.[Z7].Value '実金額 -------+
   With shtA
     Set cc = .Range("C7", .Cells(.Rows.Count, "C").End(xlUp))
   End With
   cc.Resize(, 24).AdvancedFilter xlFilterCopy, _
     CriteriaRange:=c, _
     CopyToRange:=.Cells(nRow, 2).Resize(, 6) '別シートに抽出
   
'>2.そこに Book3[List] からグループ番号をコピペ
   'shtP A列にグループ番号 埋め込み
   Dim i&, v
   Dim dic As Object
   
   Set dic = CreateObject("Scripting.Dictionary")
   v = shtL.[A1].CurrentRegion.Value 'Group番号 ⇔ 従業員番号
   For i = 2 To UBound(v)
     dic(v(i, 4)) = v(i, 3)
   Next
   Set c = .Range("B2", .Cells(.Rows.Count, "B").End(xlUp))
   v = c.Offset(, 2).Value '従業員番号データ
   ReDim grp(1 To UBound(v), 1 To 1)
   For i = 1 To UBound(v)
     If dic.Exists(v(i, 1)) Then
       grp(i, 1) = dic(v(i, 1))
     End If
   Next
   .[A2].Resize(UBound(v)).Value = grp
   
'>3.グループ番号・従業員番号順に並び変え
   With c.CurrentRegion
     .Sort Key1:=.Columns(1), Key2:=.Columns(4), _
        Header:=xlYes
   End With
   
   .Columns(6).Insert '「申請日」列を挿入 空白
   Set cc = c.CurrentRegion.Resize(, 8) '8列
   '◆A:Group番号 D:従業員NB E:員名 F:申請日 G:申請金額 H:実金額
    
' 4.グループ番号(1〜12)別に 印刷シート[B8]へ 値のみ転記・印刷する
   For i = 1 To 12
     cc.Columns(1).AutoFilter 1, i
     If cc.Columns(1).SpecialCells(xlVisible).Count > 1 Then
       shtP.[B8:F40].ClearContents '←表罫線範囲クリア
       Intersect(cc.Offset(1), cc.Columns("D:H")).Copy
       shtP.[B8].PasteSpecial xlValues
'>5.合計金額(申請金額・実金額それぞれ)を算出 (数式入力)
       '----------- 集計行が不明なので割愛 ------------
       '印刷します
       shtP.PrintPreview '⇒ 実用時には .PrintOut に変更
     End If
     cc.Columns(1).AutoFilter
   Next
 End With
   
End Sub

Book3(マクロブック)シート「Temp」
'>3.グループ番号・従業員番号順に並び変え
後の表はこんな感じになります。
-----------------------------------------------------------------
  A   B  C   D     E  F   G   H  
-----------------------------------------------------------------
Group番号 県名 地区 従業員番号  氏名    申請金額 実金額
  1   三重 C地区   005    新井      87   73
  2   岐阜 B地区   015    上野      81   73
  2   岐阜 B地区   017    遠藤      90   51
  3   三重 C地区   020    大貫      87   36
  3   愛知 A地区   024    岡田      63   100
  4   愛知 A地区   030    加藤      73   44
  4   三重 C地区   032    神山      91   32
  5   愛知 A地区   034    川島      73   44
  :  
  :

449 hits

【73344】AdvancedFilterメソッドについて ニャンソ 12/12/21(金) 23:34 質問
【73346】Re:AdvancedFilterメソッドについて UO3 12/12/22(土) 0:44 発言
【73348】Re:AdvancedFilterメソッドについて ニャンソ 12/12/22(土) 8:33 質問
【73349】Re:AdvancedFilterメソッドについて kanabun 12/12/22(土) 10:08 発言
【73350】Re:AdvancedFilterメソッドについて kanabun 12/12/22(土) 10:17 発言
【73353】Re:AdvancedFilterメソッドについて ニャンソ 12/12/22(土) 16:22 回答
【73352】Re:AdvancedFilterメソッドについて ニャンソ 12/12/22(土) 16:18 質問
【73351】Re:AdvancedFilterメソッドについて UO3 12/12/22(土) 14:07 発言
【73354】Re:AdvancedFilterメソッドについて ニャンソ 12/12/22(土) 16:28 回答
【73355】Re:AdvancedFilterメソッドについて UO3 12/12/22(土) 18:23 発言
【73356】Re:AdvancedFilterメソッドについて ニャンソ 12/12/22(土) 19:14 お礼
【73358】Re:AdvancedFilterメソッドについて ニャンソ 12/12/24(月) 21:24 回答
【73360】Re:AdvancedFilterメソッドについて kanabun 12/12/25(火) 0:05 発言
【73362】Re:AdvancedFilterメソッドについて ニャンソ 12/12/25(火) 20:34 お礼
【73361】Re:AdvancedFilterメソッドについて UO3 12/12/25(火) 10:39 発言
【73363】Re:AdvancedFilterメソッドについて ニャンソ 12/12/25(火) 20:54 回答
【73364】Re:AdvancedFilterメソッドについて UO3 12/12/26(水) 9:53 発言
【73366】Re:AdvancedFilterメソッドについて ニャンソ 12/12/26(水) 19:46 お礼
【73369】Re:AdvancedFilterメソッドについて UO3 12/12/27(木) 12:33 発言
【73371】Re:AdvancedFilterメソッドについて ニャンソ 12/12/27(木) 22:03 回答
【73372】Re:AdvancedFilterメソッドについて UO3 12/12/27(木) 22:10 発言
【73379】Re:AdvancedFilterメソッドについて ニャンソ 12/12/28(金) 21:00 回答
【73373】Re:AdvancedFilterメソッドについて UO3 12/12/27(木) 22:15 発言
【73380】Re:AdvancedFilterメソッドについて ニャンソ 12/12/28(金) 21:02 回答
【73382】Re:AdvancedFilterメソッドについて ニャンソ 12/12/28(金) 22:00 発言
【73385】Re:AdvancedFilterメソッドについて ニャンソ 12/12/29(土) 20:11 回答
【73374】Re:AdvancedFilterメソッドについて kanabun 12/12/28(金) 11:23 発言
【73375】Re:AdvancedFilterメソッドについて kanabun 12/12/28(金) 11:42 質問
【73376】Re:AdvancedFilterメソッドについて UO3 12/12/28(金) 12:05 発言
【73377】Re:AdvancedFilterメソッドについて kanabun 12/12/28(金) 19:37 発言
【73378】Re:AdvancedFilterメソッドについて kanabun 12/12/28(金) 20:05 発言
【73381】Re:AdvancedFilterメソッドについて ニャンソ 12/12/28(金) 21:56 回答
【73383】Re:AdvancedFilterメソッドについて kanabun 12/12/29(土) 9:31 発言
【73384】Re:AdvancedFilterメソッドについて kanabun 12/12/29(土) 9:40 発言
【73386】Re:AdvancedFilterメソッドについて ニャンソ 12/12/29(土) 21:23 回答
【73387】Re:AdvancedFilterメソッドについて kanabun 12/12/29(土) 21:58 発言
【73388】Re:AdvancedFilterメソッドについて ニャンソ 13/1/2(水) 21:17 回答
【73390】Re:AdvancedFilterメソッドについて kanabun 13/1/3(木) 0:26 発言
【73391】Re:AdvancedFilterメソッドについて ニャンソ 13/1/3(木) 20:39 回答
【73392】Re:AdvancedFilterメソッドについて kanabun 13/1/3(木) 23:11 発言
【73396】Re:AdvancedFilterメソッドについて ニャンソ 13/1/4(金) 20:59 回答
【73409】Re:AdvancedFilterメソッドについて kanabun 13/1/5(土) 19:04 発言
【73428】Re:AdvancedFilterメソッドについて ニャンソ 13/1/7(月) 21:05 回答
【73429】Re:AdvancedFilterメソッドについて kanabun 13/1/7(月) 23:27 発言
【73451】Re:AdvancedFilterメソッドについて ニャンソ 13/1/11(金) 20:54 回答
【73452】Re:AdvancedFilterメソッドについて kanabun 13/1/11(金) 23:09 発言
【73477】Re:AdvancedFilterメソッドについて ニャンソ 13/1/14(月) 20:07 回答
【73488】Re:AdvancedFilterメソッドについて kanabun 13/1/15(火) 9:39 発言
【73508】Re:AdvancedFilterメソッドについて ニャンソ 13/1/16(水) 21:17 回答
【73511】Re:AdvancedFilterメソッドについて kanabun 13/1/16(水) 22:51 発言
【73521】Re:AdvancedFilterメソッドについて ニャンソ 13/1/17(木) 20:46 回答
【73522】Re:AdvancedFilterメソッドについて kanabun 13/1/17(木) 21:58 発言
【73525】Re:AdvancedFilterメソッドについて ニャンソ 13/1/17(木) 22:47 回答
【73389】Re:AdvancedFilterメソッドについて ニャンソ 13/1/2(水) 21:26 回答
【73365】Re:AdvancedFilterメソッドについて kanabun 12/12/26(水) 9:54 発言
【73367】Re:AdvancedFilterメソッドについて ニャンソ 12/12/26(水) 20:06 回答
【73368】Re:AdvancedFilterメソッドについて kanabun 12/12/26(水) 21:09 質問
【73370】Re:AdvancedFilterメソッドについて ニャンソ 12/12/27(木) 21:49 回答
【73359】Re:AdvancedFilterメソッドについて ニャンソ 12/12/24(月) 21:25 質問

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