Excel VBA質問箱 IV

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

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


6929 / 13646 ツリー ←次へ | 前へ→

【42265】抽出作業について 通りすがりの達人 06/9/5(火) 10:57 質問[未読]
【42266】Re:抽出作業について かみちゃん 06/9/5(火) 11:09 発言[未読]
【42270】Re:抽出作業について 通りすがりの達人 06/9/5(火) 11:55 お礼[未読]
【42286】Re:抽出作業について 飛ばない豚 06/9/5(火) 15:39 回答[未読]

【42265】抽出作業について
質問  通りすがりの達人  - 06/9/5(火) 10:57 -

引用なし
パスワード
   はじめまして。
seet1データ
例:
   A     B    C         D     E
 1 年月日   工事No. 作業所名      借方科目コート  借方金額
 2 06/07/20  A675  国分寺新築工事    5212     10500   
 3 06/07/25  C010  斉藤邸新築工事    5212     10500
 4 06/7/30   C055  朝日ビル改修    5212     10500 
 5 06/6/25   A675  国分寺新築工事    5212     10500
 6 06/6/10   Z003  材料一括      5212     10500


seet2「フィルタオプションの設定」での抽出
例:
   A     B    C         D     E
 1 年月日   工事No. 作業所名      借方科目コート  借方金額
 2       A675  
 3           国分寺新築工事

 5 年月日   工事No. 作業所名      借方科目コート  借方金額
 6 06/07/20  A675  国分寺新築工事    5212     10500     7 06/6/25   A675  国分寺新築工事    5212     10500

seet3抽出したseet2のデータから作った「工事台帳」
例:
   A     B    C         D     E
 1 A675  国分寺新築工事         担当者    小林
 2       
 3
 4 年月日  借方科目コート  借方金額    計
 5 =seet2'A6 =seet2'C6  =seet2'E6    =C5 
 6 =seet2'A7 =seet2'C7  =seet2'E7    =D5+C6
 7 =seet2'A8 =seet2'C8  =seet2'E8    =D6+C7

長くて申し訳ありません。
seet2を省略して、seet3を作る事は可能ですか?
seet3のA1セルに工事No.を入力したら、A4セルから下行に自動的に抽出データを
表示させていきたいのです。
seet1は常に変動します。
seet3のB1、E1は「工事番号コード表」を使用し、「Vlookup関数」を用い、表示されるようになっています。

【42266】Re:抽出作業について
発言  かみちゃん  - 06/9/5(火) 11:09 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>seet3のA1セルに工事No.を入力したら、A4セルから下行に自動的に抽出データを
>表示させていきたい

オートフィルタで抽出した結果をコピーすればいいのではないでしょうか?
「マクロの記録」で記録すれば、ある程度のコードは得られます。

【42270】Re:抽出作業について
お礼  通りすがりの達人  - 06/9/5(火) 11:55 -

引用なし
パスワード
   ▼かみちゃん さん:
回答ありがとうございます。

>オートフィルタで抽出した結果をコピーすればいいのではないでしょうか?
>「マクロの記録」で記録すれば、ある程度のコードは得られます。

実は、seet3の工事台帳の物件は500件程度、1物件あたりの設定は1000行
となっていて、かなりのボリュームになります。

今まではseet1データとseet2抽出を開き、フィルタオプションのマクロを貼り付けたボタンをクリック実行し保存した後、seet1を閉じてからseet3工事台帳を開き、
表示されたことを確認してから、保存して終了という作業をしていました。
seet1、2、3と書いてきましたが、実際はAブックに抽出は50シート、
Bブックに工事台帳は20シートが精一杯でそれ以上設定すると、
効率が良くなるどころか、開かなくなってしまいます。
そこをなんとかマクロ式を直接工事台帳に設定し、データの中から、台帳の工事番号と同じものだけを拾ってきたいのです。
一般的な関数と、マクロを記録させることぐらいしか知識がないので、
ぜひ知恵を貸していただきたいのです。
よろしくお願いします。

【42286】Re:抽出作業について
回答  飛ばない豚  - 06/9/5(火) 15:39 -

引用なし
パスワード
   ▼通りすがりの達人 さん:
ちょっと勉強を兼ねてコードを作ってみました。

seet3(工事台帳?)がアクティブな状態からの実行を想定してます。


>実は、seet3の工事台帳の物件は500件程度、1物件あたりの設定は1000行
>となっていて、かなりのボリュームになります。
結果どうしたいのかが、いまいち理解できなかったので、もしかすると
とんちんかんなものになってるかもしれません。


Sub sub_sample3()
  'Seet3(工事台帳?から実行)
  Dim myRange As Range
  
  '旧データのクリア
'  Sheets("Seet3").Range("A5:D" & Cells.Rows.Count).ClearContents
  Range("A5:D" & Cells.Rows.Count).ClearContents
  
  With Worksheets("Seet1")
    .Range("A1").AutoFilter  '念の為
    Set myRange = .Range(.Cells(2, 1), _
               .Cells(.Cells.Rows.Count, 1).End(xlUp))
    
    'データの抽出
    .Range("A1").AutoFilter Field:=2, Criteria1:=Range("A1").Value
  End With
  
  'コピー
  On Error Resume Next
  myRange.SpecialCells(xlCellTypeVisible).Copy Range("A5")
  myRange.Resize(, 2).Offset(, 3) _
      .SpecialCells(xlCellTypeVisible).Copy Range("B5")
  On Error GoTo 0
  
  'フィルタ解除
  Worksheets("Seet1").Range("A1").AutoFilter
  
  '累計の式挿入
  Set myRange = Range("C" & Cells.Rows.Count).End(xlUp)
  If myRange.Row <= 4 Then
    MsgBox "抽出データ無し"
    Exit Sub
  ElseIf myRange.Row = 5 Then
    Range("D5").Value = "=C5"
  Else
    Range("D5").FormulaR1C1 = "=RC[-1]"
    Range("D6:D" & myRange.Row).FormulaR1C1 = "=R[-1]C+RC[-1]"
  End If
  
  MsgBox "終了"
  
End Sub


私自身の勉強を兼ねたので、分かりにくい部分があるかもしれませんが、
ご了承下さい。

(^・ω・^)

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