Excel VBA質問箱 IV

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

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


32292 / 76734 ←次へ | 前へ→

【49680】Re:2表出力
回答  Hirofumi  - 07/6/15(金) 19:57 -

引用なし
パスワード
   以下を変更して下さい ★印追加、●印削除

vntCPosは、「部門」シートの出力列位置を指定しています、Array内の数値は、

  '◆累計を転記するシートの基準位置を設定(指定位置の下の行に転記)
  Set rngOther = Worksheets("部門").Cells(4, "C") '★追加

を基準とした、列Offsetで表わしています
売上がE列=2、差益H列=5、仕入L列=9、在庫O列=12

vntClearは、「部門」シートのデータをクリアする行位置を指定しています
vntRPosは、「部門」シートのデータ転記行位置を指定しています
Array内の30個の数値は、

  '◆累計を転記するシートの基準位置を設定(指定位置の下の行に転記)
  Set rngOther = Worksheets("部門").Cells(4, "C") '★追加

を基準とした、書き込む「係」の行Offsetで表わしています
例えばE5=1、E8=4、尚転記しない所は""で指定します

PS:
 1、支店Aのグループ5が、書き込む欄が2つなのにデータは3つ転記する様に成っていますが?
 2、質問では累計値なのに、「 - 07/6/14(木) 19:10 -」のコードでは、1日のデータですが?

Public Sub Main()
  
  Dim vntKeyB1 As Variant
  Dim rngOther As Range  '★追加
  Dim vntItem As Variant '★追加
  Dim vntCPos As Variant '★追加
  Dim vntRPos As Variant '★追加
  Dim vntClear As Variant '★追加
  Dim strProm As String
    .
    .
  If Not IsDate(Left(vntKeyA2, 4) _
      & "/" & Mid(vntKeyA2, 5, 2) _
          & "/" & Right(vntKeyA2, 2)) Then
    GoTo Wayout
  End If
  
  '◆「項目」列の抽出条件文字列を設定
  vntItem = Array("売上", "差益", "仕入", "在庫") '★追加
  
  '◆累計を転記する別シートの位置
  '(上記、vntItemに対応する物とし、転記先基準からの列Offset値)
  '売上がE列 差益H列 仕入L列 在庫O列
  vntCPos = Array(2, 5, 9, 12) '★追加
  
  '◆部門転記データのクリアする行位置
  vntClear = Array(1, 4, 7, 10, 16, 19, 22, 25, 28, _
          34, 37, 40, 43, 46, 56, 59, 62, 65, _
          68, 71, 77, 80, 86, 89, 92) '★追加
  '◆部門データの転記行位置を設定
  '転記先C4セルを基準とし、基準からの行Offsetで指定
  '例えばE5=1、E8=4、尚転記しない所は""で指定
  Select Case vntKeyB1 '★追加
    Case "本店" '★追加
      vntRPos = Array(56, 59, 62, 77, 65, 89, 68, 71, 34, "", _
              1, 37, "", 16, 19, 4, 22, 25, 40, 43, _
              86, 46, 7, 10, 28, "", "", 80, "", 92) '★追加
    Case "支店A" '★追加
      vntRPos = Array(77, 80, "", "", 86, "", 83, 34, 37, "", _
              16, 1, "", "", "", 19, 22, 56, 4, 59, _
              40, 7, "", "", "", 25, "", 28, "", "") '★追加
    Case "支店B" '★追加
      vntRPos = Array("", "", "", "", "", "", "", "", "", 4, _
              "", "", 1, "", "", "", "", "", "", "", _
              "", "", "", "", "", "", 7, "", 16, "") '★追加
  End Select '★追加
  
  '◆累計を転記するシートの基準位置を設定(指定位置の下の行に転記)
  Set rngOther = Worksheets("部門").Cells(4, "C") '★追加
  
  '画面更新を停止
  Application.ScreenUpdating = False
    ・
    ・
  strProm = "抽出条件に一致するレコードが有りません"
  If Not AddUp(rngList, rngResult, rngWork, vntKeyA1, _
        vntKeyB1, clngColumns, clngItem, vntItem, rngOther, _
            vntCPos, vntRPos, vntClear) Then '★変更、引数変更
    GoTo Wayout
  End If
  If Not AddUp(rngList, rngResult.Offset(, 10), _
        rngWork, vntKeyA2, vntKeyB1, clngColumns, _
            clngItem, vntItem) Then     '★変更、引数変更
    GoTo Wayout
  End If

  strProm = "処理が完了しました"
    ・
    ・
  '画面更新を再開
  Application.ScreenUpdating = True
  
  Set rngWork = Nothing
  Set rngList = Nothing
  Set rngResult = Nothing
  Set rngOther = Nothing '★追加
  
  MsgBox strProm, vbInformation
     
End Sub

'★引数追加
Private Function AddUp(rngList As Range, rngResult As Range, _
            rngWork As Range, vntKeyA1 As Variant, _
            vntKeyB1 As Variant, lngColumns As Long, _
            lngItem As Long, _
            vntItem As Variant, _
            Optional rngOther As Range, _
            Optional vntCPos As Variant, _
            Optional vntRPos As Variant, _
            Optional vntClear As Variant) As Boolean '★引数追加

  '◆「1係」の列位置を指定(基準セル位置からの列Offset:基準がA1で「1係」がD列なら3)
  Const clngBegin As Long = 3
  
  Dim vntTop As Variant
'  Dim vntItem As Variant '●削除

  '●記述位置変更のため削除
  '◆「項目」列の抽出条件文字列を設定
'  vntItem = Array("売上", "差益", "仕入", "在庫") '●削除
  
  '年度先頭の日付を取得
    ・
    ・
  With rngResult
    '出力結果の下に行列を入れ替え値のみPaste
    .PasteSpecial Paste:=xlPasteValues, _
        Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=True
    Application.CutCopyMode = False
    '転記するRangeが有り、且つ転記行位置が指定された場合
    If (Not rngOther Is Nothing) _
        And VarType(vntRPos) = vbArray + vbVariant Then  '★追加
      For i = UBound(vntCPos) To 0 Step -1 '★追加
        '転記列位置の指定が有るなら
        If vntCPos(i) <> "" Then '★追加
          '転記先データを消去
          For j = 0 To UBound(vntClear) '★追加
            rngOther.Offset(vntClear(j), vntCPos(i)) = Empty '★追加
          Next j '★追加
          'データを転記
          For j = 0 To UBound(vntRPos) '★追加
            If vntRPos(j) <> "" Then '★追加
              rngOther.Offset(vntRPos(j), vntCPos(i)).Value _
                  = .Offset(j + 2, lngRows + i).Value '★追加
            End If '★追加
          Next j '★追加
        End If '★追加
      Next i '★追加
    End If '★追加
    .Parent.Activate
    .Select
  End With
     
End Function
4 hits

【49539】月間集計 hiro 07/6/9(土) 17:35 質問
【49541】Re:月間集計 Hirofumi 07/6/10(日) 0:39 回答
【49543】コード修正して下さい Hirofumi 07/6/10(日) 8:17 回答
【49545】Re:コード修正して下さい Hirofumi 07/6/10(日) 13:20 回答
【49552】Re:コード修正して下さい hiro 07/6/10(日) 21:32 質問
【49554】Re:コード修正して下さい Hirofumi 07/6/10(日) 23:43 回答
【49555】Re:コード修正して下さい hiro 07/6/11(月) 0:52 発言
【49556】Re:コード修正して下さい Hirofumi 07/6/11(月) 1:24 回答
【49557】2表出力 Hirofumi 07/6/11(月) 2:49 回答
【49558】Re:2表出力 Hirofumi 07/6/11(月) 2:51 回答
【49581】Re:2表出力 hiro 07/6/11(月) 23:32 質問
【49601】Re:2表出力 Hirofumi 07/6/12(火) 14:49 回答
【49653】Re:2表出力 hiro 07/6/14(木) 19:10 発言
【49654】Re:2表出力 Hirofumi 07/6/14(木) 20:57 回答
【49667】Re:2表出力 hiro 07/6/15(金) 1:29 発言
【49680】Re:2表出力 Hirofumi 07/6/15(金) 19:57 回答
【49704】Re:2表出力 hiro 07/6/17(日) 23:27 発言
【49713】Re:2表出力 Hirofumi 07/6/18(月) 12:13 回答
【49714】Re:2表出力 Hirofumi 07/6/18(月) 12:16 回答

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